Einzelnen Beitrag anzeigen

Smithsonian

Registriert seit: 19. Sep 2007
3 Beiträge
 
Delphi 2005 Personal
 
#1

WMI Programmierung Problem

  Alt 19. Sep 2007, 20:42
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

http://www.dslr-forum.de/showthread....62#post2213962

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]
Frank Schmidt
  Mit Zitat antworten Zitat