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

  • Prüfung einer Datei

    • Bitnugger
    • 14. September 2016 um 14:55

    Vielleicht kannst du ja hiermit etwas anfangen...

    _MonitorDirectory-Demo
    AutoIt
    ;-- TIME_STAMP   2016-09-14 14:49:59
    
    
    #Region ;************ Includes ************
    #include <WindowsConstants.au3>
    #include <Array.au3>
    ;~ #include <GUIConstants.au3>;~~~
    #include <GUIConstantsEx.au3>
    #include <MonitorDirectory.au3>
    ;~ #include <WindowsConstants.au3>;~~~
    #EndRegion ;************ Includes ************
    
    
    Global $g_aDirs = ['f:\_Scripts\AutoIt\AutoIt3_MyInclude\', 'f:\Eigene Dateien\Pictures\']
    ;_ArrayDisplay($g_aDirs, '$g_aDirs')
    ;~ =========================== FUNCTION _MonitorDirectory() ==============================
    #cs
    	Description:     Monitors the user defined directories for file activity.
    	Original:        http://www.autoitscript.com/forum/index.php?showtopic=69044&hl=folderspy&st=0
    	Modified:        Jack Chen
    	Syntax:         _MonitorDirectory($Dirs = "", $Subtree = True, $TimerMs = 250, $Function = "_ReportChanges")
    	Parameters:
    	$Dirs          - Optional: Zero-based array of valid directories to be monitored.
    	$Subtree       - Optional: Subtrees will be monitored if $Subtree = True.
    	$TimerMs       - Optional: Timer to register changes in milliseconds.
    	$Function      - Optional: Function to launch when changes are registered. e.g. _ReportChanges
    	Syntax of your function must be e.g._ReportChanges($Action, $FilePath)
    	Possible actions: Created, Deleted, Modified, Rename-, Rename+, Unknown
    	Remarks:        Call _MonitorDirectory() without parameters to stop monitoring all directories.
    	THIS SHOULD BE DONE BEFORE EXITING SCRIPT AT LEAST.
    #ce
    
    
    #Region - GUI Create
    Global $g_hGUI = GUICreate('_MonitorDirectory-Demo', 600, 430, -800)
    
    
    Global $g_idButton_Start = GUICtrlCreateButton('Start', 2, 402, 296)
    Global $g_idButton_Exit = GUICtrlCreateButton('Exit', 302, 402, 296)
    
    
    Global $g_idMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    
    
    GUISetState()
    #EndRegion - GUI Create
    
    
    #Region - GUI SelectLoop
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE, $g_idButton_Exit
    			_MonitorDirectory()
    			Exit
    		Case $g_idButton_Start
    			_MonitorDirectory($g_aDirs, True, 250, '__ReportChanges')
    			If @error Then Exit 99
    			MemoWrite('##################### Folgene Verzeichnisse werden überwacht ####################')
    			MemoWrite(_ArrayToString($g_aDirs, @CRLF))
    			MemoWrite('#################################################################################')
    			;Case $msg =
    	EndSwitch
    WEnd
    #EndRegion - GUI SelectLoop
    
    
    Func __ReportChanges($Action, $FilePath)
    	Local Static $sAktFilePath = ""
    	Local $sColor = "", $aPos
    ;~ Your own script here ...
    ;~ ...
    	If $sAktFilePath = "" Then
    		$sAktFilePath = $FilePath
    	Else
    		If $sAktFilePath <> $FilePath Then
    			$sAktFilePath = $FilePath
    			ConsoleWrite(@LF)
    		EndIf
    	EndIf
    	$aPos = MouseGetPos()
    	Switch $Action
    		Case "Created"
    			$sColor = "+"
    		Case "Deleted"
    			$sColor = "!"
    		Case "Modified"
    			$sColor = "-"
    		Case "Rename-"
    			$sColor = ">"
    		Case "Rename+"
    			$sColor = ">"
    		Case "Unknown"
    			$sColor = ""
    	EndSwitch
    	; ConsoleWrite($sColor & StringFormat("%-9s%-5s%-256s", $Action, "-->", $FilePath) & @CRLF)
    	MemoWrite(StringFormat('%s %s: %s %s %s', "MonitorDirectory", $Action, $FilePath, $aPos[0] + 10, $aPos[1] + 10))
    EndFunc   ;==>__ReportChanges
    
    
    ; Write a line to the memo control
    Func MemoWrite($sMessage = '')
        GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
    EndFunc   ;==>MemoWrite
    Alles anzeigen


    _MonitorDirectory-Demo.png

    Dateien

    MonitorDirectory.au3 7,03 kB – 317 Downloads
  • Explorer öffnen und verschieben.

    • Bitnugger
    • 14. September 2016 um 11:44
    _GetNewExplorerWindow
    AutoIt
    ;-- TIME_STAMP   2016-09-14 12:26:25
    
    
    #Region ;************ Includes ************
    #include <Array.au3>
    #EndRegion ;************ Includes ************
    
    
    Local $hWnd_Explorer_a = _GetNewExplorerWindow("explorer.exe /N,/E," & "C:\", "", @SW_MAXIMIZE)
    Local $iPID_Explorer_a = @extended
    If @error Then Exit 2
    
    
    Local $hWnd_Explorer_b = _GetNewExplorerWindow("explorer.exe /N,/E," & @MyDocumentsDir, "", @SW_MAXIMIZE)
    Local $iPID_Explorer_b = @extended
    If @error Then Exit 3
    
    
    ConsoleWrite(StringFormat('$hWnd_Explorer_a: %s \t $iPID_Explorer_a: %s', $hWnd_Explorer_a, $iPID_Explorer_a) & @CRLF)
    ConsoleWrite(StringFormat('$hWnd_Explorer_b: %s \t $iPID_Explorer_b: %s', $hWnd_Explorer_b, $iPID_Explorer_b) & @CRLF)
    
    
    WinMove($hWnd_Explorer_a, '', 250, 250, 800, 600, 5)
    WinMove($hWnd_Explorer_b, '', 450, 350, 800, 600, 10)
    Exit
    
    
    ; Befehlszeilenoptionen für Windows-Explorer
    ; EXPLORER.EXE [/n][/e][,/root,<Objekt>][[,/select],<Unterobjekt>]
    ; https://support.microsoft.com/de-de/kb/130510
    Func _GetNewExplorerWindow($sExplorer, $sWorkingDir = '', $sShow_Flag = Default, $Opt_Flag = '')
    	If (IsDeclared('g_aWinList') = $DECLARED_GLOBAL) = False Then Global $g_aWinList
    	$g_aWinList = WinList('[CLASS:CabinetWClass]')
    
    
    	RunWait($sExplorer, $sWorkingDir, $sShow_Flag, $Opt_Flag)
    	If @error Then Exit 1
    
    
    	Local $__aWinList = $g_aWinList
    	$g_aWinList = WinList('[CLASS:CabinetWClass]')
    	If $g_aWinList[0][0] = 0 Or $g_aWinList[0][0] < $__aWinList[0][0] Then Return SetError(1, 0, 0)
    
    
    	For $i = 1 To $g_aWinList[0][0] Step 1
    		If _ArraySearch($__aWinList, $g_aWinList[$i][1], 1, 0, 0, 0, 1, 1) = -1 Then Return SetError(0, WinGetProcess($g_aWinList[$i][1]), $g_aWinList[$i][1])
    	Next
    EndFunc
    Alles anzeigen


  • Windows Pfad öffnen, Dateien gleich nach Neuesten sortieren und große Symbole anzeigen

    • Bitnugger
    • 9. September 2016 um 14:26
    Zitat von RolandKan

    Und noch was an Bitnugger, ich finde die ironisch gemeinten Sprüche von dir unpassend,

    Sprüche? Ich bin wirklich sehr erstaunt, dass gleich mehrere meiner Sätze ironisch auf dich wirken... ich habe jedenfalls kein einziges Wort ironisch gemeint!

    Zitat von RolandKan

    auch wenn ich nicht gedacht hätte, dass man für so eine simple Aufgabe, 226 Zeilen braucht.

    Die Leer-/Debug-/Kommentar-Zeilen solltest du dann aber nicht mitzählen - es war auch nicht das Ziel, ein möglichst kurzes Script abzuliefern, sondern ein möglichst gut lesbares.


    Zitat von RolandKan

    und diese Online-Hilfen sind ja bevorzugt für Anfänger, ...

    Wer erzählt denn solchen Unfug?


    Zitat von RolandKan

    Auch du hast mal angefangen ...

    Ja natürlich habe auch ich mal angefangen... 1982 mit Commodore BASIC V2 auf dem C64, und da gab es noch kein Internet bzw. Online-Hilfen - das war eine völlig andere Welt!


    Eines ist jedenfalls sicher - für DICH werde ich nie wieder meine Zeit verschwenden!

  • Array crash dimension range exceeded

    • Bitnugger
    • 8. September 2016 um 17:21

    Ich denke mal, der Fehler tritt auf, weil du in Zeile 11 angegeben hast, dass du in $excludes[0] einen Counter haben willst, den du übrigens an keiner Stelle nutzt.

    Zitat von Kev

    _FileReadToArray(@ScriptDir & "\dependencies\excluded_services.txt", $excludes, 1) ;array count first element

    Wenn du dann noch Zeile 29 mit Zeile 30 vertauscht, dann funktioniert es.

    Spoiler anzeigen
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=serviceadv.exe
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    #include <File.au3>
    
    
    Global $excludes, $temp[0], $exit[0]
    
    
    Global $iRet = _FileReadToArray(@ScriptDir & "\dependencies\excluded_services.txt", $excludes, 0) ;$FRTA_NOCOUNT (0) - array is 0-based use UBound() to get size
    
    
    $objWMIService = ObjGet('winmgmts:\\.\root\cimv2')
    $colItems = $objWMIService.ExecQuery("Select * From Win32_Service WHERE Startmode='auto'") ;alle Services im Automatisch Mode
    
    
    If IsObj($colItems) Then
    	For $objItem In $colItems
    		If $objItem.State <> "Running" Then ; Wenn START_TYPE = 2 (AUTO_START) und nicht STATE = 4 (RUNNING)
    			_ArrayAdd($temp, $objItem.Displayname) ;safe in Array $temp
    		Else
    			_ArrayAdd($exit, $objItem.Displayname) ; alle anderen in $exit
    		EndIf
    
    
    	Next
    EndIf
    
    
    For $x = UBound($excludes) - 1 To 0 Step -1
    	For $s = UBound($temp) - 1 To 0 Step -1
    		If $temp[$s] <> $excludes[$x] Then ContinueLoop
    		_ArrayDelete($temp, $s)
    	Next
    Next
    
    
    For $j = 0 To UBound($temp) - 1
    	$code = "2"
    	ConsoleWrite($code & "|" & $temp[$j] & " ist down !" & @LF)
    	If $j == UBound($temp) - 1 Then
    		Exit ($code)
    	EndIf
    Next
    
    
    $allitems = UBound($exit)
    If $temp = @error Then
    	$code = 0
    	ConsoleWrite($code & "|Alle " & $allitems & " Services im automatisch Status laufen!" & @LF)
    	Exit ($code)
    EndIf
    Alles anzeigen
  • Seit wie vielen Stunden hocke ich heute am PC?

    • Bitnugger
    • 8. September 2016 um 07:16

    Für die Hardcore-User... :D

    AutoIt
    #include <WinAPIMisc.au3>
    #include <WinAPISys.au3>
    
    
    Global $sMsg = _WinAPI_StrFromTimeInterval(_WinAPI_GetTickCount())
    Global $aSplit = StringSplit($sMsg, '. ', $STR_ENTIRESPLIT)
    Global $iHours = Number($sMsg)
    If $iHours > 23 Then
    	Global $iDays = Int($iHours/24), $iMod = Mod($iHours, 24), $sDays = $iDays > 1 ? ' Tage ' : ' Tag '
    	$sMsg &= @CRLF & 'Das sind: ' & $iDays & $sDays & $iMod & ' Std. ' & $aSplit[2] & ' ' & $aSplit[3]
    EndIf
    MsgBox(64, "PC-Ontime v 1.0.0.0", "Computername: "& @ComputerName & @CRLF & "Benutzername: "& @UserName& @CRLF & "Akt. Datum: "& @MDAY &'.' & @MON &'.' & @YEAR & @CRLF & "PC OnTime: " & $sMsg)
    Alles anzeigen
  • Windows Pfad öffnen, Dateien gleich nach Neuesten sortieren und große Symbole anzeigen

    • Bitnugger
    • 8. September 2016 um 05:46
    Zitat von RolandKan

    laut der online Hilfe von Autoit, kann man "run" keine Parameter mitgeben

    Oh ja, das stimmt... ist mir noch gar nicht aufgefallen, weil es für mich selbstverständlich war, da die Funktion sonst ja nur bedingt Sinn macht. Nichtsdestotrotz ist dies eine wirklich gemeine Unterschlagung in der Hilfe und sollte dringend korrigiert werden. <X

    Nun, jetzt weißt du aber, dass du mit der Funktion Run() und ShellExecute() Befehle - genauso wie in der Eingabeaufforderung - mit Parametern aufrufen kannst.


    Funktion Run()
    opt_flag [optional] Steuert verschiedene Optionen, die die Interaktion zwischen Parent- und Child-Prozess betreffen (STDIO). Parent-Prozess = dein Script, dass die Run() Funktion aufruft, Child-Prozess = der mit Run() gestartete Befehl.


    Zitat von RolandKan

    Kannst du mir da nicht vielleicht ein Tipp geben?

    Wollte gerade sagen, dass ich es auch noch nicht so lange mit AutoIt treibe, doch ein Blick in mein Profil sagt anderes: 22. Februar 2009. :D

    Ok, versuchen wir es mal...

    Ich sehe zwei Möglichkeiten, dein Vorhaben zu realisieren.
    1.) Nach Starten des Explorers änders du mit Control-Befehlen die Ansicht entsprechend deinen Wünschen.
    2.) Du erstellst eine eigene GUI mit einem ListView in Icon-Ansicht und besorgst dir alle nötigen Daten dafür selbst.

    Für dich kommt wohl nur die erste Option infrage... doch auch diese dürfte derzeitig eine unknackbare Nuss für dich sein, da deine AutoIt-Kenntnisse dafür sicher nicht ausreichen, was an deiner Fragestellung erkennbar ist.

    Deshalb habe ich dir ausnahmsweise mal auf die Schnelle ein kleines Demo-Script erstellt, dass diese Aufgabe erledigen sollte - getestet unter Windows 10 x64.

    Mehr Infos als Kommentar im Script.

    Explorer Ansicht und Sortierung ändern
    AutoIt
    #Region ;************ Includes ************
    #include <Array.au3>
    #include <WinAPISys.au3>
    #EndRegion ;************ Includes ************
    
    
    ;-- TIME_STAMP   2016-09-08 05:41:19   v 0.1
    
    
    #cs
    	*****************************************************************************************
    	_ModifiedDate(), _Ascending(), _Descending()
    	*****************************************************************************************
    	Je nach Inhalt des angezeigten Verzeichnisses (Bilder, Dokumente, Videos, Audio, unsw.)
    	variieren die Klick-Koordinaten für das Sortieren-Menü (siehe Bild),
    	weil jeweils spezifische Menü-Einträge angezeigt werden!
    
    
    	Diese Demo funktioniert mit dem Verzeichnis (Sortieren-Menü) --> @MyDocumentsDir
    
    
    	Tipp: Vor dem Testen sollte die Ansicht für das Verzeichnis im Explorer manuell auf die
    		  Default-Werte gesetzt werden, weil der Explorer sich die geänderte Ansicht merkt.
    
    
    	Hehe - viel Spaß damit! ;-)
    	*****************************************************************************************
    #ce
    
    
    #NoTrayIcon
    
    
    Opt("MustDeclareVars", 1)
    
    
    ;_ToolTip()	; Debug
    
    
    Global $sFolder = @MyDocumentsDir, $iMsgBoxAnswer, $iSleep = 500
    
    
    Global $aWinList = WinList('[CLASS:CabinetWClass]')
    Global $iExplorerInstances = $aWinList[0][0]
    
    
    ; Explorer mit Pfadangabe öffnen - ShellExecute() oder Run() - beides geht...
    
    
    ; ShellExecute($sFolder)
    ; If @error Then Exit MsgBox(0, @ScriptName, "Fehler: ShellExecute($sFolder))") + 1
    
    
    Run(@WindowsDir & '\explorer.exe /N, ' & $sFolder, '', @SW_SHOW)
    If @error Then Exit MsgBox(0, @ScriptName, "Fehler: Run(@WindowsDir & '\explorer.exe /N, ' & $sFolder, '', @SW_SHOW)") + 1
    
    
    Global $iMyExplorerInstance = 1 ; Unsere Explorer-Instanz sollte immer 1 sein
    Global $hWnd = WinWait('[CLASS:CabinetWClass; INSTANCE:' & $iExplorerInstances + 1 & ']', '', 10) ; 10 Sekunden warten
    If $hWnd = 0 Then Exit MsgBox(0, @ScriptName, "Fehler: WinWait('[CLASS:CabinetWClass; INSTANCE:...')") + 2
    
    
    $aWinList = WinList('[CLASS:CabinetWClass]')
    ;_ArrayDisplay($aWinList, '$aWinList')
    If $aWinList[0][0] = 0 Then Exit MsgBox(0, @ScriptName, "Fehler: $aWinList[0][0] = 0") + 3
    
    
    Global $hMyExplorerTitle  = $aWinList[$iMyExplorerInstance][0] ; Dies ist der Window-Titel unserer Explorer-Instanz
    Global $hMyExplorerWindow = $aWinList[$iMyExplorerInstance][1] ; Dies ist das Window-Handle unserer Explorer-Instanz
    
    
    ; Explorer-Window aktivieren
    WinActivate($hMyExplorerWindow)
    WinSetState($hMyExplorerWindow, '', @SW_MAXIMIZE)	; So stellen wir sicher, dass alle Controls sichtbar sind!
    Sleep(2000)
    
    
    Global $hMyExplorerAdress = ControlGetHandle($hMyExplorerWindow, '', '[CLASS:ToolbarWindow32; INSTANCE:3]')
    Global $sMyExplorerAdress = ControlGetText('', '', $hMyExplorerAdress)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iMyExplorerInstance --> " & $iMyExplorerInstance & @LF)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hMyExplorerTitle    --> " & $hMyExplorerTitle & @LF)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hMyExplorerWindow   --> " & $hMyExplorerWindow & @LF)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hMyExplorerAdress   --> " & $hMyExplorerAdress & @LF)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sMyExplorerAdress   --> " & $sMyExplorerAdress & @LF)
    
    
    Global $hNetUIHWND = _GetNetUIHWND() ; Global, weil wir den mehrmals brauchen
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hNetUIHWND --> " & $hNetUIHWND & @LF)
    
    
    _BigSymbols()
    _ModifiedDate()	; Default: Descending
    Sleep(1000)
    _Ascending()
    Sleep(1000)
    _Descending()
    
    
    WinSetState($hMyExplorerWindow, '', @SW_RESTORE)
    
    
    Exit 0
    
    
    ; Ansicht auf große Symbole umstellen
    Func _BigSymbols()
    	If _MsgBoxAnswer('_BigSymbols() - Ansicht auf große Symbole umstellen?') = False Then Return
    	BlockInput(1) ; Disable user input
    
    
    	; 220, 42	Ansicht öffnen
    	ConsoleWrite('Ansicht öffnen                        = ' & ControlClick('', '', $hNetUIHWND, 'primary', 1, 220, 42) & @CRLF) ; Default: 'primary' = 'left'
    	Sleep($iSleep)
    
    
    	; Local $hNetUIHWND2 = _GetNetUIToolWindow(1) ; wenn @error, dann Exit...
    	; ; 418, 112	Ansicht "Mehr" - falls Window zu klein ist, um alle Optionen anzuzeigen
    	; ConsoleWrite('Ansicht "Mehr"                        = ' & ControlClick('', '', $hNetUIHWND2, 'primary', 1, 418, 112) & @CRLF)
    	; Sleep($iSleep)
    
    
    	Local $hNetUIHWND2 = _GetNetUIToolWindow(1) ; wenn @error, dann Exit...
    	; 420, 20	Ansicht auf "Große Symbole" umstellen
    	ConsoleWrite('Ansicht auf "Große Symbole" umstellen = ' & ControlClick('', '', $hNetUIHWND2, 'primary', 1, 420, 20) & @CRLF)
    	Sleep($iSleep)
    
    
    	BlockInput(0) ; Enable user input
    EndFunc  ;==>_Grosse_Symbole
    
    
    ; Sortieren nach Änderungsdatum - switcht die aktuelle Sortierung: "Aufsteigend --> Absteigend" bzw. "Absteigend --> Aufsteigend"
    ; Default = "Aufsteigend"
    Func _ModifiedDate()
    	If _MsgBoxAnswer('_ModifiedDate() - Sortieren nach Änderungsdatum?' & @CRLF & _
    		'"Absteigend --> Aufsteigend" bzw. "Aufsteigend --> Absteigend"') = False Then Return
    	BlockInput(1) ; Disable user input
    
    
    	; 220, 42	Ansicht öffnen
    	ConsoleWrite('Ansicht öffnen                        = ' & ControlClick('', '', $hNetUIHWND, 'primary', 1, 220, 42) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND2 = _GetNetUIToolWindow(1)
    	; 680, 22	Sortieren nach
    	ConsoleWrite('Sortieren nach                        = ' & ControlClick('', '', $hNetUIHWND2, 'primary', 1, 680, 22) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND3 = _GetNetUIToolWindow(1)
    	; 80, 40	Änderungsdatum
    	ConsoleWrite('Änderungsdatum                        = ' & ControlClick('', '', $hNetUIHWND3, 'primary', 1, 80, 40) & @CRLF)
    	Sleep($iSleep)
    
    
    	BlockInput(0) ; Enable user input
    EndFunc  ;==>Sortieren_nach
    
    
    ; A --> Z
    Func _Ascending()
    	If _MsgBoxAnswer('_Ascending() - aktuelle Sortierung ändern? A --> Z') = False Then Return
    	BlockInput(1) ; Disable user input
    
    
    	; 220, 42	Ansicht öffnen
    	ConsoleWrite('Ansicht öffnen                        = ' & ControlClick('', '', $hNetUIHWND, 'primary', 1, 220, 42) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND2 = _GetNetUIToolWindow(1)
    	; 680, 22	Sortieren nach
    	ConsoleWrite('Sortieren nach                        = ' & ControlClick('', '', $hNetUIHWND2, 'primary', 1, 680, 22) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND3 = _GetNetUIToolWindow(1)
    	; 72, 204	Aufsteigend
    	ConsoleWrite('Sortieren --> Aufsteigend             = ' & ControlClick('', '', $hNetUIHWND3, 'primary', 1, 72, 204) & @CRLF)
    	Sleep($iSleep)
    
    
    	BlockInput(0) ; Enable user input
    EndFunc  ;==>_Aufsteigend
    
    
    ; Z --> A
    Func _Descending()
    	If _MsgBoxAnswer('_Descending() - aktuelle Sortierung ändern? Z --> A') = False Then Return
    	BlockInput(1) ; Disable user input
    
    
    	; 220, 42	Ansicht öffnen
    	ConsoleWrite('Ansicht öffnen                        = ' & ControlClick('', '', $hNetUIHWND, 'primary', 1, 220, 42) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND2 = _GetNetUIToolWindow(1)
    	; 680, 22	Sortieren nach
    	ConsoleWrite('Sortieren nach                        = ' & ControlClick('', '', $hNetUIHWND2, 'primary', 1, 680, 22) & @CRLF)
    	Sleep($iSleep)
    
    
    	Local $hNetUIHWND3 = _GetNetUIToolWindow(1)
    	; 72, 230	Absteigend
    	ConsoleWrite('Sortieren --> Absteigend              = ' & ControlClick('', '', $hNetUIHWND3, 'primary', 1, 72, 230) & @CRLF)
    	Sleep($iSleep)
    
    
    	BlockInput(0) ; Enable user input
    EndFunc  ;==>_Absteigend
    
    
    ; Handle für Control "Ansicht öffnen" besorgen - wenn @error, dann Exit...
    Func _GetNetUIHWND()
    	Local $bVisible = False ; auch die nicht sichtbaren anzeigen
    	Local $aControls = _WinAPI_EnumChildWindows($hMyExplorerWindow, $bVisible)
    	;_ArrayDisplay($aControls, '$aControls')
    	Local $iIndex = _ArraySearch($aControls, 'NetUIHWND')
    	If @error Then Exit MsgBox(0, @ScriptName, "Fehler: _WinAPI_EnumChildWindows($hMyExplorerWindow, $bVisible)") + 4
    
    
    	Return $aControls[$iIndex][0]
    EndFunc  ;==>_GetNetUIHWND
    
    
    ; Handle für Control ... besorgen - wenn @error, dann Exit...
    Func _GetNetUIToolWindow($iInstance)
    	Local $aWinList = WinList('[CLASS:Net UI Tool Window]')
    	If @error Then Exit MsgBox(0, @ScriptName, "Fehler: WinList('[CLASS:Net UI Tool Window]')") + 5
    
    
    	If $aWinList[0][0] < $iInstance Then
    		Exit MsgBox(0, @ScriptName, "Fehler: $aWinList[0][0] < $iInstance" & @CRLF & _
    			'$aWinList[0][0] = ' & $aWinList[0][0] & @CRLF & '$iInstance = ' & $iInstance) + 6
    		Sleep($iSleep)
    		$aWinList = WinList('[CLASS:Net UI Tool Window]')
    		If @error Then Exit MsgBox(0, @ScriptName, "Fehler: WinList('[CLASS:Net UI Tool Window]')") + 88
    		_ArrayDisplay($aWinList, '$aWinList - 2')
    	EndIf
    	Local $hNetUIToolWindow = $aWinList[$iInstance][1]
    
    
    	Local $bVisible = False ; auch die nicht sichtbaren anzeigen
    	Local $aControls = _WinAPI_EnumChildWindows($hNetUIToolWindow, $bVisible)
    	If @error Then Exit MsgBox(0, @ScriptName, "Fehler: _WinAPI_EnumChildWindows($hNetUIToolWindow, $bVisible)") + 7
    	Local $iIndex = _ArraySearch($aControls, 'NetUIHWND')
    	If @error Then Exit MsgBox(0, @ScriptName, "Fehler: _ArraySearch($aControls, 'NetUIHWND')") + 8
    
    
    	Return $aControls[$iIndex][0]
    EndFunc  ;==>_GetNetUIToolWindow
    
    
    Func _ToolTip()
    	While 1
    		Local $aWinList = WinList('[CLASS:Net UI Tool Window]')
    		ToolTip(_ArrayToString($aWinList, @CRLF), 100, 100)
    		Sleep(500)
    	WEnd
    	Exit
    EndFunc
    
    
    Func _MsgBoxAnswer($sMsg)
    	$iMsgBoxAnswer = MsgBox(262211, @ScriptName, $sMsg)
    	Select
    		Case $iMsgBoxAnswer = 6 ;Yes
    			Return True
    		Case $iMsgBoxAnswer = 7 ;No
    			Return False
    		Case $iMsgBoxAnswer = 2 ;Cancel
    			Exit 0
    	EndSelect
    EndFunc
    Alles anzeigen

    Klick-Koordinaten.png

  • Windows Pfad öffnen, Dateien gleich nach Neuesten sortieren und große Symbole anzeigen

    • Bitnugger
    • 6. September 2016 um 17:01
    Zitat von RolandKan

    Die Autoit-Hilfe, ist ziemlich unbrauchbar, da da nicht mal aufgelistet wird, welche Parameter zu Verfügung stehen.

    Die optionalen Parameter werden dem Programm von AutoIt beim Aufruf übergeben. Was das Programm mit den Parametern anstellt und/oder ob es diese versteht, interessiert AutoIt nicht die Bohne.

    In deinem Fall wäre die korrekte Frage, welche Parameter der Windows Explorer (explorer.exe) akzeptiert... den du mit Run() aufrufen kannst.

    Run(@WindowsDir & "\explorer.exe /N, " & "C:\Users\Roland\Documents", "", @SW_SHOW)

    Befehlszeilenoptionen für Windows-Explorer

  • Array variable has incorrect number... - verstehe es nicht

    • Bitnugger
    • 3. September 2016 um 08:29

    Bei Fehlern mit Arrays ist die Funktion UBound() dein bester Freund...

    Spoiler anzeigen
    AutoIt
    ;-- TIME_STAMP   2016-09-03 08:31:54   v 0.1
    
    
    #include <Array.au3>
    #include <Excel.au3>
    
    
    Global $aDatum, $Buffer = "", $sKontofile = @ScriptDir & "\Tabelle.csv", $oExcel, $oWorkbook
    
    
    ; Create application object and open an example workbook
    $oExcel = _Excel_Open()
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) + 1
    
    
    $oWorkbook = _Excel_BookOpen($oExcel, $sKontofile, False, True)
    If @error Then
    	$sKontofile = FileOpenDialog("", @ScriptDir, "(*.csv)")
    	If @error Then
    		_Excel_Close($oExcel)
    		Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & $sKontofile & '."' & @CRLF & "@error = " & @error & ", @extended = " & @extended) + 2
    	EndIf
    	$oWorkbook = _Excel_BookOpen($oExcel, $sKontofile, False, True)
    	If @error Then
    		_Excel_Close($oExcel)
    		Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & $sKontofile & '."' & @CRLF & "@error = " & @error & ", @extended = " & @extended) + 3
    	EndIf
    EndIf
    
    
    $aDatum = _Read_Excel("A:A")
    _ShowResult($aDatum)
    Exit
    
    
    Func _Read_Excel($sRange)
    	Local $vResult = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.ActiveSheet.Usedrange.Columns($sRange), 1, True)
    	If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 3", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended) + 4
    	Return $vResult
    EndFunc   ;==>_Read_Excel
    
    
    Func _ShowResult(ByRef $aArray)
    	Local $sUBound
    	;_ArrayDisplay($aArray)
    	$sUBound  = StringFormat('%s %04i %s', 'The Array $aArray has ', UBound($aArray, $UBOUND_DIMENSIONS), ' DIMENSIONS' & @CRLF)
    	$sUBound &= StringFormat('%s %04i %s', 'The Array $aArray has ', UBound($aArray, $UBOUND_ROWS), ' ROWS' & @CRLF)
    	$sUBound &= StringFormat('%s %04i %s', 'The Array $aArray has ', UBound($aArray, $UBOUND_COLUMNS), ' COLUMNS' & @CRLF)
    	Switch UBound($aArray, $UBOUND_DIMENSIONS)
    		Case 0
    			MsgBox(0, $sKontofile, _
    				'Lieber Herr Kollege, die übergebene Variable ist kein Array!' & @CRLF & @CRLF & _
    				'Die übergebene Variable ist vom Typ: ' & VarGetType($aArray))
    		Case 1	; Tritt niemals ein... auch wenn $sRange nur eine Zelle umfasst, da eine Tabelle mindestens 2 Dimensionen hat.
    			MsgBox(0, $sKontofile, '1D - Bla bla bla...')
    		Case 2
    			MsgBox(0, $sKontofile, _
    				'The value in cell ' & Chr(65 + 0) & Chr(48 + 5) & ' is "' & $aDatum[5][0] & '"' & @CRLF & @CRLF & _
    				'Hm, the three @TABs at the end of the cell are wanted?' & @CRLF & @CRLF & _
    				$sUBound)
    		Case 3	; Das wäre dann eine 3D-Matrix...
    			MsgBox(0, $sKontofile, '3D - Bla bla bla...')
    	EndSwitch
    EndFunc   ;==>_ShowResult
    Alles anzeigen
  • Ein Process - unterschiedliche PID's

    • Bitnugger
    • 3. September 2016 um 02:33

    Schaue dir mal an, was ich hier für Dich gebastelt habe...

    Spoiler anzeigen
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\..\Icons\Burning.ico
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    ;-- TIME_STAMP   2016-09-03 02:19:45   v 1.1
    
    
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <Misc.au3>
    #include <Constants.au3>
    #include <WinAPI.au3>
    #include <WinAPIProc.au3>
    
    
    #NoTrayIcon
    
    
    Opt("MustDeclareVars", 1)
    Opt("TrayIconDebug", 1)
    Opt("WinWaitDelay", 500)
    Opt("WinTitleMatchMode", 2)
    
    
    Local $hWnd = WinGetHandle('[TITLE:Program Manager]')
    Local $sClassName = _WinAPI_GetClassName($hWnd)
    ConsoleWrite('! ClassName der ersten mit Windows gestarten Explorer-Instanz: ' & $sClassName & @CRLF)
    ConsoleWrite('! ProcessName = ' & _WinAPI_GetProcessName(WinGetProcess($hWnd)) & @CRLF)
    
    
    Local $sFolder = @HomeDrive & @HomePath & '\DeskSub\Burning', $width = 800, $hight = 480
    Local $hGUI = GUICreate($sFolder, $width, $hight), $msg
    
    
    Run(@WindowsDir & "\explorer.exe /N, " & $sFolder, "", @SW_HIDE)
    If @error Then Exit MsgBox(0, '', 'Fehler: Run() zickt mal wieder rum...') + 1
    Local $iMyExplorerInstance = WinList('[CLASS:CabinetWClass]')[0][0] + 1 ; Hier bekommen wir die Anzahl der bereits geöffneten Instanzen - und + 1 ist dann unsere Instanz
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iMyExplorerInstance --> " & $iMyExplorerInstance & @LF)
    Local $hChild = WinWait('[CLASS:CabinetWClass; INSTANCE:' & $iMyExplorerInstance & ']', '', 10) ; Dies ist unser Explorer-Window
    If $hChild = 0 Then Exit MsgBox(0, '', 'Fehler: Explorer wurde nicht gestartet...') + 2
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $hChild              --> " & $hChild & @LF)
    Local $iPID = WinGetProcess($hChild) ; PID von unserer Explorer-Instanz holen
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iPID                --> " & $iPID & @LF)
    $sClassName = _WinAPI_GetClassName($hChild)
    ConsoleWrite('! ClassName der von uns gestarteten Explorer-Instanz: ' & $sClassName & @CRLF)
    ConsoleWrite('! ProcessName = ' & _WinAPI_GetProcessName($iPID) & @CRLF)
    
    
    Local $EXTSTYLE = _WinAPI_GetWindowLong($hChild, $GWL_WNDPROC)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $EXTSTYLE            --> " & $EXTSTYLE & @LF)
    Local $iRes = _WinAPI_SetWindowLong($hChild, $GWL_EXSTYLE, BitOR($EXTSTYLE, $WS_EX_TOOLWINDOW, $WS_EX_MDICHILD)) ; Change it to a tool window and set it as a child window included in its parent window (simulation not real MDI).
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iRes                --> " & $iRes & @LF)
    $iRes = _WinAPI_SetParent($hChild, $hGUI) ; Changes the parent window of the specified child window
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iRes                --> " & $iRes & @LF)
    ; Send('{LWIN}{UP}') 	; Explorer-Windows können (seit Vista?) via Send() nur mit "Windows key + Up arrow" maximiert werden.
    ; Sleep(100)			; Doch wofür gibt es die Funktion WinSetState()?
    ; WinSetState($hChild, '', @SW_SHOW + @SW_MAXIMIZE) ; Explorer-Window sichtbar machen und maximieren
    WinSetState($hChild, '', @SW_SHOW) ; Explorer-Window sichtbar machen
    
    
    WinMove($hChild, "", 0, 0, $width, $hight) ; Send() und @SW_MAXIMIZE sind hiermit aber überflüssig!
    GUISetState(@SW_SHOW, $hGUI)
    WinActivate($hGUI)
    
    
    While 1
    	$msg = GUIGetMsg()
    	If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    	Sleep(10)
    WEnd
    
    
    ProcessClose($iPID) ; Diese Funktion führt zum gewünschten Resultat  ;-)
    GUIDelete($hGUI)
    Exit 0
    Alles anzeigen
  • WindowsForms10 Daten aus Tabelle extrahieren

    • Bitnugger
    • 28. August 2016 um 22:12

    Das UI Spy-Tool ist veraltet...
    https://msdn.microsoft.com/de-de/library/…(v=vs.110).aspx

    Teste das mal...

    AutoIt
    #include <DotNetIdentification.au3>
    
    
    Local $hCtrl = NET_ControlGetHandleByName('DUMMY', '', 'm_grid')
    Local $sText = ControlGetText('', '', $hCtrl)
    ConsoleWrite($sText & @CRLF)

    Dateien

    DotNetIdentification.au3 9,06 kB – 264 Downloads
  • sysprep.exe Fenster verschieben

    • Bitnugger
    • 18. August 2016 um 05:36
    Zitat von Sumale.my

    $Hwnd = WinGetHandle('[CLASS:#32770]','WindowsActive')

    In der Hilfe steht:

    WinGetHandle ( "title" [, "text"] )

    Du suchst also ein Fenster mit der Klasse '#32770' und dem Text 'WindowsActive'?

    Wenn ich dich aber richtig verstanden habe, ist 'WindowsActive' der Titel.

    Dann sollte dein Befehl so aussehen:

    AutoIt
    $hWnd = WinGetHandle('[CLASS:#32770; TITLE:WindowsActive]')
  • Liegen zwei Partitionen auf gleicher Festplatte?

    • Bitnugger
    • 16. August 2016 um 15:59
    Zitat von Weisgarnix

    Ich möchte irgendwie ermitteln, ob zwei Paritionen (C: und D:) auf der gleichen Festplatte liegen.

    Da schreibt er es doch in die erste Zeile, was genau er will... und da hat @gmmg eine wirklich gute Info zu gegeben.

  • AlignComment richtet Kommentare aus Update 13.08.2016

    • Bitnugger
    • 15. August 2016 um 22:05
    Zitat von Andy

    ;The Script should be placed in the Scite-Directory\AlignComment\AlignComment.au3

    Hm, das ist aber keine sichere Heimat für eigene Scripte, denn beim nächsten Update ist es doch futsch...

    Nachtrag:

    Bei mir gab es keinen Registry-Schlüssel für Tidy... habe ihn aber nun angelegt - und wieder mal ist es eine '0', die Ärger macht. ;)

    Position55.png

  • Liegen zwei Partitionen auf gleicher Festplatte?

    • Bitnugger
    • 15. August 2016 um 07:16

    Sehr schön - allerdings stimmen bei mir die Plattennummern nicht, da ich 4 Platten an einen zweiten HDD-Controller angeschlossen habe, den ich als Steckkarte eingebaut habe.


  • Autoit terminated - trotzdem sauber beenden?

    • Bitnugger
    • 14. August 2016 um 09:13

    Da fallen mir spontan drei Möglichkeiten ein...

    • eine Aufgabe im Taskplaner erstellen
    • einen Dienst im Hintergrund laufen lassen
    • du lässt generell einen zweiten Task im Hintergrund laufen, der auf solche Dinge achtet

    Bei mir läuft ständig ein kleines Tool im Hintergrund, welches quasi als Handlanger für viele andere Tools die Drecksarbeit erledigt und diese auch mit wichtigen Infos versorgt. Wird z. B. FileZilla Client/Server gestartet, lade ich damit dann ein spezielles Tool, dass zuerst einmal ein paar Farben im FZ-Server ändert, da ich da sonst mit meinem dunklen Windows-Theme nicht viel sehen kann. Dann bleibt es im Hintergrund und fängt bestimmte Tasten im FZ-Client ab, mit denen ich dann ein paar nette Features integriert habe - so kann ich damit z. B. direkt aus dem FZ-Client heraus einen markiertes Listview-Item auf Google/iMDB oder MoviePilot suchen. Da sich der FZ-Client leider keine Passphrasen für Schlüsselpaare merkt und ich dann täglich mehrmals bis zu 6 eingeben müsste, lade ich damit den PUTTY-PAGEANT und trage sie dann dort ein. Solche Sachen halt...

  • RunWait

    • Bitnugger
    • 13. August 2016 um 22:25
    Zitat von stefanwue

    Hier mal ein Bild der Ausgabe, läuft zwar nicht mit die Ausgabe aber am Ende steht es dann so da wie im Bild,

    Das liegt an pg_dump.exe, weil die erst eine Ausgabe macht, wenn alles fertig ist. Mit einem zusätzlichen Parameter kannst du die aber geschwätziger machen...

    -v
    --verbose

    Specifies verbose mode. This will cause pg_dump to output detailed object comments and start/stop times to the dump file, and progress messages to standard error.

    Zitat von stefanwue

    Kann man wenn alles durchgelaufen ist und das backup erzeugt wurde irgendwie noch hinschreiben in dieser Ausgabe daß das Backup erzeugt wurde ???

    Ja, indirekt gibt es da eine Möglichkeit...

    In &amp; Out
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;-- TIME_STAMP   2016-08-13 21:40:47
    #cs *************************************
    	Compile the script before you run it!
    #ce *************************************
    #Region    ;************ Includes ************
    #Include <AutoItConstants.au3>
    #Include <StringConstants.au3>
    #EndRegion ;************ Includes ************
    Local $iPID = Run(@ComSpec & " /k", 'm:', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
    StdinWrite($iPID, '"C:\Program Files\WinRAR\Rar.exe" lta "m:\In_and_Out.rar" && echo Wow, super - das Archiv ist OK! || echo Ops, da ist etwas schiefgelaufen...' & @CRLF)
    ; Calling StdinWrite without a second parameter closes the stream.
    StdinWrite($iPID)
    Local $sOutput = ''
    While 1
    	$sOutput &= ConsoleRead()
    	$sOutput &= StdoutRead($iPID) ; Read the Stdout stream of the PID returned by Run.
    	If @error Then ; Exit the loop if the process closes or StdoutRead returns an error.
    		ExitLoop
    	EndIf
    WEnd
    ConsoleWrite($sOutput & @CRLF)
    Exit
    Alles anzeigen

    In_and_Out.png

    Zitat von stefanwue

    könntest du mir vielleicht auch bei einem Wiederherstellen der Datenbank helfen ?????? also zurückspielen ?

    Dazu kann ich dir erst einmal diesen Link hier anbieten...
    http://www.zdnet.de/39136063/backu…-datenbanken/2/

  • Run() geht nicht mehr o.o

    • Bitnugger
    • 13. August 2016 um 06:24

    Wenn du gene eigene Extensionen benutzt, dann registriere sie doch einfach...

    Alienware

    AGA.png

  • sysprep.exe Fenster verschieben

    • Bitnugger
    • 13. August 2016 um 01:54
    Zitat von Sumale.my

    Wäre es auch möglich, zusätzlich ein zweites Fenster, Namens "WindowsActive" nach links oder oben rechts zu verschieben?

    Ja sicher doch... du kannst so ziemlich alle Fenster verschieben, insofern es 'echte Fenster' sind, die von Windows erzeugt wurden. Dazu brauchst du lediglich die korrekten Werte, damit es eindeutig identifiziert werden kann.
    Fenster haben allerdings keinen Namen, sondern einen Titel und eine Klasse - und Instanzen.

    Zitat von Sumale.my

    WinWait("classname=Systemvorbereitungsprogramm 3.14")

    So geht das allerdings nicht... in der Hilfe findest du zahlreiche Beispiele dafür, wie es richtig gemacht wird: Window Titles and Text (Advanced)

    Zitat von Sumale.my

    >>>> Window <<<<
    Title: Systemvorbereitungsprogramm 3.14
    Class: #32770

    Hier steht es doch... erstens steht dort nicht "classname=", sondern "Class:", zweitens willst du dem System einen Fenstertitel als Klasse andrehen... sooo kann das natürlich nicht funktionieren!
    Desweiteren musst du diese speziellen Tags in [ ] setzen...

    AutoIt
    WinWait("[TITLE:Systemvorbereitungsprogramm 3.14]")
    ;
    ; so ist besser... je mehr Angaben, umso sicherer ist es, dass wir das richtige Fenster erwischen.
    WinWait("[TITLE:Systemvorbereitungsprogramm 3.14; CLASS:#32770]")
    ;
    ; so ginge es, wenn es mehre Fenster mit gleichem Titel und Klasse gibt...
    WinWait("[TITLE:Systemvorbereitungsprogramm 3.14; CLASS:#32770; INSTANCE:2]")
  • sysprep.exe Fenster verschieben

    • Bitnugger
    • 10. August 2016 um 06:12
    Zitat von autoBert

    #include <WinAPILocale.au3>

    Das wird in deinem Script doch gar nicht benötigt.

    Zitat von autoBert

    If $iFound<>-1 Then $sText=$aLang[$iFound][$iFound]

    Hier hat der Fehlerteufel zugeschlagen.


    Ich denke mal, so ist es richtig...

    AutoIt
    If $iFound<>-1 Then $sText=$aLang[$iFound][1]
  • Computer Startuptime auslesen und in Array schreiben

    • Bitnugger
    • 10. August 2016 um 03:01

    Habe da zwei nette Scripte gefunden und ein paar Kleinigkeiten daran geändert...

    Uptime by GaryFrost
    AutoIt
    ;-- TIME_STAMP   2016-08-10 02:51:59   v 0.1
    
    
    ; https://www.autoitscript.com/forum/topic/20970-how-to-get-the-computer-uptime-with-autoit/
    
    
    ;#RequireAdmin
    
    
    #NoTrayIcon
    
    
    Opt("MustDeclareVars", 1)
    
    
    #include <Date.au3>
    #include <Array.au3>
    
    
    Global $wbemFlagReturnImmediately = 0x10
    Global $wbemFlagForwardOnly = 0x20
    Global $colItems = ""
    Global $strComputer = "localhost"
    
    
    Global $Output = "", $aOutput[0], $aArray[0]
    $Output &= "Computer: " & $strComputer & @CRLF
    $Output &= "==========================================" & @CRLF
    
    
    Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
    		$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    
    If IsObj($colItems) Then
    	For $objItem In $colItems
    		Global $LastBootUp = WMIDateStringToDate($objItem.LastBootUpTime)
    		Global $LocalDateTime = WMIDateStringToDate($objItem.LocalDateTime)
    
    
    		$Output &= "In Years: " & _DateDiff("Y", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Months: " & _DateDiff("M", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Weeks: " & _DateDiff("W", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Days: " & _DateDiff("D", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Hours: " & _DateDiff("h", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Minutes: " & _DateDiff("n", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "In Seconds: " & _DateDiff("s", $LastBootUp, $LocalDateTime) & @CRLF
    		$Output &= "LastBootUpTime: " & $LastBootUp & @CRLF
    		$Output &= "LocalDateTime: " & $LocalDateTime & @CRLF
    		$aArray = StringSplit($Output, @CRLF, $STR_ENTIRESPLIT + $STR_NOCOUNT)
    		_ArrayConcatenate($aOutput, $aArray)
    		If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
    		$Output = ""
    	Next
    Else
    	MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_OperatingSystem")
    EndIf
    
    
    ;ReDim $aOutput[UBound($aOutput)][2]
    _ArrayColInsert($aOutput, 1)
    Local $iPos = 0
    For $i = 0 To UBound($aOutput) -1 Step 1
    	$iPos = StringInStr($aOutput[$i][0], ':')
    	If $iPos > 0 Then
    		$aArray = StringSplit($aOutput[$i][0], ':', $STR_NOCOUNT)
    		$aOutput[$i][0] = $aArray[0]
    		$aOutput[$i][1] = $aArray[1]
    	EndIf
    Next
    
    
    _ArrayDisplay($aOutput, '$aOutput')
    
    
    Func WMIDateStringToDate($dtmDate)
    	Return (StringMid($dtmDate, 1, 4) & "/" & _
    			StringMid($dtmDate, 5, 2) & "/" & _
    			StringMid($dtmDate, 7, 2) & _
    			" " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
    EndFunc   ;==>WMIDateStringToDate
    Alles anzeigen
    Uptime by UEZ
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Uptime.ico
    #AutoIt3Wrapper_Outfile=Uptime.exe
    #AutoIt3Wrapper_UPX_Parameters=--best --lzma
    #AutoIt3Wrapper_Change2CUI=y
    #AutoIt3Wrapper_Res_Description=Displays the uptime of a system
    #AutoIt3Wrapper_Res_Fileversion=0.8.2.0
    #AutoIt3Wrapper_Res_LegalCopyright=UEZ 2011-2012
    #AutoIt3Wrapper_Res_Language=1033
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%%scriptfile%_Obfuscated.au3"
    ;[obsolete] #AutoIt3Wrapper_Run_Obfuscator=y
    ;[obsolete] #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ #AutoIt3Wrapper_Icon=
    ;~ #AutoIt3Wrapper_Run_After=Upack.exe %out% -c6 -f273 -red
    
    
    ;-- TIME_STAMP   2016-08-10 03:00:47   v 0.1
    
    
    ;#RequireAdmin
    
    
    #NoTrayIcon
    
    
    Opt("MustDeclareVars", 1)
    
    
    #include <Date.au3>
    
    
    Global $g_sIP = @ComputerName, $g_aResult, $g_sSeconds, $objWMIService, $g_iPing, $g_colItems, $g_sUptime, $g_sVer = "v0.8.2.0 Build 2016-08-10"
    If $CmdLine[0] > 0 Then $g_sIP = $CmdLine[1]
    
    
    Switch $g_sIP
    	Case "/?", "/h", "/help", "-?", "-h", "-help"
    		Help()
    	Case @ComputerName, "127.0.0.1", "localhost", @IPAddress1, @IPAddress2, @IPAddress3, @IPAddress4
    		If @OSBuild < 6000 Then
    			$g_aResult = DllCall("kernel32.dll", "dword", "GetTickCount")
    			If @error Or Not IsArray($g_aResult) Then Exit ConsoleWrite(@LF & "An error has occured - unable to get uptime!" & @LF & @LF)
    		Else
    			$g_aResult = DllCall("kernel32.dll", "uint64", "GetTickCount64") ;only available on Vista+ os!
    			If @error Or Not IsArray($g_aResult) Then Exit ConsoleWrite(@LF & "An error has occured - unable to get uptime!" & @LF & @LF)
    		EndIf
    		$g_sSeconds = Sec_2_Time_Format(Floor($g_aResult[0] / 1000))
    	Case Else
    		$g_iPing = Ping($g_sIP, 1000)
    		If $g_iPing Then
    			$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!" & $g_sIP & "rootcimv2")
    			If @error Then Exit ConsoleWrite(@LF & "An error has occured - unable to get remote WMI connection!" & @LF & @LF)
    			$g_colItems = $objWMIService.ExecQuery("SELECT SystemUpTime FROM Win32_PerfFormattedData_PerfOS_System", "WQL", 0x30)
    			If IsObj($g_colItems) Then
    				For $objItem In $g_colItems
    					$g_sUptime = $objItem.SystemUpTime
    				Next
    			Else
    				Exit ConsoleWrite(@LF & "An error has occured - unable to get remote WMI data!" & @LF & @LF)
    			EndIf
    		Else
    			Exit ConsoleWrite(@LF & "An error has occured - unable to ping remote system " & $g_sIP & "!" & @LF & @LF)
    		EndIf
    		$g_sSeconds = Sec_2_Time_Format($g_sUptime)
    EndSwitch
    
    
    ConsoleWrite(@LF & "Uptime on " & $g_sIP & ": " & $g_sSeconds & @LF & @LF)
    
    
    Func Sec_2_Time_Format($iTime)
    	Local $iDays = 0
    	Local $iSeconds = Mod($iTime, 60)
    	Local $iMinutes = Mod(Int($iTime / 60), 60)
    	Local $iHours = Int($iTime / 60 ^ 2)
    	If $iHours > 23 Then
    		$iDays = Floor($iHours / 24)
    		$iHours -= $iDays * 24
    	EndIf
    	Return StringFormat("%01id %02i:%02i:%02i // ", $iDays, $iHours, $iMinutes, $iSeconds) & _DateAdd("s", -$iTime, _NowCalc())
    EndFunc   ;==>Sec_2_Time_Format
    
    
    Func Help()
    	ConsoleWrite(@LF & _
    			"Uptime " & $g_sVer & " by UEZ (modified by Bitnugger)" & @LF & @LF & _
    			"Usage: Uptime.exe [system]" & @LF & @LF & @LF & _
    			"Displays the uptime of a system whereas system can be an ip address or" & @LF & _
    			"a hostname (must be reachable!)." & @LF & @LF & _
    			"Uptime output display format is:" & @LF & _
    			"d hh:mm:ss // yyyy/mm/dd hh:mm:ss as system start time " & @LF & @LF & _
    			"Default system name is the computer name where it has been started when no" & @LF & _
    			"parameter was given." & @LF & @LF)
    	Exit
    EndFunc   ;==>Help
    Alles anzeigen

    Im Anhang noch das Icon...

    Dateien

    Uptime.rar 5,88 kB – 389 Downloads

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™