Tutorial
Wmi benutzen mit FreeBasic
Um nun eine Alias-Liste mit FB zu erzeugen, muß auf alle Fälle disphelper.bi mit eingebunden werden, da es sonst nicht funktioniert. Die Reihenfolge der #includes muß strikt eingehalten werden. Ohne weiter auf Einzelheiten einzugehen, nehmen wir einfach das folgende Programm:
#include once "windows.bi" 'in
#define UNICODE 'this
#include once "disphelper/disphelper.bi" 'order
Type AliasRec
As String FriendlyName,Target
End Type
Const SelectClass="Select FriendlyName,Target From Msft_CliAlias"
Var strComputer=Environ("ComputerName"), i=0
Var impersonate="winmgmts:{impersonationLevel=impersonate}!\\" &strComputer &"\root\cli"
Dim arrAlias() As AliasRec
Dim hres As HRESULT
Dim As ZString Ptr devF, devT
Declare Sub ShellSort(Array() As AliasRec, aLo As Integer, aHi As Integer, kleiner As Integer=0)
Select Case lcase(Command(1))
Case "/?", "?h", "-?", "-h"
Print Autor &!"Syntax:\nFBWMIAlias [ComputerName]|[/?]\nwobei ComputerName ein(erreichbarer) Rechner ist"_
!"\n /? nur EINE Möglichkeit ist, diese Hilfe aufzurufen.."
Case Else
If Command(1)<>"" Then
strComputer=Command(1)
If InStr(strComputer, "\\") Then strComputer=Mid(strComputer, 3)
End If
End Select
s &= strComputer
DISPATCH_OBJ(WmiSvc)
DISPATCH_OBJ(Items)
dhInitialize(TRUE)
'So wird eingestellt, ob Fehler angezeigt werden sollen oder nicht:
'dhToggleExceptions(TRUE) 'bei Bedarf das 1. ' entfernen ;-))
hres=dhGetObject(impersonate, NULL, @WmiSvc)
hres=dhGetValue("%o", @Items, WmiSvc, ".ExecQuery(%s)", SelectClass)
FOR_EACH0(Item, Items, NULL)
hres=dhGetValue("%s", @devF, Item, ".friendlyname")
hres=dhGetValue("%s", @devT, Item, ".target")
ReDim Preserve arrAlias(i)
arrAlias(i).FriendlyName=*devF
arrAlias(i).Target=*devT
i+=1
NEXT_(Item)
SAFE_RELEASE(WmiSvc)
SAFE_RELEASE(Items)
dhUninitialize(TRUE)
i-=1
ShellSort(arrAlias(), 0, i)
Print "AliasName"; Tab(22); "WMI-Pfad"
For j As Integer=0 To i
Print arrAlias(j).FriendlyName; Tab(22); arrAlias(j).Target
Next
Print "Eniki..";
GetKey
End
Sub ShellSort(Array() As AliasRec, aLo As Integer, aHi As Integer, kleiner As Integer=0)
'nach SortDemo.Bas für QBasic 2.0, ist zwar langsamer als Quicksort
'..aber immer noch schneller als BubbleSort ;-))
Var i=0, li=0, sw=0, ig=0, ik=0, Abstand=Int((aHi-aLo+1)/2)
'Setze den Vergleichsabstand auf die Hälfte der Elemente in Array()
While Abstand>0 'Schleife bis Abstand=0 ist
li=aHi-Abstand
Do
sw=aLo 'Erstma keinen Tausch annehmen
For i=aLo To li 'Vergleiche Elemente und tausche die Unsortierten..
ig=i 'i tauschen wäre wenig sinnvoll..
ik=i+Abstand 'Berechnung nur EINMAL(pro Durchlauf) ausführen..
If kleiner Then Swap ig, ik 'Wozu zwei Funktionen? Einfach Indizes tauschen..
If Array(ig).FriendlyName>Array(ik).FriendlyName Then 'hier ändern bei UDTs
Swap Array(ig), Array(ik) 'hier nicht mehr, Swap tauscht ja auch ganze Records ;-)
sw=ig 'Schalter setzen
End If
Next
li=sw-Abstand 'Sortiere beim nächsten Mal nur bis zum letzten Tausch
Loop Until sw=aLo
Abstand=Abstand\2 'Kein Tausch beim letzten Mal, also Abstand halbieren..
Wend 'FB hat den \-Operator, AutoIt nicht..^^
End Sub
Na bitte, klappt doch prima, oder?
Der Befehl 'Get' weist die WMI an, die angeforderten Elemente dem Programm für jeden Alias an das Programm zu übergeben. Es gibt noch andere Verben(z.B. 'Call'), aber 'Get' ist das Ungefährlichste, da hiermit nur Informationen gelesen werden und am System nichts geändert wird. Das dient zum Schutz des Systems und des Benutzers, aber auch zu Schutz des Autors, damit niemand sagen kann:
Ich habe das genauso gemacht, wie beschrieben, doch jetzt ist mein Windows im Eimer..
Nochmal zum Mitmeißeln: Ich lehne jegliche Verantwortung für Fehler oder Systemausfälle, die durch die Benutzung der Programme in diesem Tutorial entstehen könnten, ab!
Nun gut, aber verlieren wir das Ziel nicht aus den Augen(das passiert leicht bei WMI-Aufrufen, weil einfach zuviel möglich ist).
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.
|
|