PDA

Tam Sürümünü Görmek İçin : hdd seri no okumak


hakancik
21/04/2007, 04:29
hdd nin seri numarasını okuyup textbox nasıl çekebilirim. yardım ederseniz sevinirim.


shurzan
21/04/2007, 06:48
Windowsun GetVolumeInformation API sini kullanabilirisin.
ben kendi projemde de kullanmıştım. VC++ olarak nasıl kodlanır bilmem ama istersenen BCB kodlanmışı şeklini verebilirim.

hakancik
21/04/2007, 12:13
c# için lazım bana eklemeyi unutmuşum. ama işime yararsa verirsen menmun olurum

y@rgic
21/04/2007, 13:39
[DllImport("kernel32.dll")]
private static extern long GetVolumeInformation(string PathName, StringBuilder VolumeNameBuffer, UInt32 VolumeNameSize, ref UInt32 VolumeSerialNumber, ref UInt32 MaximumComponentLength, ref UInt32 FileSystemFlags, StringBuilder FileSystemNameBuffer, UInt32 FileSystemNameSize);


private static void GetHDDInformation(string drive)
{
StringBuilder volumeName = new StringBuilder();
StringBuilder fileSystem = new StringBuilder();

uint harDiskSerial = 0;
uint dummy1 = 0;
uint dummy2 = 0;

GetVolumeInformation(drive, volumeName, 255, ref harDiskSerial, ref dummy1, ref dummy2, fileSystem, 255);
_hardDiskSerial = harDiskSerial;

}

hakancik
21/04/2007, 13:57
eline sağlık ama [DllImport("kernel32.dll")] hata veriyor

zbahadir
21/04/2007, 14:54
Windowsun GetVolumeInformation API sini kullanabilirisin.
ben kendi projemde de kullanmıştım. VC++ olarak nasıl kodlanır bilmem ama istersenen BCB kodlanmışı şeklini verebilirim.


Arkadaşım bu BCB için olanı kodu paylaşbilirmisiniz.
Bir kaç örnek buldum ama paralı olduğu için kullanamadım.

shurzan
21/04/2007, 20:30
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char diskadi[255];
unsigned long serino;
if(GetVolumeInformation"c:\\",diskadi,sizeof(diskadi),&serino,NULL,NULL,NULL,0)){
Edit1->Text = IntToStr(serino); //Bu editte diskin seri numarası
Edit2->Text = diskadi; //Bu editte disk adı
görünür
}
}


/////////////////////////--------------------/////////////////
burada Windows'un GetVolumeInformation API'si kullanılıyor aşağıda API'nin parameterlerini vereceğim bu API sadece Seri numarasını değil bir çok teknik özelliklerinide elde etmeye yarar.
Kolaygelsin.
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, //Disk etiketi
LPTSTR lpVolumeNameBuffer, //Disk adı için char türünden dizi alır ve bu diziye diskin adını yazar
DWORD nVolumeNameSize, //Bu parametre ise bu dizinin boyutu girilir
LPDWORD lpVolumeSerialNumber, //Seri no için unsigned long türünden değişken referans ile geçirilir
LPDWORD lpMaximumComponentLength, // bu parametreleri kullanmayacaksan NULL girmelisin
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer, //Bu parametreye ise Diskin Dosya sistemini elde etmek için char türünden diziyi parametre olarak gireriz
DWORD nFileSystemNameSize //Burada ise bu dizinin boyutu girilir
);

zbahadir
21/04/2007, 22:05
Deneyecekler için ufak bir parantez unutulmuş;

char diskadi[255];
unsigned long serino;
if(GetVolumeInformation("c:\\",diskadi,sizeof(diskadi),&serino,NULL,NULL,NULL,0)){
Edit1->Text = IntToStr(serino); //Bu editte diskin seri numarası
Edit2->Text = diskadi; //Bu editte disk adı görünür
}

Bilgiler için teşekkürler Shurzan. :super:

y@rgic
23/04/2007, 19:49
eline sağlık ama [DllImport("kernel32.dll")] hata veriyor

Kullandığın yerde using System.Runtime.InteropServices; koyman lazım. Muhtemelen ondan hata alıyorsundur. Yada ne hatası alıyorsan söylersen yardımcı olmaya çalışırım.