Entwickler-Ecke
Windows API - Festplatten Name/Model ermitteln
Biarchiv - Mi 15.07.09 14:54
Titel: Festplatten Name/Model ermitteln
Hallo,
gibts zufällig eine API wo ich den Festplatten-Namen (zB: MAXTOR SF800) ermitteln kann?
Was halt im Geräte-Mananger im Treeview aufpopen kann.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 15.07.2009 um 15:05
Narses - Mi 15.07.09 15:06
Moin!
Schonmal in den WMI-Klassen gestöbert? Da ist doch fast alles zu finden. ;) :idea:
cu
Narses
Biarchiv - Mi 15.07.09 15:38
Hallo,
leider nichts passendes gefunden.
uranop - Do 16.07.09 05:57
besorge dir dir die wmi "compomente" von magenta systems
>>
http://www.magsys.co.uk/delphi/magwmi.asp
>>
http://www.magsys.co.uk/download/software/magwmi52.zip
da is ne demo dabei wo du im vorfeld alles an guggen kannst.
in deinem proj kannste einfach die unit einbinden,
mit einer kleinen funktion
ala
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| function GetWMIinfo(wmiHost, wmiClass, wmiProperty : string):string; var Locator: ISWbemLocator; Services: ISWbemServices; SObject: ISWbemObject; ObjSet: ISWbemObjectSet; SProp: ISWbemProperty; Enum: IEnumVariant; Value: Cardinal; TempObj: OleVariant; SN: string; begin try Locator := CoSWbemLocator.Create; Services := Locator.ConnectServer(wmiHost, 'root\cimv2', '', '', '','', 0, nil); ObjSet := Services.ExecQuery('SELECT * FROM '+wmiClass+'', 'WQL', wbemFlagReturnImmediately and wbemFlagForwardOnly , nil); Enum := (ObjSet._NewEnum) as IEnumVariant; while (Enum.Next(1, TempObj, Value) = S_OK) do begin SObject := IUnknown(tempObj) as ISWBemObject; SProp := SObject.Properties_.Item(wmiProperty, 0); if VarIsNull(SProp.Get_Value) then result := '' else begin SN := SProp.Get_Value; result := SN; end; end; except on exception do result := ''; end; end;
Label.Caption := GetWMIinfo('','Win32_DiskDrive','Caption'); |
mit dem spielzeug kann man so ziemlich alles machen.
gruß
jaenicke - Do 16.07.09 06:00
Ich habe das gerade erst selbst gemacht. Schau noch einmal in die WMI-Referenz. Du kannst dort die Festplatten mit Modellnummern auslesen und auch eine Liste aller Partitionen und logischer Laufwerke usw. und auch welche davon zu welcher Festplatte gehören...
Das angehängte Zip-Archiv greift, wenn ich das beim schnellen Blick richtig gesehen habe, direkt auf die Platte zu dafür, das ist eigentlich gar nicht notwendig, da Windows selbst die Daten in der WMI-Datenbank hat.
uranop hat folgendes geschrieben : |
mit einer kleinen funktion [...] |
Aua, der Autor dieser Funktion hat die Exceptionblöcke nicht so sinnvoll gesetzt (bzw. fast gar nicht)...
So sollte es sauber sein:
http://www.delphi-forum.de/viewtopic.php?p=551899#551899
uranop - Do 16.07.09 06:04
xD das ist original von DENEN .. bin mir keiner Schuld bewusst : P
EDIT: aber danke für den hinweis ... dann werde ich meine abfragen dahingebend mal optimieren
jaenicke - Do 16.07.09 06:09
Wobei diese Vorgehensweise für die Abfrage mehrerer Werte in "einer Zeile" sehr ungünstig ist. Da wäre es sinnvoller, direkt dort weitere Abfragen zu machen, wo hier nur der eine Wert abgefragt wird. Das beschleunigt das ganze enorm.
So habe ich es auch in meinem kleinen Systeminfo-Tool gemacht gehabt. Ich habe die Anfrage einfach etwas verteilt und an der Stelle via Callback gleich alle Werte auf einmal abfragen lassen.
uranop - Do 16.07.09 06:52
ack,
aber man kann mit bissl umschrieben des ganzen
genauere Bedingungen erschaffen ...
meine funktion hat nun mittlerweile feste "where" strukturen etc in sich ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!