Entwickler-Ecke
Windows API - Hardware auslesen
Interruptor - So 29.06.03 21:47
Titel: Hardware auslesen
Hallo!
Ich bin dabei ein Programm für meine Firma zu schreiben, welches mir für die Inventur alle Geräte aus meinem PC ausliest. Ich hab soweit eigentlich alles. Nur müsste ich noch die Geräte auslesen können. Also die pci und agp geräte!
Kann mir jemand einen Tip geben wie ich das am besten mache?
über regestry weis ich leider nicht wie und wo ich das suchen muss!!
Gruß
Interruptor :lol:
Delete - So 29.06.03 21:54
Über die Registry. Da mußt du wohl in den sauren Apfel beißen und mal eine halbe Stunde für die Suche investieren.
Interruptor - Mo 30.06.03 07:10
Hm!
Kann mir dann vieleicht jemand es in soweit erleichtern und mir sagen ob ich es aus der Software oder aus dem Bus auslesen muss!!
Gruß
Interruptor :oops:
Interruptor - Mo 30.06.03 07:17
Also bis jetzt hab ich es nur unter Software gefunden allerdings kann ich doch nicht erwarten das an jedem Computer eine Ati Karte drinen wäre. Der weg währe demnach!!
HKLM\Software\InstalledOptions\Microsoft Corporation\Video\ATI Technologies Inc.\
Gruß
Interruptor
Interruptor - Di 01.07.03 13:39
So nun habe ich den Pfad gefunden!!!
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
Da sind nun lauter unterordner wie
VEN_1000&DEV_0006&SUBSYS_00000000&REV_02
VEN_1000&DEV_0006&SUBSYS_00000000&REV_03
...
Wie kann ich nun sagen das er die Ordner auslesen soll da ich ja sonst nicht den kompletten Pfad angeben kann?
Gruß
Interruptor :?:
Interruptor - Di 01.07.03 13:48
Nun da gehe ich doch lieber auf die regestry!!
Was ich nur noch wissen muss ist wie ich ordner auslesen kann also die Bezeichnungen
VEN_1000&DEV_0006&SUBSYS_00000000&REV_02
aus dem Ordner PCI!
Gruß
Interruptor
Delete - Di 01.07.03 13:50
Kuck mal in der Hilfe unter TRegistry, da steht alles, was du brauchst.
Interruptor - Di 01.07.03 13:53
Hab ich schon da hab ich nichts gefunden und in Google auch nicht!!!
foxy - Di 01.07.03 14:09
das glaub ich dir nicht das du da nichts gefunden hast.
da steht, wie man einen schlüssel ausliest, oder einen schreibt 100% auch wenn ich sie jetzt nicht auffem bildschirm habe, weil das gehört zu den grundkenntissen der reg bearbeitung
Interruptor - Mi 02.07.03 12:19
So ich habe es geschaft!! Unter google hatte ich da nun wirklich nichts zu gefunden aber in der Hilfe habe ich dann etwas länger geforcdet und bin dann letztentlich doch fündig geworden!!
Das ganze ist zwar etwas langwiedriger und komplizierter gewesen als ich es mir gedacht hatte aber es functioniert!!
Was ich jetzt nur noch nicht gefunden habe Ist die Angabe des motherboards!! Ich habe die Regestry durchsucht aber nichts gefunden!! Weis jemand von euch wo man das findet??
Gruß
Ronny
Tino - Mi 02.07.03 14:22
Interruptor hat folgendes geschrieben: |
So ich habe es geschaft!! Unter google hatte ich da nun wirklich nichts zu gefunden aber in der Hilfe habe ich dann etwas länger geforcdet und bin dann letztentlich doch fündig geworden!! |
Sagst du uns auch wie du es jetzt gelöst hast? Danke!
Gruß
Tino
Interruptor - Mi 02.07.03 14:28
Ich hab die mit dem code gelöst!! Allerdings muss ich dazu sagen das ich das Tool gerade bei meinem kollegen am Rechner getestet habe und es nicht functioniert hat. Anscheinend ist der Weg in der Regestry von Rechner zu Rechner anders. Ich dachte eigentich nur von Betriebssystem zu Betriebssystem aber nun gut. Ich setzte mal dies rein vieleicht weis einer von euch was!!
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: 40: 41: 42: 43: 44:
| function GetHardware: string; var reg: TRegistry; val, val2: Tstringlist; I,Z : Integer; way, anhang : string; begin Form1.memo2.Lines.clear; result:='Unbekannte Geräte'; reg:=TRegistry.Create; way := '\SYSTEM\CurrentControlSet\Enum\PCI'; try val := tstringlist.Create; val2:= tstringlist.Create; reg.RootKey := HKEY_LOCAL_MACHINE; if not Reg.OpenKey(way,False) then ShowMessage('Error opening key') else begin reg.GetkeyNames(val); for I:=0 to Val.Count-1 do begin anhang := ''; anhang := way + '\' + val.Strings[i]; if not reg.OpenKey(anhang,false) then showmessage('Der Weg war wohl falsch wa') else begin reg.GetKeyNames(val2); for Z:=0 to Val2.count-1 do begin anhang := ''; anhang := way + '\' + val.strings[i] + '\' + val2.Strings[z]; if not reg.OpenKey(anhang,false) then showmessage('Da gibt es nichts') else Form1.Memo2.Lines.Add(reg.ReadString('DeviceDesc')) end; end; end; end; finally reg.free; end; end; |
Viel Spaß
Gruß
Interruptor :x
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Delete - Mi 02.07.03 14:36
Du gibst die Stringlisten nicht wieder frei. :roll:
Interruptor - Mi 02.07.03 17:08
Das geht aber auch ohne der Freigabe!!! Aber wieso wieder frei geben??? du meinst aber jetzt schon die TStrings variable var und var2 oder?
Da verstehe ich nicht warum ich da was frei geben soll? das geht so wie es ist nur sagt er mir wenn ich es an einem anderen computer ausprobiere 'Error opening key' Also steigt schon bei der ersten if abfrage aus. Das soll somit heisen, dass der Pfad way = \SYSTEM\CurrentControlSet\Enum\PCI nicht exestiert, was er allerdings tut.
Ich schaue aber mal nach vieleicht finde ich noch den Fehler!!
Gruß
Interruptor
Interruptor - Mi 02.07.03 18:02
Jipi jo ich habe es geschaft!!! War eigentlich ganz simple!!! Er hat ab ab \System\CurrentControlSet\Enum keine rechte mehr und darf deswegen nicht weitermachen. mit reg.openkeyreadonly geben wir ihm das Recht das zu lesen!!!
hier der Code!! Liest den ganzen PCI bus aus!!!!
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: 40: 41: 42: 43: 44:
| function GetHardware: string; var reg: TRegistry; val, val2: Tstringlist; I,Z : Integer; way, anhang : string; begin Form1.memo2.Lines.clear; result:='Unbekannte Geräte'; reg:=TRegistry.Create; way := '\SYSTEM\CurrentControlSet\Enum\PCI'; try val := tstringlist.Create; val2:= tstringlist.Create; reg.RootKey := HKEY_LOCAL_MACHINE; if not Reg.OpenKeyReadOnly(way) then ShowMessage('Error opening key') else begin reg.GetkeyNames(val); for I:=0 to Val.Count-1 do begin anhang := ''; anhang := way + '\' + val.Strings[i]; if not reg.OpenKeyReadonly(anhang) then showmessage('erste *mist*e') else begin reg.GetKeyNames(val2); for Z:=0 to Val2.count-1 do begin anhang := ''; anhang := way + '\' + val.strings[i] + '\' + val2.Strings[z]; if not reg.OpenKeyReadOnly(anhang) then showmessage('*mist*e') else Form1.Memo2.Lines.Add(reg.ReadString('DeviceDesc')); end; end; end; end; finally reg.free; end; end; |
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Delete - Mi 02.07.03 18:54
Dann ruf die Prozedur mal ein paar mal hintereinander auf. Wenn du Windows2000 oder XP hast, wirst du bemerken wie dein Programm immer mehr Speicher braucht.
Mit
Delphi-Quelltext
1:
| val1 := TStringList.Create; |
Belegst du speicher, den du aber nicht wieder frei gibst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| val1 := TStringlist.Create; try finally val1.Free; end; |
So sieht das richtig aus.
Interruptor - Mi 02.07.03 19:01
Ohh vielen dank da bessere ich das doch gleich noch mit aus!!!
Aber weist du vieleicht noch wo ich die Motherboard spezifikation (Model und Hersteller) auslesen kann?
Dann wäre das Tool nämlich fertig!!!
Gruß
Interruptor :roll:
Interruptor - Do 03.07.03 15:12
Weis den nun niemand wie man den Hersteller und die Bezeichnung vom Motherboard auslesen kann?
Bitte helft mir!!
:cry:
wiesel722 - Mo 28.07.03 09:53
Titel: hardware auslesen
hi interruptor
wen ich deinen code laufen lassen, ist mein memo-feld leer. habe ich was vergessen?
andreas
Delete - Mo 28.07.03 14:24
Titel: Re: hardware auslesen
wiesel722 hat folgendes geschrieben: |
habe ich was vergessen? |
Vielleicht die Tatsache, dass sich die Infos unter 9x-Systemen (Win 95, 98, ME) im Schlüssel
HKLM\Enum\PCI befinden. Der Schlüssel von Interruptor (
HKLM\SYSTEM\CurrentControlSet\Enum\PCI) gilt wohl nur für NT-Systeme. Eine Möglichkeit ist, den Schlüssel OS-abhängig zu füllen:
Delphi-Quelltext
1: 2: 3: 4:
| if(Win32Platform = VER_PLATFORM_WIN32_NT) then way := '\SYSTEM\CurrentControlSet\Enum\PCI' else way := '\Enum\PCI'; |
Das sollte helfen.
Interruptor - Mo 28.07.03 17:38
Was nutzt du für ein Betriebssystem? :?:
Interruptor - Mo 28.07.03 17:39
Genau das wollte ich damit sagen!!! Danke schön!!! :!:
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!