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!

Code-Beispiel

Code-Beispiele » Dateien und Laufwerke

Freigaben per WMI ermitteln

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 17.02.2011

Die Verwendung der WMI war lange ein Buch mit 7 Siegeln für mich(was FreeBasic anbetrifft).
Jetzt habe ich einen Externer Link!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 Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 17.02.2011 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen