Tutorial
Wmi benutzen mit FreeBasic
Wie wir im Beispiel mit 'DiskDrive' schon gesehen haben, wird die Anzahl der Partitionen/Festplatte auch ausgegeben. Da das ja nun von Rechner zu Rechner unterschiedlich sein kann(meine Platten haben alle wenigstens zwei Partitionen, nun gut, die Externen nicht, dafür haben andere 3 davon^^), brauchen wir also einen Aufruf, der uns zeigt, wie die Laufwerke in Partitionen aufgeteilt sind. Hier stehen nun jedoch verschiedene Aufrufe zur Auswahl, die für uns aber einen unterschiedlichen Auswerteaufwand bedeuten. Also nehmen wir (auch aus didaktischen Gründen) die Funktion Win32_PerfFormattedData_PerfDisk_LogicalDisk, denn hier liefert das Element 'Name' sowohl den Index als auch die Partitions-Buchstaben:
#include once "windows.bi" 'in
#define UNICODE 'this
#include once "disphelper/disphelper.bi" 'order
#include "vbcompat.bi"
Const strComputer="." 'oder "localhost" oder Environ("ComputerName")
Const impersonate="winmgmts:{impersonationLevel=impersonate}!\\" &strComputer &"\root\cimv2"
Const SelectClass="Select Name from Win32_PerfFormattedData_PerfDisk_PhysicalDisk"
Dim As HRESULT hres
Dim As ZString Ptr devName
DISPATCH_OBJ(wmiSvc)
DISPATCH_OBJ(colDisk)
dhInitialize(True)
'So wird eingestellt, ob Fehler angezeigt werden sollen oder nicht:
'dhToggleExceptions(TRUE) 'bei Bedarf das 1. ' entfernen ;-))
Print "Index Partition(en)"
hres=dhGetObject(impersonate, NULL, @wmiSvc)
hres=dhGetValue("%o", @colDisk, wmiSvc, ".ExecQuery(%s)", SelectClass)
FOR_EACH0(objDisk, colDisk, NULL)
hres=dhGetValue("%s", @devName, objDisk, ".Name")
If InStr(*devName, "_")=0 Then Print *devName 'Index Partition(en) 'die _Total-Zeile nicht ausgeben..
NEXT_(objDisk)
SAFE_RELEASE(wmiSvc)
SAFE_RELEASE(colDisk)
dhUninitialize(True)
Print "Eniki..";
GetKey
Und jetzt kommt der Trick^^
Gehe zu Seite
1 2 3 4 5 6
Zusätzliche Informationen und Funktionen |
- Das Tutorial wurde am 19.02.2011 von ytwinky angelegt.
- Die aktuellste Version wurde am 19.02.2011 von ytwinky gespeichert.
|
|