Announcement

Collapse
No announcement yet.

Wie wird WMI mit Delphi verwendet

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie wird WMI mit Delphi verwendet

    Hallo zusammen
    <p>
    Hat jemand schon WMI Erfahrungen gesammelt, ich suche Delphi Beispiele die WMI Klassen verwenden.
    </p>
    Gruß Andreas

  • #2
    Hallo,

    wenn hier im FORUM nach der Zeichenkette "WMI" gesucht wird, lassen sich viele Beispiele dafür finden. Ich beschränke mich daher nur auf ein Bespiel, das den verfügbaren Speicherplatz auf allen Laufwerken des Rechners anzeigt:
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    aSrv : ISWbemServices;
    aObjSet : ISWbemObjectSet;
    vNVS : OleVariant;
    aNVSDummy : IDispatch;
    pEnum : IEnumVARIANT;
    vOut : OleVariant;
    dwRetrieved : LongWord;
    hRes : HResult;
    vValue : OleVariant;
    begin
    aSrv := SWbemLocator1.ConnectServer('','','','','','',0,vN VS);
    aObjSet := aSrv.ExecQuery('SELECT Name,FreeSpace FROM Win32_LogicalDisk',
    'WQL', 0, aNVSDummy);
    pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
    while (TRUE) do
    begin
    hRes := pEnum.Next(1, vOut, dwRetrieved);
    if hRes <> S_OK then
    Break;
    ListBoxEnum.Items.Add(Format('Laufwerk %s: %s frei.',
    [VarToStr(vOut.Name), VarToStr(vOut.FreeSpace)]));
    end;
    end;
    </pre>
    Damit die Programmierhilfe von Delphi auch für die WMI-Interfaces zur Verfügung steht, wird zuerst die Typbibliothek <b>Microsoft WMI Scripting V 1.x Library</b> importiert. Delphi legt dabei die VCL-Wrapperkomponenten an. Der erste Schritt besteht für jede Anwendung darin, einen Interface-Zeiger für IWbemLocator abzufordern. Dank ver von Delphi 5 beim Import der Typbibliothek angelegten VCL-Wrapperkomponente <b>TSWbemLocator</b> ist das für uns überhaupt kein Problem. Das <b>Locator</b>-Objekt erlaubt den Verbindungsaufbau über die Methode <b>ConnectServer</b>, wobei ich im Beispiel weder einen Rechnernamen, einen Namespace noch Login-Daten bereitstelle. Der Zugriff geht dabei auf den eigenen Rechner und erfolgt mit den Rechten des aktuell angemeldeten Benutzers. Die Methode ConnectServer liefert einen Interface-Zeiger vom Typ <b>ISWbemServices</b> zurück, über den die Kommunikation mit dem CIMOM (CIM Object Manager) abläuft. Allerdings ist nur das erreichbar, was in dem Namespace liegt, der von ConnectServer anfgefordert wurde. Das <b>ISWbemServices</b>-Interface stellt verschiedene Wege zur Verfügung, am einfachsten geht es mit der Methode <b>Get</b> weiter. Hier kann der Klassenname als Objektpfad verwendet werden, um einen Interface-Zeiger auf <b>ISWbemObject</b> zu erhalten. Über dieses Interface steht der volle Zugriff auf die Methoden und Eigenschaften des Objekts zur Verfügung.

    P.S: In der Hilfedatei aus dem Microsoft Platform SDK oder auf der DVD der MSDN Library ist die extrem ausführliche Dokumentation von WMI zu finden

    Comment


    • #3
      Kommt spät, aber herzlichen Dank ..

      Comment


      • #4
        Moin, wollte das Beispiel ausprobieren aber:

        aSrv : ISWbemServices;
        aObjSet : ISWbemObjectSet;
        vNVS : OleVariant;
        aNVSDummy : IDispatch;
        pEnum : IEnumVARIANT

        etc. werden angemeckert - sicher ne Uses vergessen. Jemand ne Idee??

        Tks

        Comment


        • #5
          fehlende uses-Einträge

          Hey,

          die Einträge
          WbemScripting_TLB, ComObj, ActiveX
          habe ich bei mir hinzugefügt, damit klappte es (Delphi2009)

          Tschüß,
          Frank

          Comment

          Working...
          X