1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Bitnugger

Beiträge von Bitnugger

  • ISN AutoIt Studio

    • Bitnugger
    • 9. März 2018 um 12:26
    Zitat von ISI360

    Ich rate jetz mal und sage der 2te Bildschirm befindet sich links neben deinem Hauptbildschirm, oder?

    Jeep!

  • ISN AutoIt Studio

    • Bitnugger
    • 9. März 2018 um 11:18

    Ich arbeite mit zwei Monitoren und habe ISN Autoit Studio (ISN) nun so eingerichtet, dass es sich die Fensterposition merkt und ISN auf Monitor 2 verschoben. Allerdings werden dann alle von ISN geöffneten Fenster (z.B. die Projektverwaltung) an einer ungünstigen Position angezeigt, denn der rechte Teil der Fenster befindet sich dabei auf Monitor 1!

    Die Fenster lassen sich zudem zwar beliebig weit nach rechts (auf Monitor 1) verschieben, aber nicht weiter nach links, als auf den Bildern zu sehen ist!

    Auch ist es 1x passiert, dass die geöffnete Projektverwaltung nach dem Verschieben des ISN-Fenster plötzlich nicht mehr sichtbar und auch über das Menü nicht mehr aufrufbar war.

    ISN_Autoit_Studio_WindowPos_02.png    ISN_Autoit_Studio_WindowPos.png

  • FF.au3 Seiteninhalt auslesen

    • Bitnugger
    • 8. März 2018 um 00:41

    Schau mal hier... evtl. hilft dir das weiter...

  • _GDIPlus_ImageGetPropertyItems

    • Bitnugger
    • 7. März 2018 um 22:20

    Ich war mal so frei und habe es eingebaut... diese Funktion (_GDIPlus_ImageGetPropertyItem) ist nun übrigens in AutoIt v3.3.14.3 enthalten und kann (je nach Kamera) noch mehr Properties auslesen.

    Dateien

    _GDIPlus_ImageGetPropertyItems.au3 10,82 kB – 302 Downloads
  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 7. März 2018 um 19:56
    Zitat von Lashandan

    Wie löse ich das Problem?

    Um auf den Ziel-Rechnern die Registry lesen/schreiben zu können, muss dort der Dienst "Remoteregistrierung" ausgeführt werden.

    Lösung 1: Dienste mit services.msc (auf den Ziel-Rechnern) konfigurieren

    Windows + R drücken, services.msc eingeben, mit Enter abschicken.

    Permanent: Den Starttyp für den Dienst Remoteregistrierung auf Automatisch umstellen und den Dienst starten.

    Temporär: Den Dienst Remoteregistrierung starten.

    Lösung 2: Dienste mit sc.exe (auf den Ziel-Rechnern) konfigurieren

    Windows + R drücken, cmd.exe eingeben, mit Enter abschicken.

    Permanent: sc.exe config RemoteRegistry start=auto & sc.exe start RemoteRegistry

    Temporär: sc.exe start RemoteRegistry

    Lösung 3: Dienste mit psexec.exe (auf dem PC, auf dem das Script ausgeführt wird) konfigurieren

    ; ComputerName, UserName und Passwort mit den realen Daten ersetzen!

    Permanent: psexec \\ComputerName -u UserName -p Passwort -h sc.exe config RemoteRegistry start=auto & psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Temporär: psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Download psexec: https://technet.microsoft.com/de-de/sysinternals/bb897553.aspx

    Lösung 3 habe ich dir noch in das Script eingebaut...

    AutoIt
    ;-- TIME_STAMP   2018-03-07 19:48:11   v 0.1
    
    #RequireAdmin
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region ;************ Includes ************
    #include-once
    #include <File.au3>
    ;~ #include <Array.au3>
    ;~ #include <AutoItConstants.au3>
    ;~ #include <MsgBoxConstants.au3>
    #EndRegion ;************ Includes ************
    
    ; WMI-Dienst gestartet?
    ; sc query winmgmt
    
    ; Windows Firewall WMI eingehend
    ; abfragen: netsh advfirewall firewall show rule name="Windows-Verwaltungsinstrumentation (WMI eingehend)"
    ; erlauben: netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
    
    ; ESET Security musste ich temporär auf "Interaktiv" umstellen, um die neuen Regeln ohne einen Neustart zu übernehmen.
    
    Global $g_sLogFile = @ScriptDir & "\CheckBootUp.txt"
    
    If Not IsAdmin() Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Das Skript muss mit Adminrechten gestartet werden!")
    
    ; Globales Hotkey zum Beenden des Scripts: "ESC-Taste"
    If Not HotKeySet("{ESC}", _Exit) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Globales HotKey 'ESC' konnte nicht gesetzt werden!")
    
    _CheckBootUp()
    
    Func _CheckBootUp()
        Local $hFile, $sComputerName, $sUserName, $sPassword, $aRechner = FileReadToArray(@ScriptDir & "\RechnerListe.txt")
        If Not UBound($aRechner) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "RechnerListe.txt nicht gefunden oder leer!")
    
        $hFile = FileOpen($g_sLogFile, BitOR($FO_ANSI, $FO_APPEND)) ; ANSI reicht völlig aus, wenn keine Sonderzeichen enthalten sind.
    
        For $i = 0 To UBound($aRechner) - 1 Step 1
            Ping($aRechner[$i], 300)
            If @error Then
                ; ____________________StringFormat('11111 : 22222 : 33333 : 44', 1111111111111, 22, 33, 444444444)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %-26s : %s', $aRechner[$i], '', '', 'offline'))
            Else
                $sUserName = _GetUserName($aRechner[$i])
                $sComputerName = $aRechner[$i]
                $sPassword = '' ; Evtl. nächste Woche kann ich dir zeigen, wie man die Passwörter verschlüsselt speichern kann... doch jetzt habe ich keine Zeit dafür. ;-)
    
                ; ____________________StringFormat('11111 : 22222 : 33333 : 44', 1111111111111, 22222222222, 333333333333333333333333333333333333333333333333333, 444444444444444444444444444444)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %-26s : %s', $sComputerName, $sUserName, _GetRegData($sComputerName, $sUserName, $sPassword), _GetLastBootUp($sComputerName)))
            EndIf
        Next
    
        FileClose($hFile)
    
        MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Fertig")
    EndFunc   ;==>_CheckBootUp
    
    Func _GetLastBootUp($sComputer = '.') ; "." steht für lokalen Rechner
        Local $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
        If Not IsObj($oWMIService) Then Return ''
        Local $oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
        Local $sBootup
        For $oOS In $oColOperatingSystems
            $sBootup = $oOS.LastBootUpTime ; --> 20180210112637.125599+060
        Next
        Return $sBootup = '' ? 'WMI-Dienst nicht gestartet oder keine Regeln für Windows Firewall WMI eingehend definiert!' : StringRegExpReplace($sBootup, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+', '\1-\2-\3 \4:\5:\6')
    EndFunc   ;==>_GetLastBootUp
    
    Func _GetUserName($strClient = @ComputerName, $strDomain = '')
        Local $objWMIService, $objItem, $colItems, $strUser, $Result
        $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strClient)
        If Not IsObj($objWMIService) Then Return ''
    
        $colItems = $objWMIService.InstancesOf("Win32_Process")
        If IsObj($colItems) Then
            For $objItem In $colItems
                If ($objItem.Caption = "explorer.exe") Then
                    $Result = $objItem.GetOwner($strUser, $strDomain)
                    If (Not @error) And ($Result = 0) Then Return $strUser
                EndIf
            Next
        EndIf
    EndFunc   ;==>_GetUserName
    
    Func _GetRegData($sComputerName, $sUserName, $sPasswort = '', $bActivateAutoStart = True)
        Local $sUserID, $iError
        
        $sPasswort = '' ? _GetPassword($sComputerName, $sUserName) : $sPasswort
        
        For $i = 1 To 2 Step 1
            $sUserID = RegRead("\\" & $sComputerName & "\HKCU\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
            If $sUserID Then Return $sUserID
        
            If RegRead('\\' & $sComputerName & "\HKCR\.txt", "") Then Return 'pSAG nicht installiert!'
            
            If $i = 2 Then Return SetError(1, 0, 'RemoteRegistry konnte nicht gestartet werden!')
        
            ; Download psexec: https://technet.microsoft.com/de-de/sysinternals/bb897553.aspx
            
            $iError = RunWait(StringFormat('psexec \\\%s -u %s -p %s -h sc.exe start RemoteRegistry', $sComputerName, $sUserName, $sPasswort))
            If $iError Then Return SetError($iError, 0, 'psexec (start) Error = ' & $iError & '!')
            
            If Not $bActivateAutoStart Then ContinueLoop
            $iError = RunWait(StringFormat('psexec \\\%s -u %s -p %s -h sc.exe config RemoteRegistry start=auto', $sComputerName, $sUserName, $sPasswort))
            If $iError Then Return SetError($iError, 0, 'psexec (config) Error = ' & $iError & '!')
        Next
    EndFunc   ;==>_GetRegData
    
    Func _GetPassword($sComputerName, $sUserName)
        Return InputBox(@ScriptName, StringFormat('ComputerName: %s\r\rUserName: %s\r\r\rPasswort eingeben: ', $sComputerName, $sUserName), '*')
    EndFunc
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 6. März 2018 um 21:44
    Zitat von Lashandan

    Kann nicht ganz nachvollziehen, wie der Aufbau von _FileWriteLog ist und wo genau die Ausgabe in die Datei erfolgt.

    Vielleicht kannst du dazu ja noch etwas loswerden?

    _FileWriteLog schreibt das aktuelle Datum, die Uhrzeit und den angegebenen Text in eine Protokolldatei. Mit StringFormat formatieren wir den angegebenen Text.

    AutoIt
    ; _FileWriteLog ( $sLogPath, $sLogMsg [, $iFlag = -1] )
    
    ; ____________________StringFormat('11111 : 22222 : 33333 : 44', 1111111111111, 222222222222222222222222222, 3333333333333, 44444444444444444444444444444)
    _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %-26s : %s', $aRechner[$i], _GetUserName($aRechner[$i]), _GetRegData(), _GetLastBootUp($aRechner[$i])))
    
    #cs
      %s       Korrespondierende Variable als String interpretieren.
      %-26s    Wie %s, durch das "-" wird der String aber linksbündig ausgegeben und mit Leerzeichen auf "26" Zeichen aufgefüllt, falls er kürzer ist.
    
      Datum, Uhrzeit      : $aRechner[$i]              : _GetUserName($aRechner[$i]): _GetRegData()              : _GetLastBootUp($aRechner[$i])
                          : %-26s                      : %-26s                      : %-26s                      : %s
      2018-03-02 21:50:05 : SERVER                     : Bitnugger                  : Bitnugger                  : 2018-03-02 20:20:14
    #ce
    Alles anzeigen

    Hier die Version mit _GetRegData()

    AutoIt
    ;-- TIME_STAMP   2018-03-06 20:30:36   v 0.1
    
    #RequireAdmin
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region ;************ Includes ************
    #include-once
    #include <File.au3>
    ;~ #include <Array.au3>
    ;~ #include <AutoItConstants.au3>
    ;~ #include <MsgBoxConstants.au3>
    #EndRegion ;************ Includes ************
    
    ; WMI-Dienst gestartet?
    ; sc query winmgmt
    
    ; Windows Firewall WMI eingehend
    ; abfragen: netsh advfirewall firewall show rule name="Windows-Verwaltungsinstrumentation (WMI eingehend)"
    ; erlauben: netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
    
    ; ESET Security musste ich temporär auf "Interaktiv" umstellen, um die neuen Regeln ohne einen Neustart zu übernehmen.
    
    Global $g_sLogFile = @ScriptDir & "\CheckBootUp.txt"
    
    If Not IsAdmin() Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Das Skript muss mit Adminrechten gestartet werden!")
    
    ; Globales Hotkey zum Beenden des Scripts: "ESC-Taste"
    If Not HotKeySet("{ESC}", _Exit) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Globales HotKey 'ESC' konnte nicht gesetzt werden!")
    
    _CheckBootUp()
    
    Func _CheckBootUp()
        Local $hFile, $aRechner = FileReadToArray(@ScriptDir & "\RechnerListe.txt")
        If Not UBound($aRechner) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "RechnerListe.txt nicht gefunden oder leer!")
    
        $hFile = FileOpen($g_sLogFile, BitOR($FO_ANSI, $FO_APPEND)) ; ANSI reicht völlig aus, wenn keine Sonderzeichen enthalten sind.
    
        For $i = 0 To UBound($aRechner) - 1 Step 1
            Ping($aRechner[$i], 300)
            If @error Then
                ; ____________________StringFormat('11111 : 22222 : 33333 : 44', 1111111111111, 22, 33, 444444444)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %-26s : %s', $aRechner[$i], '', '', 'offline'))
            Else
                ; ____________________StringFormat('11111 : 22222 : 33333 : 44', 1111111111111, 222222222222222222222222222, 3333333333333, 44444444444444444444444444444)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %-26s : %s', $aRechner[$i], _GetUserName($aRechner[$i]), _GetRegData(), _GetLastBootUp($aRechner[$i])))
            EndIf
        Next
    
        FileClose($hFile)
    
        MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Fertig")
    EndFunc   ;==>_CheckBootUp
    
    Func _GetLastBootUp($sComputer = '.') ; "." steht für lokalen Rechner
        Local $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
        If Not IsObj($oWMIService) Then Return ''
        Local $oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
        Local $sBootup
        For $oOS In $oColOperatingSystems
            $sBootup = $oOS.LastBootUpTime ; --> 20180210112637.125599+060
        Next
        Return $sBootup = '' ? 'WMI-Dienst nicht gestartet oder keine Regeln für Windows Firewall WMI eingehend definiert!' : StringRegExpReplace($sBootup, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+', '\1-\2-\3 \4:\5:\6')
    EndFunc   ;==>_GetLastBootUp
    
    Func _GetUserName($strClient = @ComputerName, $strDomain = '')
        Local $objWMIService, $objItem, $colItems, $strUser, $Result
        $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strClient)
        If Not IsObj($objWMIService) Then Return ''
    
        $colItems = $objWMIService.InstancesOf("Win32_Process")
        If IsObj($colItems) Then
            For $objItem In $colItems
                If ($objItem.Caption = "explorer.exe") Then
                    $Result = $objItem.GetOwner($strUser, $strDomain)
                    If (Not @error) And ($Result = 0) Then Return $strUser
                EndIf
            Next
        EndIf
    EndFunc   ;==>_GetUserName
    
    Func _GetRegData()
        Return RegRead("HKEY_CURRENT_USER\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
    EndFunc   ;==>_GetRegData
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen

    Und BITTE: Zitiere künftig nicht mehr komplette Nachrichten oder Scripte, sondern nur den relevanten Teil, der zum Verständnis nötig ist.

  • GUI Labels als Array ansprechen

    • Bitnugger
    • 5. März 2018 um 23:15
    Zitat von autoiter

    Ich habe wirklich spekuliert, dass mal ein Ping verloren gehen kann.

    Nun, bis data ist mir noch nie ein Ping verloren gegangen... und wäre dem so, würde ich das Problem nicht einfach mit einer For-Schleife kaschieren, sondern die Ursache dafür finden wollen. ;)

  • GUI Labels als Array ansprechen

    • Bitnugger
    • 5. März 2018 um 21:48
    Zitat von autoiter

    Es könnte vllt. sein, dass mal ein Ping verloren geht. Zur Sicherheit könntest du den Ping in eine eigene For Schleife packen und max. dreimal ausführen,

    Mit anderen Worten... den Parameter $iTimeOut auf 3000 setzen. 8o

    Habe das Script bei mir getestet und es läuft einwandfrei und ohne Fehler.

    Die Funktion labelSetScheme habe ich allerdings etwas verkürzt...

    AutoIt
    Func labelSetScheme($cLabel, $iScheme)
        Local Static $aSchemes = [[0xCCFF33, 0x336600], [0xFF9933, 0x993300], [0xFFFF66, 0x996633], [0xFFFFFF, 0x000000]]
    ;~     If $iScheme < 0 Or $iScheme >= UBound($aSchemes) Then Return SetError(1, 0, False)
        GUICtrlSetBkColor($cLabel, $aSchemes[$iScheme][0])
        GUICtrlSetColor($cLabel, $aSchemes[$iScheme][1])
    EndFunc
  • Treeview Icons einzeln ändern

    • Bitnugger
    • 5. März 2018 um 21:10


    ContinueCase... du brauchst doch nur die Cases vertauschen?!

    AutoIt
    Select
        Case $read_important = 4
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 92)
        Case $read_reservierung = 4
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 111) ;Icon 111
        Case Else
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 5)
    EndSelect
  • Wie organisiert ihr eure AutoIt-Projektverzeichnisse?

    • Bitnugger
    • 4. März 2018 um 22:15

    Mein aktuelles Projekt hat bis dato 307 KB in 3893 Zeilen und ist zu 95% fertig.

    SciTE Jump kenne ich schon sehr lange, nutze es aber nicht, weil es nicht mit mehreren SciTE-Instanzen und auch nicht mit mehreren Monitoren klar kommt. Das müsste dringend mal angepasst werden. Um zu einer Funktion zu scrollen, drücke ich Ctrl + j. Dazu muss das Caret vor/über/hinter einem Funktionsnamen stehen. Bei den Includes geht dies übrigens mit Alt + i. Desweitern setze ich auch gerne Lesezeichen (Strg + F2), um wichtige Stellen im Script zu markieren, die dann mit F2/Shift + F2 angesprungen werden können.

    Das Hauptscript in mehrere Module aufzuteilen macht Sinn, wenn man eine IDE benutzt. Mit SciTE bringt es mehr Nachteile als Vorteile, weil SciTE keine Projekte verwalten kann.

    Ich habe zwar ISN AutoIT Studio :thumbup: installiert und "spiele" auch ab und an gerne damit, hantiere wegen den von mir integrierten Lua-Scripts aber dennoch lieber mit SciTE.

    Ich benutze je nach Situation OrganizeIncludes oder IncludesHelper, doch keines der beiden Tools ist wirklich befriedigend, da keines der beiden alle benötigten Includes immer korrekt erkennt! ManageIncludes.lua ( BugFix ) bekomme ich leider nicht zum Laufen.

    In meinem aktuellen Projekt habe ich folgende Unterordner:

    Code
    LPS Manager
        BackUp\                                 ; BackUp der Einstellungen (*.ini)
        Debug\                                  ; Spezielle Debug-Funktionen (werden ausgeführt, wenn $g_iDEBUG > 0 ist)
        Docs\                                   ; Anleitungen für User
        Erweiterungen\                          ; Optionale Erweiterungen
            ETH484 - 4 x 16A ethernet relay\    ; 
        Icons\                                  ; 
            ListView\                           ; 16 x 16, ...
            ToolBar\                            ; 64 x 64, ...
        Includes\                               ; Eigene Includes für dieses Projekt
        Pics\                                   ; ProgInfo und Pic für Hilfe
            PlantLayouts                        ; Gebäudepläne (via Drag n Drop hinzufügar)
        Sounds\                                 ; Sounds für Error, Notify, Mail usw. 
            Mail\                               ; 
        Test\                                   ; Test-Scripte, die in vielen Fällen später auch in anderen Projekten verwendet werden können
        Tools\                                   ; Spezielle Tools für dieses Projekt
    Alles anzeigen
  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 2. März 2018 um 20:51
    AutoIt
    ;-- TIME_STAMP   2018-03-02 21:51:25   v 0.1
    
    #RequireAdmin
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region    ;************ Includes ************
    #include-once
    #include <File.au3>
    ;~ #include <Array.au3>
    ;~ #include <AutoItConstants.au3>
    ;~ #include <MsgBoxConstants.au3>
    #EndRegion ;************ Includes ************
    
    ; WMI-Dienst gestartet?
    ; sc query winmgmt
    
    ; Windows Firewall WMI eingehend
    ; abfragen: netsh advfirewall firewall show rule name="Windows-Verwaltungsinstrumentation (WMI eingehend)"
    ; erlauben: netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
    
    ; ESET Security musste ich temporär auf "Interaktiv" umstellen, um die neuen Regeln ohne einen Neustart zu übernehmen.
    
    Global $g_sLogFile = @ScriptDir & "\CheckBootUp.txt"
    
    If Not IsAdmin() Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Das Skript muss mit Adminrechten gestartet werden!")
    
    ; Globales Hotkey zum Beenden des Scripts: "ESC-Taste"
    If Not HotKeySet("{ESC}", _Exit) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Globales HotKey 'ESC' konnte nicht gesetzt werden!")
    
    _CheckBootUp()
    
    Func _CheckBootUp()
        Local $hFile, $aRechner = FileReadToArray(@ScriptDir & "\RechnerListe.txt")
        If Not UBound($aRechner) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "RechnerListe.txt nicht gefunden oder leer!")
    
        $hFile = FileOpen($g_sLogFile, BitOr($FO_ANSI, $FO_APPEND)) ; ANSI reicht völlig aus, wenn keine Sonderzeichen enthalten sind.
    
        For $i = 0 To UBound($aRechner) -1 Step 1
            Ping($aRechner[$i], 300)
            If @error Then
                ; ____________________StringFormat('11111 : 22222 : 33', 1111111111111, 22, 33)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %s', $aRechner[$i], '', ''))
            Else
                ; ____________________StringFormat('11111 : 22222 : 33', 1111111111111, 222222222222222222222222222, 33333333333333333333333333333)
                _FileWriteLog($hFile, StringFormat('%-26s : %-26s : %s', $aRechner[$i], _GetUserName($aRechner[$i]), _GetLastBootUp($aRechner[$i])))
            EndIf
        Next
    
        FileClose($hFile)
    
        MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Fertig")
    EndFunc   ;==>_CheckBootUp
    
    Func _GetLastBootUp($sComputer = '.') ; "." steht für lokalen Rechner
        Local $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
        If Not IsObj($oWMIService) Then Return ''
        Local $oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
        Local $sBootup
        For $oOS In $oColOperatingSystems
            $sBootup = $oOS.LastBootUpTime ; --> 20180210112637.125599+060
        Next
        Return $sBootup = '' ? 'WMI-Dienst nicht gestartet oder keine Regeln für Windows Firewall WMI eingehend definiert!' : StringRegExpReplace($sBootup, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+', '\1-\2-\3 \4:\5:\6')
    EndFunc   ;==>_GetLastBootUp
    
    Func _GetUserName($strClient = @ComputerName, $strDomain = '')
        Local $objWMIService, $objItem, $colItems,  $strUser,  $Result
        $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\"  & $strClient)
        If Not IsObj($objWMIService) Then Return ''
    
        $colItems = $objWMIService.InstancesOf("Win32_Process")
        If IsObj($colItems) Then
            For $objItem In $colItems
                If ($objItem.Caption = "explorer.exe") Then
                    $Result = $objItem.GetOwner($strUser, $strDomain)
                        If (Not @error) And ($Result = 0) Then Return $strUser
                EndIf
            Next
        EndIf
    EndFunc   ;==>_GetUserName
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 1. März 2018 um 21:37
    Zitat von Lashandan

    Habe mich selbst schon daran versucht...aber ich bekomme leider immer noch den User zurückgemeldet, der das Script ausführt.

    Zeige mal bitte, wie du es versucht hast.

    Hier ein paar Möglichkeiten...

    AutoIt
    ;-- TIME_STAMP   2018-03-01 21:28:11   v 0.1
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ #AutoIt3Wrapper_Change2CUI=y
    ;~ #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    ConsoleWrite('+ @UserName        = ' & @UserName & @CRLF)
    
    ConsoleWrite('> LastUsedUsername = ' & RegRead((@OSArch = 'X86' ? 'HKLM' : 'HKLM64') & '\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 'LastUsedUsername') & @CRLF)
    
    ConsoleWrite('- @ComputerName    = ' & _GetUserName(@ComputerName) & @CRLF)
    
    If @IPAddress1 <> '0.0.0.0' Then ConsoleWrite('- @IPAddress1 ('&@IPAddress1&') = ' & _GetUserName(@IPAddress1) & @CRLF)
    If @IPAddress2 <> '0.0.0.0' Then ConsoleWrite('- @IPAddress2 ('&@IPAddress2&') = ' & _GetUserName(@IPAddress2) & @CRLF)
    If @IPAddress3 <> '0.0.0.0' Then ConsoleWrite('- @IPAddress3 ('&@IPAddress3&') = ' & _GetUserName(@IPAddress3) & @CRLF)
    If @IPAddress4 <> '0.0.0.0' Then ConsoleWrite('- @IPAddress4 ('&@IPAddress4&') = ' & _GetUserName(@IPAddress4) & @CRLF)
    
    Func _GetUserName($strClient)
        Local $objWMIService, $objItem, $colItems,  $strUser, $strDomain,  $Result
        $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\"  & $strClient)
        If Not IsObj($objWMIService) Then Return ''
    
        $colItems = $objWMIService.InstancesOf("Win32_Process")
        If IsObj($colItems) Then
            For $objItem In $colItems
                If ($objItem.Caption = "explorer.exe") Then
                    $Result = $objItem.GetOwner($strUser, $strDomain)
                        If (Not @error) And ($Result = 0) Then Return $strUser
                EndIf
            Next
        EndIf
    EndFunc
    Alles anzeigen
  • Portieren Scintilla DirectMessage von C/C++

    • Bitnugger
    • 28. Februar 2018 um 21:20

    Schau mal hier: https://www.autoitscript.com/forum/topic/40…illa-in-autoit/

  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 27. Februar 2018 um 00:49
    Zitat von alpines

    Nein! Seit 3.3.10.2 (?) kann man Funktionen als Referenz übergeben und es ist auch möglich sie direkt zu übergeben.

    Stimmt... danke... habe es soeben getestet... das ist in der Hilfe zu HotKeySet aber nicht mal ansatzweise beschrieben.

    Zitat von alpines

    Du kannst sogar Funktionen aus Variablen callen!

    Ja, das wusste ich bereits... bis dato hatte ich aber angenommen, dass es zumindest bei HotKeySet nicht der Fall ist.

  • Start, Logon, Logoff und Shutdown

    • Bitnugger
    • 26. Februar 2018 um 20:39

    HotKeySet: Bei globalen Hotkeys würde ich immer überprüfen, ob diese gesetzt werden konnten. Zudem muss der Funktionsname in ""!

    IsAdmin: Nur dann Ausgabe machen und Script beenden, wenn es nicht der Fall ist.

    getRow: FileClose muss vor dem Return ausgeführt werden!

    getRow/hasRows - sind überflüssig!

    structure: Das erste FileOpen $hFilehandle wird an keiner Stelle geschlossen!

    Es heißt nicht $sCount, $sLine... sondern $iCount, $iLine, denn dass $s steht für String, das $i für Int[eger].

    Du darfst die Modes für FileOpen nicht mit & verknüpfen, sondern mit + oder besser noch mit BitOr. "Haus" & "katze" = "Hauskatze", 1 + 2 = 3, BitOr(1, 2) = 3

    Falsch: Local $hFileAusgabe = FileOpen($sDateiAusgabe, $FO_UTF8 & $FO_APPEND)

    Richtig: Local $hFileAusgabe = FileOpen($sDateiAusgabe, $FO_UTF8 + $FO_APPEND)

    Besser: Local $hFileAusgabe = FileOpen($sDateiAusgabe, BitOr($FO_UTF8, $FO_APPEND))

    If $iPing Then ... ist falsch, denn die "roundtrip-time" kann sehr wohl auch Null sein, was in der Hilfe leider immer noch nicht richtig beschrieben ist!

    Richtig ist also...

    If @error Then

    $sPath wird an keiner Stelle im Script verwendet.

    In Zeile 59/64 verwendest du "Magic Numbers", in Zeile 7 aber Konstanten für MsgBox... du solltest dich für eine Form entscheiden.

    AutoIt: CheckBootUp
    ;-- TIME_STAMP   2018-02-26 20:32:38   v 0.1
    
    #RequireAdmin
    
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    #Region    ;************ Includes ************
    #include-once
    #include <File.au3>
    ;~ #include <Array.au3>
    ;~ #include <AutoItConstants.au3>
    ;~ #include <MsgBoxConstants.au3>
    #EndRegion ;************ Includes ************
    
    ; WMI-Dienst gestartet?
    ; sc query winmgmt
    
    ; Windows Firewall WMI eingehend
    ; abfragen: netsh advfirewall firewall show rule name="Windows-Verwaltungsinstrumentation (WMI eingehend)"
    ; erlauben: netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
    
    ; ESET Security musste ich temporär auf "Interaktiv" umstellen, um die neuen Regeln ohne einen Neustart zu übernehmen.
    
    Global $g_sLogFile = @ScriptDir & "\CheckBootUp.txt"
    
    If Not IsAdmin() Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Das Skript muss mit Adminrechten gestartet werden!")
    
    ; Globales Hotkey zum Beenden des Scripts: "ESC-Taste"
    If Not HotKeySet("{ESC}", "_Exit") Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Globales HotKey 'ESC' konnte nicht gesetzt werden!")
    
    _CheckBootUp()
    
    Func _CheckBootUp()
        Local $hFile, $aRechner, $aRechner = FileReadToArray(@ScriptDir & "\RechnerListe.txt")
        If Not UBound($aRechner) Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "RechnerListe.txt nicht gefunden oder leer!")
    
        $hFile = FileOpen($g_sLogFile, BitOr($FO_ANSI, $FO_APPEND)) ; ANSI reicht völlig aus, wenn keine Sonderzeichen enthalten sind.
    
        For $i = 0 To UBound($aRechner) -1 Step 1
            ConsoleWrite('Ping ' & $aRechner[$i] & @CRLF)
            Ping($aRechner[$i], 300)
            _FileWriteLog($hFile, StringFormat('%-26s : %s', $aRechner[$i], (@error ? 'offline' : _GetLastBootUp($aRechner[$i]))))
        Next
    
        FileClose($hFile)
    
        MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL, $MB_TOPMOST), @ScriptName, "Fertig")
    EndFunc   ;==>_CheckBootUp
    
    Func _GetLastBootUp($sComputer = '.') ; "." steht für lokalen Rechner
        Local $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
        If Not IsObj($oWMIService) Then Return ''
        Local $oColOperatingSystems = $oWMIService.ExecQuery("Select LastBootUpTime from Win32_OperatingSystem")
        Local $sBootup
        For $oOS In $oColOperatingSystems
            $sBootup = $oOS.LastBootUpTime ; --> 20180210112637.125599+060
            ConsoleWrite('$sBootup = ' & $sBootup & @CRLF)
        Next
        Return $sBootup = '' ? 'WMI-Dienst nicht gestartet oder keine Regeln für Windows Firewall WMI eingehend definiert!' : StringRegExpReplace($sBootup, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+', '\1-\2-\3 \4:\5:\6')
    EndFunc   ;==>_GetLastBootUp
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • Logitech LED - Dll Call

    • Bitnugger
    • 25. Februar 2018 um 19:16

    Wenn du mit 64-Bit Programmen oder Dlls hantieren möchtest, dann musst du AutoIt das auch sagen...

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    
    Local $hDLL = DllOpen(@ScriptDir & "\LogitechLed.dll")
    If @error Then Exit MsgBox(16, @ScriptName, "LogitechLed.dll kann nicht geladen werden - das Script wird beendet!")
    Local $aReturn = DllCall($hDLL, "bool", "LogiLedInit")
    If @error Then MsgBox(0, "", "Methode konnte nicht aufgerufen werden!")
    DllClose($hDLL)
    Exit
  • Probleme mit der MondernMenu UDF

    • Bitnugger
    • 25. Februar 2018 um 18:32

    Im Anhang findest du eine aktualisierte ModernMenuLib_with_Tray_Fixed (für AutoIt v3.3.14.3)... inkl. deinem Script und einer geänderten/korrigierten SystemWindowSizes.au3.

    Du darfst Konstanten nicht innerhalb einer Funktion deklarieren, weil sie nur einmalig deklariert werden dürfen und nicht bei jedem Funktionsaufruf!

    Globale Variablen sollten nach Möglichkeit auch nicht innerhalb von Funktionen deklariert werden... wobei sich das aber nicht immer vermeiden lässt.

    Dateien

    ModernMenuLib_with_Tray_Fixed.zip 47,1 kB – 377 Downloads
  • Probleme mit der MondernMenu UDF

    • Bitnugger
    • 25. Februar 2018 um 17:50
    Zitat von NO1 :-)

    in der SystemWindowSizes.au3 werden werden Konstanten deklariert, noch andere Dateien includiert.

    Das ist ja wunderbar... und wo finde ich die SystemWindowSizes.au3?

  • Probleme mit der MondernMenu UDF

    • Bitnugger
    • 25. Februar 2018 um 17:33

    Ohne Script kann ich dein Problem nicht nachvollziehen.

  • Probleme mit der MondernMenu UDF

    • Bitnugger
    • 25. Februar 2018 um 15:17

    Dann werden die Includes in der falschen Reihenfolge geladen...

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™