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.
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
[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.
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:
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.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.