Aktuelle Zeit: 22.10.2020 09:08

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PB.Ex WMI (Windows)
BeitragVerfasst: 08.03.2018 21:50 
Offline
Admin

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Hallo,

WMI (Windows Management Instrumentation) ist eine Schnittstelle zum Ermitteln von Informationen (z.B. Batteriestatus, PC-Informationen, Festplatteninformationen, Netzwerkinformationen, Programme, ...), zum Ausführen von Methoden (z.B. Domain-Anmeldung, Lüfter-Steuerung, Netzwerkverbindungen aktivieren/deaktivieren, Drucker-Verwaltung, ...) und zum Abfragen von Events (z.B. ob Prozess gestartet oder beendet wurde, ...).

Funktionen:
  • ExecuteWMIQuery()
    • Syntax:
      Code:
      Result = ExecuteWMIQuery(Namespace$, Query$, @Output$)

    • Beschreibung: Führt eine Abfrage aus.
    • Parameter:
      1. Namespace$: Bezeichnung des Namensraums.
      2. Query$: Abfrage der Klasse.
      3. @Output$: Das Ergebnis der Abfrage wird im XML-Format in die String-Variable gespeichert.
    • Rückgabewert:
      • 0: Der Vorgang war erfolgreich.
    • Beispielcode:
      Code:
      EnableExplicit

      Global PBEx_WMI

      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x64.dll")
      CompilerEndIf

      If PBEx_WMI
        Prototype ExecuteWMIQuery(Namespace.p-Unicode, Query.p-Unicode, Output)
        Global ExecuteWMIQuery.ExecuteWMIQuery = GetFunction(PBEx_WMI, "ExecuteWMIQuery")
        Prototype ExecuteWMIMethod(Namespace.p-Unicode, Query.p-Unicode, Method.p-Unicode, ParameterArray, ParameterArraySize)
        Global ExecuteWMIMethod.ExecuteWMIMethod = GetFunction(PBEx_WMI, "ExecuteWMIMethod")
        Prototype WaitWMIEvent(Query.p-Unicode, Timeout = 0)
        Global WaitWMIEvent.WaitWMIEvent = GetFunction(PBEx_WMI, "WaitWMIEvent")
       
        Define Output$ = Space(1000000)
        ExecuteWMIQuery("root\CIMV2", "SELECT * FROM Win32_LogicalDisk", @Output$)
        ParseXML(1, Output$)
        FormatXML(1, #PB_XML_WindowsNewline | #PB_XML_ReFormat | #PB_XML_ReIndent)
        Debug ComposeXML(1)
       
        CloseLibrary(PBEx_WMI)
      EndIf

  • ExecuteWMIMethod()
    • Syntax:
      Code:
      Result = ExecuteWMIMethod(Namespace$, Query$, Method$, ParameterArray, ParameterArraySize)

    • Beschreibung: Führt eine Methode aus.
    • Parameter:
      1. Namespace$: Bezeichnung des Namensraums.
      2. Query$: Abfrage der Klasse und optional mit Bedingungen.
      3. Method$: Name der Methode, die ausgeführt werden soll.
      4. ParameterArray: Ein String-Array mit Parametern, die übergeben werden sollen. Parametername und -wert werden mit einem Gleichheitszeichen ohne Leerzeichen getrennt.
      5. ParameterArraySize: Anzahl der Elemente.
    • Rückgabewert:
      • 0: Der Vorgang war erfolgreich.
    • Beispielcode:
      Code:
      EnableExplicit

      Global PBEx_WMI

      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x64.dll")
      CompilerEndIf

      If PBEx_WMI
        Prototype ExecuteWMIQuery(Namespace.p-Unicode, Query.p-Unicode, Output)
        Global ExecuteWMIQuery.ExecuteWMIQuery = GetFunction(PBEx_WMI, "ExecuteWMIQuery")
        Prototype ExecuteWMIMethod(Namespace.p-Unicode, Query.p-Unicode, Method.p-Unicode, ParameterArray, ParameterArraySize)
        Global ExecuteWMIMethod.ExecuteWMIMethod = GetFunction(PBEx_WMI, "ExecuteWMIMethod")
        Prototype WaitWMIEvent(Query.p-Unicode, Timeout = 0)
        Global WaitWMIEvent.WaitWMIEvent = GetFunction(PBEx_WMI, "WaitWMIEvent")
       
        ;Administratorrechte erforderlich
        Dim ParameterArray.s(0)
        ParameterArray(0) = "Name=YourNewUsername"
        Debug ExecuteWMIMethod("root\CIMV2", "Win32_UserAccount.Domain='YourWorkgroup',Name='YourUsername'", "Rename", ParameterArray(), ArraySize(ParameterArray())+1)
       
        CloseLibrary(PBEx_WMI)
      EndIf

  • WaitWMIEvent()
    • Syntax:
      Code:
      Result = WaitWMIEvent(Class$, Query$, Timeout = 0)

    • Beschreibung: Wartet auf ein Event.
    • Parameter:
      1. Query$: Abfrage der Klasse und optional mit Bedingungen.
      2. Timeout: Zeit in Millisekunden, wie lange maximal auf ein Event gewartet werden soll. Wenn nichts oder 0 angegeben wurde, dann wird so lange gewartet, bis das Event ausgelöst wurde.
    • Rückgabewert:
      • 0: Der Vorgang war erfolgreich.
    • Beispielcode:
      Code:
      EnableExplicit

      Global PBEx_WMI

      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_WMI = OpenLibrary(#PB_Any, "PB.Ex_WMI_x64.dll")
      CompilerEndIf

      If PBEx_WMI
        Prototype ExecuteWMIQuery(Namespace.p-Unicode, Query.p-Unicode, Output)
        Global ExecuteWMIQuery.ExecuteWMIQuery = GetFunction(PBEx_WMI, "ExecuteWMIQuery")
        Prototype ExecuteWMIMethod(Namespace.p-Unicode, Query.p-Unicode, Method.p-Unicode, ParameterArray, ParameterArraySize)
        Global ExecuteWMIMethod.ExecuteWMIMethod = GetFunction(PBEx_WMI, "ExecuteWMIMethod")
        Prototype WaitWMIEvent(Query.p-Unicode, Timeout = 0)
        Global WaitWMIEvent.WaitWMIEvent = GetFunction(PBEx_WMI, "WaitWMIEvent")
       
        ;Administratorrechte erforderlich
        Debug "Warten, bis der Taschenrechner gestartet wurde..."
        If WaitWMIEvent("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = 'calc.exe'") = 0
          Debug "Taschenrechner wurde gestartet."
        Else
          Debug "Fehler"
        EndIf
       
        CloseLibrary(PBEx_WMI)
      EndIf


Systemvoraussetzungen:
  • Windows XP oder höher
  • .NET Framework 3.5 oder höher
  • Unicode-Aktivierung (standardmäßig ab PB 5.50)
Da das benötigte .NET Framework ab Windows 7 standardmäßig vorinstalliert ist und auf XP und Vista installiert werden kann, sollte das kein Problem sein, diese Version zu verwenden.
Es ist keine Assembly-Registrierung mit regasm.exe mit Administratorrechten notwendig wie bei COMatePLUS.

Lizenz: Diese DLL-Datei ist kostenlos und darf sowohl privat als auch kommerziell verwendet werden.
Folgende Copyright-Texte müssen mitgeliefert werden:
Zitat:
Copyright © 2019 RSBasic.de


Download: http://www.rsbasic.de/downloads/downloa ... Ex_WMI.zip
Bild

Ich würde mich über Feedbacks, Verbesserungsvorschläge, Fehlermeldungen oder Wünsche sehr freuen. Wer mich unterstützen möchte, kann mir auch was kleines spenden. Danke :)

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB.Ex WMI (Windows)
BeitragVerfasst: 15.06.2020 13:05 
Offline

Registriert: 21.12.2014 17:09
Hallo RSBasic,
erst mal Danke für die Dll's. Die Software funktioniert soweit ganz gut. Ich hätte eine Frage, kann man diese eventuell für eine neuere .Net Version kompilieren ?. Unter z.B. WInServer 2016 startet ein Installdialog, der dotNet 3.5 installieren will. Laut dem was ich hier ersehe https://docs.microsoft.com/de-de/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
ist dort z.b. 4.6.2 im Lieferumfang. Es wäre ungünstig nur für gelegentlich WMI Abfragen ein älteres Framework zu installieren, das dann wieder zahllose Updates nach sich zieht.
Ich weiss nicht, ob es Sinn macht, aber vielleicht kann man die Ausgabe auch in anderen Formaten (CSv,Json etc.) anbieten ? Damit man diese z.B in Sqlite importieren kann. (kann man sich auch selber umstellen) Ich habe diese intern in einer Struktuierten Liste (Liste + Map) verwendet. Fand ich irgendwie griffiger beim weiteren (internen) verarbeiten.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye