Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Wmi benutzen mit FreeBasic

von RedakteurytwinkySeite 5 von 6

Die Laufwerksnummern, die hier feinsäuberlich sortiert sind, entsprechen dem bereits oben ermittelten Index!
Deshalb können wir also zu jedem Laufwerksbuchstaben den Anschluß angeben.
So, wenn wir uns jetzt einmal die Ausgabe Vom Alias 'LogicalDisk' anschauen, haben wir eine ausbaufähige Liste, die wir mit den bisher gesammelten Informationen so ergänzen können, daß wir unsere gesuchte Liste erhalten:

'|           AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins  „”᎙šñ¸=äöüßÄÖܱ©|
#Include once "windows.bi"               'in
#define UNICODE                          'this
#include once "disphelper/disphelper.bi" 'order
#include "vbcompat.bi"
Declare Function Align(What As String, FieldWidth As Integer=11, How As String="r") As String
Const strComputer="." 'oder "localhost" oder Environ("ComputerName")
Const impersonate="winmgmts:{impersonationLevel=impersonate}!\\" &strComputer &"\root\cimv2"
Const SelectClass="Select * From Win32_LogicalDisk"

Dim As HRESULT hres
Dim As ZString Ptr devCaption, devCompressed, devDriveType, devMediaType
Dim As ZString Ptr devFreeSpace, devSize, devVolumeName

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 "Lw" &Align("kompr.", 7) &Align("LwTyp", 7) &Align("Med.-Typ", 9) &Align("GrӇe", 16) &Align("Frei", 16) &" Laufwerksname"
hres=dhGetObject(impersonate, NULL, @wmiSvc)
hres=dhGetValue("%o", @colDisk, wmiSvc, ".ExecQuery(%s)", SelectClass)
FOR_EACH0(objDisk, colDisk, NULL)
  hres=dhGetValue("%s", @devCaption, objDisk, ".Caption")
  hres=dhGetValue("%s", @devCompressed, objDisk, ".Compressed")
  hres=dhGetValue("%s", @devDriveType, objDisk, ".DriveType")
  hres=dhGetValue("%s", @devMediaType, objDisk, ".MediaType")
  hres=dhGetValue("%s", @devSize, objDisk, ".Size")
  hres=dhGetValue("%s", @devFreeSpace, objDisk, ".FreeSpace")
  hres=dhGetValue("%s", @devVolumeName, objDisk, ".VolumeName")
  Print *devCaption &" "; 'Laufwerksbuchstabe
  Print Align(*devCompressed, 6); 'Laufwerk komprimiert?
  Print Align(*devDriveType, 5); 'Laufwerkstyp
  Print Align(*devMediaType, 7); 'Medientyp
  Print Align(*devSize, 20); 'Plattengröße
  Print Align(*devFreeSpace, 16); 'Freier Plattenplatz
  Print " " &*devVolumeName 'LaufwerksName
NEXT_(objDisk)
SAFE_RELEASE(wmiSvc)
SAFE_RELEASE(colDisk)
dhUninitialize(True)
Print "Eniki..";
GetKey
End

Function Align(What As String, FieldWidth As Integer=11, How As String="r") As String
    '©2008 by ytwinky, MD
    Var Aligned=Space(FieldWidth), le=Len(What), Wie=IIf(How="", @"c", SAdd(How))
    Select Case lcase(Left(*Wie, 1)) 'ignore uppercase
        Case "r" 'it is ok to submit 'r' for 'Right', which is the default
            RSet Aligned, What
        Case "l" 'same with 'l' which aligns to the 'Left'
            LSet Aligned, What
        Case Else 'anything else will be centered..
            LSet Aligned, What
            If le<FieldWidth Then Aligned=Left(Space((FieldWidth-le)\2) &Aligned, FieldWidth)
    End Select
    Return Aligned
End Function

Die Ausgabe zeigt deutlich, daß sich unsere vorhergehende Mühe gelohnt hat, denn was wir ermittelt haben, steht alles nicht in dieser Liste..
Außerdem sind die Größenangabe für die Festplatten ja in Byte, das muß ja noch alles umgerechnet werden..
Das ist nun aber kein Problem, da wir ja anfangs bereits die Grundlagen für die Umrechnung benutzt haben. Doch wie sollen die Ausgaben erfolgen ? KB, MB GB oder gar TB, das läßt sich nicht festlegen, ich bin aber mal so frei, zu behaupten, daß ein Ausgabe mit wechselnden Größenangaben(also je nach Bedarf KB oder MB etc) keinesfalls übersichtlich ist, wohingegen 0 TB durchaus 10 MB sein können, doch das nur am Rande..

Aber die Angaben zum Disketten-Laufwerk sind doch ziemlich dünn, oder?
Wo sind denn die Angaben über die Disketten-Laufwerke? Das ist nicht einfach..
In der Alias-Liste, die wir erstellt haben taucht(jedenfalls bei mir, XP SP3) kein 'Floppy' o.ä. auf. Da müssen wir schon mal Charles Theodore To Googlesearch bemühen, um an Informationen zu kommen..
..Stunden später: Aha, der gesuchte Pfad ist win32_floppydrive ;-))
Hier benötigen wir aber nur die Angabe FDC, um ein evtl. vorhandenes Disketten-Laufwerk mit diesem Anschluß zu kennzeichnen. Freundlicherweise macht die WMI aus z.B. USB-Sticks Disketten-Laufwerke oder Festplatten, abhängig davon, ob sie mit NTFS oder FAT/FAT32 formatiert wurden. (Abgesehen davon sind die Laufwerksbuchstaben A: und B: den Floppy-Laufwerken vorbehalten)
Wie jetzt 'benötigen wir nur', was heißt denn das?
Wie wir bisher gesehen haben liefert jeder WMI-Aufruf andere Ergebnisse, weil bei jeder Funktion andere Werte zurückgegeben werden. Es gibt hier kein klares Schema, wahrscheinlich gibt es deshalb auch keine klare Dokumentation ;-))
Sei's drum, wenn wir den WMI-Aufruf mit 'Select *' einleiten, liefert die WMI alle verfügbaren Werte des Objektes zurück, was auch Sinn hat, da ja noch nicht klar ist, was alles benötigt wird. Für uns bedeutet dies aber (schlimmstenfalls), daß wir für jedes Element des zurückgegebenen Objektes eine Variable deklarieren müssen, um darauf zugreifen zu können. Das läßt sich jedoch vermeiden, wenn wir in der Select-Anweisung die benötigten Parameter direkt angeben. Allerdings stehen uns dann auch nur diese Elemente zu Verfügung, doch da wir ja nur GET benutzen spielt, das keine so große Rolle..
Anders bei z.B. Call(Methode, um Elemente zu ändern): Die zu beeinflussenden Werte müssen hier natürlich vorhanden sein..

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  6  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 19.02.2011 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 19.02.2011 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen