![]() |
WMI Programmierung Problem
Hallo Forum,
bin derzeit am verzweifeln. War wirklich Happy als "Borland Delphi 2005 Personal" zum Download freigab. Seitdem programmiere ich darin. Ergebnis seht ihr hier ![]() Wer eine canon EOS Kamera hat ist als Tester willkommen. Nun zu meinem Problem. Ich möchte die Seriellen und paralellen Schnittstellen auslesen um die Daten : Anzahl Basisadressen Benutzung etc. zu erhalten. Nach Recherche fand ich nun heraus dass dieses mit WMI geht. Aber egal welchens Beispiel bzw Komponente ich dazu runterlade und installiere sie wollen alle nicht laufen. Nachdem ich nun endlich die wbemscripting_tlb.pas gefunden habe habe ich versucht sie einzubinden. ALs Beipielsource hae ich folgenden gefunden :
Delphi-Quellcode:
type
TProcesInformation = packed record Name: string; Path: string; ProcID: DWORD; ParentProcID: DWORD; SessionID: DWORD; ThreadCount: DWORD; Priority: DWORD; end; type TPIArray = array of TProcesInformation; const WMI_HOST_COMPUTER = '.'; WMI_SYSTEM_NAMESPACE = 'root\CIMV2'; WMI_ATTRIB_CAPTION = 'Name'; WMI_ATTRIB_PATH = 'ExecutablePath'; WMI_ATTRIB_PROCID = 'ProcessID'; WMI_ATTRIB_PARENT_PROCID = 'ParentProcessId'; WMI_ATTRIB_SESSIONID = 'SessionID'; WMI_ATTRIB_THREAD_CNT = 'ThreadCount'; var Form1: TForm1; implementation {$R *.dfm} const // define used constants WMI_LOCAL_COMPUTER = '.'; WMI_CLASS_NIC = 'Win32_NetworkAdapter'; WMI_ATTRIB_MAC = 'MACAddress'; // retrieve System MAC Addresses via WMI // function getSystemMACAddresses: TStringList; var l_WMILocator: ISWbemLocator; // Locator, gets Services l_WMIServices: ISWbemServices; // Services, gets Object Definitions l_WMIObjectDefinition: ISWbemObject; // Definition, gets Set of Objetcs l_WMIObjectSet: SWbemObjectSet; // ObjectSet, gets Enum over Instances l_WMIObjectInstances: IEnumVariant; // Enum of Instances, gets Object l_WMIObject: ISWbemObject; // Object, gets Sets of his properties l_WMIPropertySet: ISWbemPropertySet; // PropertySet, gets single property l_WMIProperty: ISWbemProperty; // Property, gets Value l_TempObj: OleVariant; // temporary used values l_ObjValue: Cardinal; begin // create the return object result := TStringList.Create; // retrieve object enum through WMI classes l_WMILocator := CoSWbemLocator.Create; l_WMIServices := L_WMILocator.ConnectServer(WMI_LOCAL_COMPUTER, WMI_SYSTEM_NAMESPACE, '', '', '', '', 0, nil); l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS_NIC, wbemFlagUseAmendedQualifiers, nil); l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil); // l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant; // iterate through enum values (WbemObjects) and get the property values while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do begin l_WMIObject:= IUnknown(l_TempObj) as SWBemObject; l_WMIPropertySet := l_WMIObject.Properties_; l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_MAC, 0); if not VarIsNull(l_WMIProperty.Get_Value) then result.Add(l_WMIProperty.Get_Value); end; end; Soweit so gut. Nur wirft der mir für l_WMIObjectInstances: IEnumVariant; // Enum of Instances, gets Object einen E2003 Undefinierter Bezeichner raus. Woran kann das liegen ?? Muss dazu sagen das ich "nur" Proggen kann und mich mit der Delphi IDE nicht allzu gut auskenne, da ich es als Hobbie betreibe. Wäre super wenn mir jemand helfen könnte . MFG Smithsonian alias Frank Schmidt [edit=Phoenix]Delphi-Tags ergänzt. Das nächste mal bitte selber um den Code legen. Mfg, Phoenix[/edit] |
Re: WMI Programmierung Problem
Hallo und herzlich Willkommen hier in der Delphi-Praxis,
ich benutze die Unit ![]() Edit 1: Solltest Du dazu nichts passendes finden, suche mal nach ![]() |
Re: WMI Programmierung Problem
Hi Rolf,
Das Prob ist , das ich die ja eingebunden habe und den Beispielsource in mein Prog eingefügt habe. Aber er schmeisst mir halt den Fehler raus, das er IenumVariant nicht kennt. Mfg Frank Ergänzung : Könnte Dich Knu.... Rolf . Habe WMI Demo runtergeladen und ............................ TADAAAAAAAAAAAA es läuft |
Re: WMI Programmierung Problem
Hallo nochmal an alle .
Auch wenn das WMIDemo funzt suche ich immer noch die Lösung für den EnumVariant. Wo finde ich die Deklration davon ?? MFg Frank |
Re: WMI Programmierung Problem
IEnumVariant is'n nettes kleines Intervace, welches in Delphi (Unit ActiveX) so definiert ist
Delphi-Quellcode:
oder auch nochmal im MSDN unter
type
IUnknown = IInterface; IInvokable = interface(IInterface) end; IEnumVariant = interface(IUnknown) ['{00020404-0000-0000-C000-000000000046}'] function Next(celt: LongWord; var rgvar : OleVariant; out pceltFetched: LongWord): HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Clone(out Enum: IEnumVariant): HResult; stdcall; end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz