AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WMI Programmierung Problem

Ein Thema von Smithsonian · begonnen am 19. Sep 2007 · letzter Beitrag vom 30. Okt 2007
Antwort Antwort
Smithsonian

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

WMI Programmierung Problem

  Alt 19. Sep 2007, 21: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
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: WMI Programmierung Problem

  Alt 19. Sep 2007, 21:50
Hallo und herzlich Willkommen hier in der Delphi-Praxis,

ich benutze die Unit Hier im Forum suchenWbemScripting_TLB.pas. Damit kannst Du hervorragend Informationen per WMI ermitteln.

Edit 1:
Solltest Du dazu nichts passendes finden, suche mal nach Hier im Forum suchenWMIDemo
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Smithsonian

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

Re: WMI Programmierung Problem

  Alt 19. Sep 2007, 21:57
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
Frank Schmidt
  Mit Zitat antworten Zitat
Smithsonian

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

Re: WMI Programmierung Problem

  Alt 22. Sep 2007, 17:55
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
Frank Schmidt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: WMI Programmierung Problem

  Alt 30. Okt 2007, 07:49
IEnumVariant is'n nettes kleines Intervace, welches in Delphi (Unit ActiveX) so definiert ist
Delphi-Quellcode:
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;
oder auch nochmal im MSDN unter MSDN-Library durchsuchenIEnumVariant, sowie im PSDK und Co.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz