Announcement

Collapse
No announcement yet.

Gerätemanager auslesen

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

  • Gerätemanager auslesen

    Hi @all
    <p>
    Hat jemand eine Idee wie ich den Gerätemanager unter Win2k in einer eigenen Delphiapplikation abbilden kann, bzw. kennt jemand eine Komponente die dies bereits kann?
    Ziel ist es zu prüfen ob bestimmte Hardware bereits im rechner Steckt.
    Wenn ich dann diese Hardware gefunden habe möchte ich eine automatische Routine schreiben die dann den alten treiber deinstalliert und den neuen installiert ohne das der User umständlich es manuell machen muss.
    <p>
    mfg Jan Ohlmann

  • #2
    Hallo,

    &gt;..Ziel ist es zu prüfen ob bestimmte Hardware bereits im Rechner steckt..

    das hört sich wie eine typische Aufgabe für <b>WMI</b> (Windows Management Instrumentation) an. WMI ist eine universelle Treiberschicht, die Informationen aus den unterschiedlichsten Bereichen (Hardware, Treiber, BIOS, Anwendungseinstellungen, Ereignisanzeige usw.) bereitstellen kann, indem alle diese Detail-APIs verborgen und durch ein univerelles und für alle Betriebssysteme (auch aus der Nicht-Windows-Welt) gleiches API ersetzt werden. WMI steht unter Windows 2000 vorinstalliert zur Verfügung, da es in neuen Windows-Versionen offiziell zum Betriebssystem gehört.

    WMI unterstützt mit <b>WQL</B> (WMI Query Language) eine Abfragesprache, die stark an SQL angelehnt ist. Das folgende Beispiel ermittelt alle Laufwerke und den dort vorgefundenen freien Speicherplatz, indem die Abfrage <i>SELECT Name,FreeSpace FROM Win32_LogicalDisk</i> über die <i>ISWbemServices</i>-Interfacmethode <b>ExecQuery</b> abgeschickt wird. Damit die Programmierhilfe von Delphi auch für die WMI-Interfaces zur Verfügung steht, wird zuerst die Typbibliothek <i>Microsoft WMI Scripting V 1.1 Library</i> importiert, Delphi legt dabei die VCL-Wrapperkomponenten wie <b>TSWbemLocator</b> an:
    <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>
    Da WMI ein sehr mächtiges und somit auch komplexes Werkzeug ist, sollte man einige Stunden für die Einarbeitung (siehe Hilfedatei aus dem <i>Microsoft Platform SDK</i> bzw. der <i>MSDN Library</i> einplanen

    Comment


    • #3
      Die Alternative ist das Setup API bzw das Config Manager API. Die sind aber auch nicht wirklich einfacher

      Comment


      • #4
        hi
        Erst einmal Dank für die Ausführliche Antwort. Ich habe jetzt die Microsoft SDK WMI sowie WMI CIM Studio und Tools installiert. In Delphi sind jetzt auch schon eine Menge WMI Libarys eingetragen. Leider finde ich nicht die Typbibliothek Microsoft WMI Scripting V 1.1 Library. Kennt jemand eine Quelle wo ich sie finden kann.

        Danke.
        mfg Jan Ohlman

        Comment


        • #5
          Hallo,

          &gt;Typbibliothek Microsoft WMI Scripting V 1.1 Library...

          dieser Eintrag sollte immer dann im Delphi-Dialog <b>Typbibliothek importieren</b> (siehe Menüpunkt <i>Projekt</i>) zur Auswahl in der Listbox stehen, wenn WMI auf dem Rechner installiert ist. Bei Windows 2000 und XP ist das immer der Fall, wobei bei XP die Versionsnummer V 1.2 angezeigt wird.

          P.S: Mit .NET wird das an dieser Stelle einfacher, da im .NET-Framework die WMI-Klassen im Namespace <i>System.Management</i> zum sofortigen Gebrauch bereitstehen. Außerdem gibt es da noch die visuelle Erweiterung für VS.NET, um aus dem Server Explorer heraus die Hardware-Ressourcen über Drag&Drop ins eigene Programm einzubinden. WMI ist daher topaktuell..

          Comment

          Working...
          X