Code-Beispiel
Freigaben per WMI ermitteln
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 17.02.2011 |
Die Verwendung der WMI war lange ein Buch mit 7 Siegeln für mich(was FreeBasic anbetrifft).
Jetzt habe ich einen
Code gefunden, der alles ganz einfach macht. Herzlichen Dank an Zippy..
Nun ist es langweilig, den Code einfach nur zu übersetzen(das ist schon erledigt)^^
Interessanter war es, einfach eine andere WMI-Klasse zu verwenden, um zu sehen, ob ich das auch richtig verstanden habe. Also habe ich mal die Klasse Win32_Share ausgesucht und siehe da:
Es funktioniert..
WMI bedeutet natürlich, daß der Code nur für Windows-User(mit installierter WMI) verwendbar ist:
'+------------------------------------------------------------------------------------------+
'| Header: Bestimmen der Übergabeparameter' |
'| AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „”᎙šñ¸=äöüßÄÖܱ©|
Const Autor="Freigaben.Bas v1.1 ¸2011 by ytwinky, MD"' |
'| (Tastenkombination: keine) |
'| |
'| Zweck : Wmi per disphelper zur Ermittlung von Freigeben an einem Rechner |
'+------------------------------------------------------------------------------------------+
Type ShareRec
As String AllowMaximum, Captions, MaximumAllowed, Names, Path, Status, Typ
End Type
#include once "windows.bi" 'in
#define UNICODE 'this
#include once "disphelper/disphelper.bi" 'order
Const SelectClass="Select * from Win32_Share"
Var strComputer=Environ("ComputerName")
Var impersonate="winmgmts:{impersonationLevel=impersonate}!\\" &strComputer &"\root\cimv2"
Var s=Autor &!"\nAktuelle Freigaben am " &strComputer
Dim hres As HRESULT
Dim As ZString Ptr devA, devC, devM, devN, devP, devT
Declare Function Align(What As String, FieldWidth As Integer=11, How As String="r") As String
Select Case lcase(Command(1))
Case "/?", "?h", "-?", "-h"
Print Autor &!"Syntax:\nFreigaben [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
DISPATCH_OBJ(wmiSvc)
DISPATCH_OBJ(colDisk)
dhInitialize(TRUE)
Print s &!"\nErlaubt" &Align("Beschriftung", 16) &Align("Name", 16) &Align("Pfad", 21) &" Typ"
'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", @colDisk, wmiSvc, ".ExecQuery(%s)", SelectClass)
FOR_EACH0(objDisk, colDisk, NULL)
hres=dhGetValue("%s", @devA, objDisk, ".AllowMaximum")
hres=dhGetValue("%s", @devC, objDisk, ".Caption")
hres=dhGetValue("%s", @devM, objDisk, ".MaximumAllowed")
hres=dhGetValue("%s", @devN, objDisk, ".Name")
hres=dhGetValue("%s", @devP, objDisk, ".Path")
hres=dhGetValue("%s", @devT, objDisk, ".Type")
If LCase(*devA)="wahr" Or LCase(*devA)="true" Then Print Align("max.", 7); Else Print Align(*devM, 7);
Print " " &Align(*devC, 15) &" " &Align(*devN, 15) &" " &Align(*devP, 20) &" " & Hex(Val(*devT), 8)
NEXT_(objDisk)
SAFE_RELEASE(wmiSvc)
SAFE_RELEASE(colDisk)
dhUninitialize(TRUE)
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
Wer die beiden Codes vergleicht, kann mit Hilfe der WMIC natürlich auch weitere Klassen benutzen, viel Spaß dabei ;-))
Gruß
ytwinky
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 16.02.2011 von
ytwinky angelegt.
- Die aktuellste Version wurde am 17.02.2011 von
ytwinky gespeichert.
|
|