Autor |
Beitrag |
Handycommander
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 11:37
hi,
also ich möchte die hardwareid eines wechseldatenträgers auslesen. wie kann ich das machen?
danke
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 31.07.05 11:42
Was verstehst du unter einer Hardware-ID? Die Seriennummer, die (auch) außen draufsteht?
AXMD
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 11:54
ja auf einem wechseldatenträger wie zum beispiel einer MMC karte steht ja aussen keine seriennummer drauf. kann man die dann trotzdem auslesen oder gibts da eine andere ID zum auslesen?
|
|
sibbe
      
Beiträge: 50
WIN XP Prof
D7 Prof
|
Verfasst: So 31.07.05 12:46
Hi,
versuchs mal mit der API-Funktion GETVOLUMEINFORMATION.
Interessant dürfte da der lpVolumeSerialNumber-Parameter für dich sein.
Inwieweit das aber mit Wechseldatenträgern funktioniert weiß ich nicht, musste halt ausprobieren.
greetz sibbe
_________________ Ideale sind wie Sterne: Man kann sie zwar nicht erreichen, aber man kann sich sehr wohl an ihnen orientieren.
(Blaise Pascal)
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 13:38
hab des jetzt so probiert. da bekomm ich die seriennummer der wechseldatenträger, wenn sie ne MMC karte ist. aber von einem speicherstift bekomm ich sie nicht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function GetHardDiskSerial(const DriveLetter: Char): string; var NotUsed: DWORD; VolumeFlags: DWORD; VolumeInfo: array[0..MAX_PATH] of Char; VolumeSerialNumber: DWORD; begin GetVolumeInformation(PChar(DriveLetter + ':\'), nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed, VolumeFlags, nil, 0); Result := Format('Label = %s VolSer = %8.8X', [VolumeInfo, VolumeSerialNumber]) end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetHardDiskSerial('c')); end; |
|
|
sibbe
      
Beiträge: 50
WIN XP Prof
D7 Prof
|
Verfasst: So 31.07.05 15:25
So hab nochmal ein bisschen rumgeschaut und dabei folgendes gefunden:
Zum einen ist die Seriennummer wahrscheinlich gar nicht die, die du haben willst, weil
Zitat: | GetVolumeInformation [...] This function returns the volume serial number that the operating system assigns when a hard disk is formatted. To programmatically obtain the hard disk's serial number that the manufacturer assigns, use the Windows Management Instrumentation (WMI) Win32_PhysicalMedia property SerialNumber. |
oder gehe ich falsch in der Annahme, dass du die Seriennummer quasi "vom Werk" haben willst?
Eine Möglichkeit wär also mit WMI an die Sache ranzugehen (wovon ich mal überhaupt keinen Plan hab, ist das in Delphi überhaupt implementiert??)
Eine weitere, in meinen Augen einfachere, Sache wäre, die Daten über die Registry auszulesen. Allerdings hab ich keine Ahnung, was da jetzt genau was ist.
Unter WinXP würd ich unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum mal schauen, unter Win98 war das glaub ich nur HKEY_LOCAL_MACHINE\Enum.
Aber alle Angaben ohne Gewähr
Hab auch keinen Speicherstift oder ähnliches, kann es also auch nicht selbst ausprobieren.
greetz sibbe
_________________ Ideale sind wie Sterne: Man kann sie zwar nicht erreichen, aber man kann sich sehr wohl an ihnen orientieren.
(Blaise Pascal)
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 15:33
ja ok. da sind die ganzen seriennummern vorhanden. aber auch von denen, die nicht gerade angeschlossen sind! kann ich das nicht irgendwie machen, dass ich nur die seriennummer bekomme, von denen, die auch gerade angeschlossen sind?
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 15:56
so hab jetzt den code hergenommen.
der funktioniert wunderbar!
ABER:
bei den MMC karten, wird der code ausgelesen, bei einem speicherstift aber nicht!
warum?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var SerialNum: DWord; A,B: DWord; C: array [0..255] of Char; Buffer: array [0..255] of Char; begin if GetVolumeInformation( PChar('F:\'), Buffer, 256, @SerialNum, A, B, C, 256) then Label1.Caption:=IntToStr(SerialNum); end; |
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 31.07.05 16:01
Handycommander hat folgendes geschrieben: | bei den MMC karten, wird der code ausgelesen, bei einem speicherstift aber nicht! |
Und du bist sicher, dass dieser Speicherstift auch einen solchen hat? Schau mal in den Gerätemanager...
AXMD
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 16:05
ja ist er. er wird genauso behandelt wie die mmc karten. also als wechseldatenträger.
aber wenn ich jetzt die seriennummer prüfe, bekomm ich als ergebnis immer 0
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 31.07.05 16:07
Nur, weil ihn Windows als Wechseldatenträger erkennt, muss er keine Seriennummer haben.
AXMD
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 16:14
kann ich dann überhaupt irgendwas davon auslesen?
|
|
Sprint
      
Beiträge: 849
|
Verfasst: So 31.07.05 16:17
AXMD hat folgendes geschrieben: | Nur, weil ihn Windows als Wechseldatenträger erkennt, muss er keine Seriennummer haben. |
Dann ist aber vermutlich auf dem Datenträger ein Dateisystem wie z.B. FAT oder NTFS. Und dann muss auch eine Volume Seriennummer vorhanden sein.
_________________ Ciao, Sprint.
|
|
Handycommander 
      
Beiträge: 1054
Windows XP Pro, Vista
Visual Studio 2008
|
Verfasst: So 31.07.05 16:25
also das problem hat sich erledigt. habe den speicherstift formatiert und jetzt ließt er die seriennummer aus!
|
|