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. thewanderer

Beiträge von thewanderer

  • Datensicherung

    • thewanderer
    • 27. Februar 2016 um 18:44

    FileGetTime scheint echt nur sporatisch zu funktionieren. Hab grade mal folgendes getestet

    AutoIt
    #include <Date.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <Debug.au3>
    _test()
    func _test()
    Local $path = @HomeDrive & "\temp\rsync"
    $aFiles = _FileListToArray($path, "*", 0)
    
    
    	local $aFilesExt[$aFiles[0]][2] ; 2D Array erstellen
    	for $i = 1 to $aFiles[0]
    		$aFilesExt[$i - 1][0] = $aFiles[$i]
    		$aFilesExt[$i - 1][1] = FileGetTime($aFiles[$i], 0, 1)
    		next
    		_ArrayDisplay($aFilesExt)
    EndFunc
    Alles anzeigen

    In der ersten Spalte sollten ja die Dateinamen und in der 2. Spalte das Datum auftauchen.
    Ergebnis:

    Irgendwie ist der Wurm drin

  • Datensicherung

    • thewanderer
    • 27. Februar 2016 um 18:09

    Hab meine Funktion jetzt abgeändert, sollte also jetzt stimmen. Hab bewußt auch mal anderes Verzeichnis genommen

    AutoIt
    func _test_files()
    ;~Local $s_path = ((IniRead($ini, "Einstellungen", "dest1","")) & "\")
    Local $s_path = @HomeDrive & "\temp\"
    $aFiles = _FileListToArray($s_path, "*", 2)
    If @error = 4 Then
    		_test_copy()
    	Else
    		local $aFilesExt[$aFiles[0]][2] ; 2D Array erstellen
    		for $i= 1 to $aFiles[0]
    			$aFilesExt[$i-1][0] = $aFiles[$i]
    			$aFilesExt[$i-1][1] = FileGetTime($aFiles[$i], 0, 1)
    		next
    		_ArraySort($aFilesExt, 0, 0, 0, 1) ; Array sortieren
    		_ArrayDisplay($aFilesExt)
    
    
    
    
    		If $aFilesExt[0][1] > 2 Then
    			For $i = 1 To $aFilesExt[0][1] - 2
    				DirRemove($s_path & "\" & $aFilesExt[$i][0], 1)
    			Next
    		EndIf
    	_test_copy()
    EndIf
    EndFunc
    Alles anzeigen

    Ergebnis ist folgendes:

  • Datensicherung

    • thewanderer
    • 27. Februar 2016 um 15:01

    in $s_path steht nur C:\temp (nur ein Beispiel, ist in Wirklichkeit auf dem NAS). Er erstellt dort bei jeder Sicherung ein Verzeichnis Computername_DD_MM_YYYY. Allerdings liegen da auch Sicherungen anderer Rechner mit anderen Namen, deshalb die Abfrage mit Computername, sonst würde er generell die ältesten Verzeichnisse löschen. Hab es aber auch schon mit $aFiles = _FileListToArray(@HomePath, "*", 2) mit dem gleichen Ergebnis. Bei einigen Verzeichnissen steht ein datum dabei, bei anderen nicht.

    Das @Error = 4 hab ich drin, weil ja beim erstmaligen Aufruf der Sicherung noch keine Sicherung existiert und er deshalb abbrechen würde, bzw wenn man das Zielverzeichnis ändert und dort noch keine Sicherungen vorhanden sind

  • Datensicherung

    • thewanderer
    • 27. Februar 2016 um 12:28

    Hab jetzt auch mal in Zeile 79 noch nen Backslash eingefügt, macht aber auch keinen Unterschied :(
    $aFiles = _FileListToArray($s_path & "\", @ComputerName & "*", 2)

  • Datensicherung

    • thewanderer
    • 26. Februar 2016 um 23:27

    Ich bastel das Script ja auch, um mich in autoit reinzufummeln ;)
    Klappt ja soweit auch schon ganz gut, nur bei einer Sache häng ich grade fest.

    Spoiler anzeigen
    AutoIt
    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <GuiListBox.au3>
    #include <APIConstants.au3>
    #include <Array.au3>
    #include <Debug.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    
    
    Global $ini = @ScriptDir & "\datensicherung.ini"
    Global $sources = @ScriptDir & "\quellen.ini"
    Global $dest_select, $file, $aMod2
    
    
    
    
    $txtg1 = "Info"
    $txtg2 = "Pfad-Einstellungen"
    
    
    ; GUI Erstellen
    $Form1 = GuiCreate("Datensicherung", 350, 700, -1, -1, "")
    GUISetFont(9, 1000, 0, "Arial")
    $Group1 = GUICtrlCreateGroup($txtg1, 8, 4, 328, 60)
    
    
    ; ### Info ###
    ; Computernamen ausgeben
    GUICtrlCreateLabel("Computername:", 20, 30)
    GuiCtrlCreateLabel("" & @ComputerName & "" , 130, 30)
    
    
    ; ### Pfade ###
    $Group2 = GUICtrlCreateGroup($txtg2, 8, 70, 328, 590)
    ; Sicherungspfad
    ; Win
    $dest_path_win = GUICtrlCreateLabel(IniRead($ini, "Einstellungen", "dest1", ""), 20, 130, 300, 20) ;Label Destination-Pfad
    GUICtrlSetData($dest_select, $dest_path_win)
    ; RSync
    $dest_path_rs = GUICtrlCreateLabel(IniRead($ini, "Einstellungen", "dest2", ""), 20, 145, 300, 20) ;Label Destination-Pfad
    GUICtrlSetData($dest_select, $dest_path_rs)
    $btn_dest= GUICtrlCreateButton("Sicherung Ziel", 20, 95, 150, 25)
    
    
    ; Quelle
    $aSource_path = _GUICtrlListBox_Create($Form1, "", 20, 170, 310, 320)
    
    
    
    
    $btn_addfolder = GUICtrlCreateButton("Verzeichnis hinzufügen", 20, 560, 150, 25)
    $btn_delfolder = GUICtrlCreateButton("Verzeichnis entfernen", 175, 560, 150, 25)
    
    
    $btn_sload = GUICtrlCreateButton("Pfade aus Ini laden", 20, 590, 150, 25)
    $btn_start = GUICtrlCreateButton("Sicherung starten", 175, 590, 150, 25)
    
    
    $but_end=GuiCtrlCreateButton("Beenden", 225, 625, 100, 25)
    
    
    GUISetState ()
    
    
    
    
    While 1
    	$msg = GUIGetMsg()
    	Switch  $msg
        	Case $GUI_EVENT_CLOSE
            	ExitLoop
        	Case $btn_dest
            	_destination()
    		Case $btn_addfolder
    			_folder_add()
    		Case $btn_delfolder
    			_folder_remove()
    		Case $btn_sload
    			_load_sources()
    		Case $btn_start
    			_test_files()
        	Case $but_end
    			Exit
    	EndSwitch
    
    
    Wend
    
    
    func _test_files()
    Local $s_path = (IniRead($ini, "Einstellungen", "dest1",""))
    $aFiles = _FileListToArray($s_path, @ComputerName & "*", 2)
    If @error = 4 Then
    		_test_copy()
    	Else
    		local $aFilesExt[$aFiles[0]][2] ; 2D Array erstellen
    		for $i= 1 to $aFiles[0]
    			$aFilesExt[$i-1][0] = $aFiles[$i]
    			$aFilesExt[$i-1][1] = FileGetTime($aFiles[$i], 0 , 1)
    		next
    		_ArraySort($aFilesExt, 0, 0, 0, 1) ; Array sortieren
    		_ArrayDisplay($aFilesExt)
    		If $aFilesExt[0][1] > 2 Then
    			For $i = 1 To $aFilesExt[0][1] - 2
    				DirRemove($s_path & "\" & $aFilesExt[$i][0], 1)
    			Next
    		EndIf
    	_test_copy()
    EndIf
    
    
    EndFunc
    
    
    Func _test_copy()
    	Local $ziel_win = (IniRead($ini, "Einstellungen", "dest1","") & "\" & @ComputerName & "_" & @MDAY & "_" & @MON & "_" & @YEAR)
    	If FileExists($ziel_win) Then
    		$ask1 = MsgBox(1, "", "Sicherung vorhanden!" & @CRLF & "Trotzdem sichern?")
    		Switch $ask1
    			Case 1
    				_start_copy()
    			Case 2
    				Exit
    		EndSwitch
    	Else
    		DirCreate($ziel_win)
    		_start_copy()
    	EndIf
    EndFunc
    
    
    Func _start_copy()
    Local $ziel_rs = (IniRead($ini, "Einstellungen", "dest2","") & "/" & @ComputerName & "_" & @MDAY & "_" & @MON & "_" & @YEAR)
    Local $rsync = @ScriptDir & "\rsync\bin\rsync.exe"
    Local $para = "-a -v -P --chmod=ugo=rwX --size-only "
    $Countfile= _FileCountLines($sources)
    
    
    	GUICtrlSetState($btn_start,$GUI_DISABLE)
    	GUICtrlSetState($btn_dest,$GUI_DISABLE)
    	GUICtrlSetState($btn_addfolder,$GUI_DISABLE)
    	GUICtrlSetState($btn_delfolder,$GUI_DISABLE)
    	GUICtrlSetState($btn_sload,$GUI_DISABLE)
    		For $i = 1 To $Countfile
    			$file1 = FileReadLine($sources, $i)
    			$sync = RunWait( $rsync & " " & $para & " " & '"' & $file1 & '"' & " " & '"' & $ziel_rs & '"', "")
    			$s_del = _GUICtrlListBox_FindString($aSource_path, $file1, True)
    			_GUICtrlListBox_DeleteString($aSource_path, $s_del)
    		Next
    	GUICtrlSetState($btn_start,$GUI_ENABLE)
    	GUICtrlSetState($btn_dest,$GUI_ENABLE)
    	GUICtrlSetState($btn_addfolder,$GUI_ENABLE)
    	GUICtrlSetState($btn_delfolder,$GUI_ENABLE)
    	GUICtrlSetState($btn_sload,$GUI_ENABLE)
    	MsgBox(0, "Abgeschlossen", "Kopieren abgeschlossen")
    EndFunc
    
    
    Func _load_sources()
    	$Countfile= _FileCountLines($sources)
    	$file = $sources
    		For $i = 1 To $CountFile
    		$var1= FileReadLine($file, $i)
    		_GUICtrlListBox_AddString($aSource_path, $var1)
    	Next
    EndFunc
    
    
    Func _destination()
    	$dest_select=FileSelectFolder("Ordner auswählen", @HomeDrive, 2, "", $Form1)
    				Local $aFirst = StringRegExp($dest_select, "\A[a-zA-Z]", 1)
    			$aMod1 = StringRegExpReplace($dest_select, "(?i)[a-z]:\\", "/cygdrive/" & $aFirst[0] & "/", 0)
     			$aMod2 = StringRegExpReplace($aMod1, "(?i)\\", "/", 0)
    	GUICtrlSetData($dest_path_win, $dest_select)
    	GUICtrlSetData($dest_path_rs, $aMod2)
    	_saveini()
    EndFunc
    
    
    Func _folder_add()
    	Local $newFolder = FileSelectFolder("Verzeichnis auswählen", @HomeDrive, 2, "" , $Form1)
    	If _GUICtrlListBox_GetCount($aSource_path) < 20 Then
    		If $newFolder <> '' Then
    			Local $aFirst = StringRegExp($newFolder, "\A[a-zA-Z]", 1)
    			$aMod1 = StringRegExpReplace($newFolder, "(?i)[a-z]:\\", "/cygdrive/" & $aFirst[0] & "/", 0)
     			$aMod2 = StringRegExpReplace($aMod1, "(?i)\\", "/", 0)
      			_GUICtrlListBox_AddString($aSource_path,$aMod2)
    		EndIf
    	EndIf
    _filewrite()
    EndFunc
    
    
    Func _folder_remove()
    	Local $iIndex = _GUICtrlListBox_GetCurSel($aSource_path)
    	Local $iIndex_text = _GUICtrlListBox_GetText($aSource_path, $iIndex)
    	_GUICtrlListBox_DeleteString($aSource_path, $iIndex)
    EndFunc
    
    
    Func _filewrite()
    	$file_s = FileOpen($sources,2)
    	For $i = 0 To _GUICtrlListBox_GetCount($aSource_path) - 1
    		FileWriteLine($file_s, _GUICtrlListBox_GetText($aSource_path, $i))
    	Next
    	FileClose($file_s)
    EndFunc   ;==>_FileWrite
    
    
    
    
    Func _saveini()
    	IniWrite($ini, "Einstellungen", "dest1", $dest_select) ;Win-Pfad
    	IniWrite($ini, "Einstellungen", "dest2", $aMod2) ; RSync-Pfad
    
    
    EndFunc   ;==>saveini
    Alles anzeigen


    bei der Function ab Zeile 77 scheint etwas nicht zu stimmen. Ich les meine Verzeichnisse zwar in ein 2D Arrays ein, um auch das Datum der Verzeichnisse zu ermitteln, allerdings steht bei keinem Verzeichnis ein Datum im Array.



    Wenn ich mit Explorer im Verzeichnis schau, steht alles bei. also Datum, Uhrzeit etc. Könnte da mal jemand drüber schauen und mir nen Tip geben? Mit Array's hab ich es NOCH nicht wirklich so;)

    Ändere ich die Zeile 79 auf:
    $aFiles = _FileListToArray(@ScriptDir, "*", 2) bzw. auf $aFiles = _FileListToArray(@HomeDrive & "/temp", "*", 2)
    wird es komischerweise (teilweise) angezeigt. ok, ist anderes Verzeichnis, aber da steht was drin

  • Datensicherung

    • thewanderer
    • 25. Februar 2016 um 09:37

    Naja, ich hab mir schon zig Backup-Programme angeschaut, war aber noch nicht das Richtige dabei.
    Ich mach momentan 1x im Monat eine Vollsicherung verschiedener Verzeichnisse auf verschiedenen Laufwerken von meinem Server und 3x im Monat ne inkrementelle Sicherung. Es sollen aber max. 6 Vollsicherungen auf dem Backup-NAS liegen

  • Datensicherung

    • thewanderer
    • 24. Februar 2016 um 22:28

    Hab grade eine portable Version von rsync gefunden, also kann man es doch mit Win machen. Meine meisten Kunden haben nunmal den Mist druff... :(
    Problem ist nur, dass es mit cygwin arbeitet, demnach sehen die Pfadangaben so aus z.B. "/cygdrive/c/programme"

    Hab es aber so in meinem Script gelöst:

    AutoIt
    Func _folder_add()
    	Local $newFolder = FileSelectFolder("Verzeichnis auswählen", @HomeDrive, 2, "" , $Form1)
    	If _GUICtrlListBox_GetCount($aSource_path) < 20 Then ;Max. 20 Einträge
    		If $newFolder <> '' Then
    			Local $aFirst = StringRegExp($newFolder, "\A[a-zA-Z]", 1)
    			$aMod1 = StringRegExpReplace($newFolder, "(?i)[a-z]:\\", "/cygdrive/" & $aFirst[0] & "/", 0)
     			$aMod2 = StringRegExpReplace($aMod1, "(?i)\\", "/", 0)
      			_GUICtrlListBox_AddString($aSource_path,$aMod2)
    		EndIf
    	EndIf
    EndFunc
    Alles anzeigen

    Nicht schön, aber funktioniert ^^

  • Datensicherung

    • thewanderer
    • 24. Februar 2016 um 20:00

    Danke für eure Antworten,
    mach des nur um mich bissi in autoit reinzufummeln - austesten, was möglich ist. Sagen wir mal so, machbar ist viel, aber wesentlich umständlicher, wie mit nem shell-script. Da mach ich ne wöchentliche Datensicherung von zig verschiedenen Verzeichnissen, mit Rotation und zusätzlicher täglichen Synchronisierung mit nem Drittel an Code, was mein bisheriges Script hat

    Zitat von Peter S. Taler

    Ps.: Ich fand robocoby nie wirklich prikelnd

    Musste ich auch grade herausfinden :(
    Werd wohl doch bei meinem schönen rsync-script bleiben...

  • Datensicherung

    • thewanderer
    • 24. Februar 2016 um 12:58

    Bin grade drüber, mir ein Script zur Datensicherung zu basteln...

    Spoiler anzeigen
    AutoIt
    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <GuiListBox.au3>
    #include <APIConstants.au3>
    #include <Array.au3>
    #include <Debug.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    
    
    Global $ini = @ScriptDir & "\datensicherung.ini"
    Global $sources = @ScriptDir & "\quellen.ini"
    Global $dest_select, $file
    $txtg1 = "Info"
    $txtg2 = "Pfad-Einstellungen"
    
    
    ; GUI Erstellen
    $Form1 = GuiCreate("Datensicherung by ...", 350, 700, -1, -1, "", $WS_EX_TOOLWINDOW )
    GUISetFont(9, 1000, 0, "Arial")
    $Group1 = GUICtrlCreateGroup($txtg1, 8, 4, 328, 90)
    
    
    ; ### Info ###
    ; Computernamen ausgeben
    GUICtrlCreateLabel("Computername:", 20, 30)
    GuiCtrlCreateLabel("" & @ComputerName & "" , 130, 30)
    
    
    ;Benutzernamen ausgeben
    GUICtrlCreateLabel("Benutzername:", 20, 50)
    GuiCtrlCreateLabel("" & @UserName & "" , 130, 50)
    ; ### END Info ###
    
    
    ; ### Pfade ###
    $Group2 = GUICtrlCreateGroup($txtg2, 8, 100, 328, 600)
    ; Sicherungspfad
    $dest_path = GUICtrlCreateLabel(IniRead($ini, "Einstellungen", "destination", ""), 20, 165, 300, 20) ;Label Destination-Pfad
    GUICtrlSetData($dest_select, $dest_path)
    $btn_dest= GUICtrlCreateButton("Sicherung Ziel", 20, 130, 150, 25)
    
    
    ; Quelle
    $aSource_path = _GUICtrlListBox_Create($Form1, "", 20, 200, 310, 320)
    $btn_addfolder = GUICtrlCreateButton("Verzeichnis hinzufügen", 20, 570, 150, 25)
    $btn_delfolder = GUICtrlCreateButton("Verzeichnis entfernen", 175, 570, 150, 25)
    
    
    $btn_sload = GUICtrlCreateButton("Pfade aus Ini laden", 20, 600, 150, 25)
    $btn_start = GUICtrlCreateButton("Sicherung starten", 175, 600, 150, 25)
    
    
    $but_end=GuiCtrlCreateButton("Beenden", 230, 640, 100, 25)
    
    
    GUISetState ()
    
    
    While 1
    	$msg = GUIGetMsg()
    	Switch  $msg
        	Case $GUI_EVENT_CLOSE
            	ExitLoop
        	Case $btn_dest
            	_destination()
    		Case $btn_addfolder
    			_folder_add()
    		Case $btn_delfolder
    			_folder_remove()
    		Case $btn_sload
    			_load_sources()
    		Case $btn_start
    			_filewrite()
    			_saveini()
    			_start_copy()
        	Case $but_end
    			_quit()
            	Exit
    	EndSwitch
    
    
    Wend
    
    
    Func _start_copy()
    	$Countfile= _FileCountLines($sources)
    	$ziel = IniRead($ini, "Einstellungen", "destination", "")
    
    
    	GUICtrlSetState($btn_start,$GUI_DISABLE)
    	GUICtrlSetState($btn_dest,$GUI_DISABLE)
    	GUICtrlSetState($btn_addfolder,$GUI_DISABLE)
    	GUICtrlSetState($btn_delfolder,$GUI_DISABLE)
    	GUICtrlSetState($btn_sload,$GUI_DISABLE)
    		For $i = 1 To $Countfile
    			$file1 = FileReadLine($sources, $i)
    
    
    
    
      		$RoboCopy = RunWait(@ComSpec & " /c " & "robocopy " & $file1 & " " & $ziel & " /FP /S /E /COPY:DAT /ZB /R:0 /W:0", "")
    		Next
    
    
    	GUICtrlSetState($btn_start,$GUI_ENABLE)
    	GUICtrlSetState($btn_dest,$GUI_ENABLE)
    	GUICtrlSetState($btn_addfolder,$GUI_ENABLE)
    	GUICtrlSetState($btn_delfolder,$GUI_ENABLE)
    	GUICtrlSetState($btn_sload,$GUI_ENABLE)
    
    
    EndFunc
    
    
    Func _load_sources()
    	$Countfile= _FileCountLines($sources)
    	$file = $sources
    		For $i = 1 To $CountFile
    		$var1= FileReadLine($file, $i)
    		_GUICtrlListBox_AddString($aSource_path, $var1)
    	Next
    EndFunc
    
    
    Func _destination()
    	$dest_select=FileSelectFolder("Ordner auswählen", @HomeDrive, 2, "", $Form1)
    	GUICtrlSetData($dest_path, $dest_select)
    EndFunc
    
    
    Func _folder_add()
    	Local $newFolder = FileSelectFolder("Verzeichnis auswählen", @HomeDrive, 2, "" , $Form1)
    	If _GUICtrlListBox_GetCount($aSource_path) < 20 Then ;Max. 20 Einträge
    		If $newFolder <> '' Then
    			_GUICtrlListBox_AddString($aSource_path,$newFolder)
    
    
    		EndIf
    	EndIf
    EndFunc
    
    
    Func _folder_remove()
    	Local $iIndex = _GUICtrlListBox_GetCurSel($aSource_path)
    	Local $iIndex_text = _GUICtrlListBox_GetText($aSource_path, $iIndex)
    	_GUICtrlListBox_DeleteString($aSource_path, $iIndex)
    EndFunc
    
    
    Func _filewrite()
    	$file_s = FileOpen($sources,2)
    	For $i = 0 To _GUICtrlListBox_GetCount($aSource_path) - 1
    		FileWriteLine($file_s, _GUICtrlListBox_GetText($aSource_path, $i))
    	Next
    	FileClose($file_s)
    EndFunc   ;==>_FileWrite
    
    
    
    
    Func _saveini()
    	IniWrite($ini, "Einstellungen", "destination", $dest_select)
    EndFunc   ;==>saveini
    
    
    Func _quit()
    	_saveini()
    	_filewrite()
    	Exit
    EndFunc   ;==>_Quit
    Alles anzeigen


    Allerdings scheint bei dem RoboCopy Befehl (Zeile 89) irgendwas nicht zu stimmen. Dos-Box geht zwar auf und er tut was, aber nicht kopieren :(
    Kann da mal jemand drüber schauen und mir nen Tip geben?

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 21:02

    Danke für eure Hilfe, aber wie gesagt, ich lass es.

    @ Lottich
    Dein Skript funktioniert, wenn der Anrufmonitor schon offen ist. Wenn ich in Zeile 4 WinExists in WinActive ändere funktioniert es zwar, allerdings aktiviert er die Mucke trotzdem teilweise, wenn ich andere Programme wie Terminplaner, Routenplaner etc öffne. Bin selbständiger Fachinformatiker (NEIN, kein Programmierer sondern Linux-SysAdmin) und hab am Tag ca. 20 Kundengespräche. Deshalb war mein Lösungsansatz über Pixelsearch (siehe Anfangspost), da der Anrufmonitor immer auf meinem 4. Monitor aufpoppt.


    Zitat von autoBert

    bei mir sind es zwar nur 1 Hand voll, kann aber nur bestätigen definitiv beste Doku und Hilfe mir bekannter Window's Sprachen.

    Deshalb arbeite ich mit MicroSCHROTT im Normalfall nicht ^^

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 18:36

    und warum führt er hier

    AutoIt
    Func fritz()
    local $var = False
    While 1
    	Select
    		Case WinExists("AVMCALLBox") = True
    			$var = True
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    		Case WinExists("AVMCALLBox") = False And $var = True
    			$var = False
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    		EndSelect
    WEnd
    EndFunc   ;==>fritz
    Alles anzeigen


    die folgenden Befehle ab Zeile 9 aus, obwohl das Fenster aktiv ist?
    Ergebnis: Mucke an, Mucke aus, Mucke an - obwohl der Anrufmonitor offen und auch aktiv ist

    Für mich steht da ab Zeile 9: wenn WinExist = falsch dann soll er ausführen, also wenn es NICHT da ist
    Gleiches Ergebnis mit WinActive, hab es nu nur mal mit WinExist probiert


    Ich arbeite seit ~8 Jahren mit Linux, programmiere u.a. Datensicherungsskripte für Firmen mit 10 und mehr Clients unter Linux bzw mit Cygwin unter Win. Also stringregexp, sed etc ist alles kein prob, weil man da wesentlich bessere Hilfen findet, anstatt nur nen Codeschnipsel

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 17:43

    Thema hat sich erledigt. Dachte man kann sich autoit selbst erlesen, aber dem scheint nicht so, weil die Hilfe ist echt für', Ar*ch.
    Beispiel:

    If WinActive("[CLASS:Notepad]") Then
    MsgBox(0, "", "Das Fenster ist aktiv")
    EndIf

    Und wenn es nicht aktiv ist? If WinActive("[CLASS:Notepad]") = False Then scheint er völlig zu ignorieren.

    Da prog ich lieber weiter auf der shell, die funktioniert sinnvoller...

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 15:17

    Wie gesagt, mir geht es nicht um die Fensterabfrage, sondern um die Schleifen.
    Hab es jetzt soweit, daß er mir bei nem Anruf zwar den Player pausiert, aber sofort wieder aktiviert

    AutoIt
    Func fritz()
    local $var = False
    	While 1
    			While $var = False
    				Local $waitpixel = PixelSearch($olpos[0], $olpos[1], $urpos[0], $urpos[1], 0xffe500, 20)
    				Local $waitpixel1 = PixelSearch($olpos[0], $olpos[1], $urpos[0], $urpos[1], 0xea0019, 20)
    				If IsArray($waitpixel) = True OR IsArray($waitpixel1) = True Then
    					$var = True
    					WinActivate("AIMP3")
    					Send("{SPACE}")
    					EndIf
    				If IsArray($waitpixel) = False OR IsArray($waitpixel1) = False Then
    					$var = False
    					WinActivate("AIMP3")
    					Send("{SPACE}")
    				EndIf
    			WEnd
    	WEnd
    EndFunc   ;==>fritz
    Alles anzeigen


    Irgendwie scheint in der Zeile 12 ein Fehler drin zu sein, weil er soll die Anweisung ja nur ausführen, wenn er die Farbe nicht findet.
    Gleiches Resultat mit If WinActive


    AutoIt
    Func fritz()
    local $var = False
    	While $var = False
    		if WinActive("AVMCALLBox") = True Then
    			$var = True
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    		EndIf
    		If WinActive("AVMCALLBox") = False And $var = True Then
    			$var = False
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    		EndIf
    	WEnd
    EndFunc
    Alles anzeigen

    Er macht Mucke kurz aus, aber gleich wieder an, obwohl ja der Anrufmonitor aktiv ist. also scheint auch hier in Zeile 9 was nicht zu passen. Irgendwie ignoriert er des False :(

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 13:47

    Über der Lösung mit:

    If WinActive(AVMCALLBox)

    bin ich auch schon drüber. Mir geht es aber nicht um die Fenstererkennung - das funktioniert, sondern um die Schleifen (siehe Thread-Titel).
    Ich hab auch hier das Problem, dass ich da in nder Endlosschleife häng und noch nicht herausgefunden hab, wie ich die beende.
    Ergebnis - Musik an, Musik aus, Musik an etc

    Wie sag ich ihm: wenn Anruf, dann 1x erste Schleife, dann nix mehr bis Fenster wieder verschwunden?

  • Schleifenproblem

    • thewanderer
    • 16. Februar 2016 um 12:30

    Hallo ihr lieben, hab mal wieder ein Problem...
    Hab in meinem Büro immer Mucke am laufen. Wenn ich jetzt nen Anruf bekomme, geht mein Anrufmonitor auf.

    Entweder so:
    moni0.png

    oder so:
    moni1.png

    Der Monitor bleibt während des Telefonats offen (siehe Zeitanzeige oben im Fenster). Da ich sowieso grad mit autoit am rumbasteln bin, dachte ich mir, ich könnte des mit Pixelsearch lösen, indem ich nach rot bzw gelb in dem Logobereich scannen lasse. Wenn eine der Farben vorhanden, dann Pause

    Hier mein bisheriger Lösungsansatz

    Spoiler anzeigen
    AutoIt
    #include <Misc.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    
    
    Global $olpos, $urpos, $Looping
    
    
    start()
    Func start()
    	$Looping = 1
    	bereich()
    EndFunc   ;==>start
    
    
    
    
    ; Bereich Anrufmonitor festlegen
    Func bereich()
    	While $Looping
    		If _IsPressed(01) Then
    			$olpos = MouseGetPos()
    			While _IsPressed(01)
    			WEnd
    			ExitLoop
    		EndIf
    	WEnd
    	Sleep(100)
    	While $Looping
    		If _IsPressed(01) Then
    			$urpos = MouseGetPos()
    			While _IsPressed(01)
    			WEnd
    			ExitLoop
    		EndIf
    	WEnd
    fritz()
    EndFunc   ;==>bereich
    
    
    
    
    Func fritz()
    	While 1
    		$waitpixel = PixelSearch($olpos[0], $olpos[1], $urpos[0], $urpos[1], 0xffe500, 10)
    		$waitpixel1 = PixelSearch($olpos[0], $olpos[1], $urpos[0], $urpos[1], 0xea0019, 10)
    		While True
    			If IsArray($waitpixel) = True OR IsArray($waitpixel1) = True Then
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    			EndIf
    			If IsArray($waitpixel) = False AND IsArray($waitpixel1) = False Then
    			WinActivate("AIMP3")
    			Send("{SPACE}")
    			EndIf
    		WEnd
    	WEnd
    
    
    EndFunc   ;==>fritz
    Alles anzeigen


    Wenn jetzt ein Anruf kommt, öffnet er mir zwar den AIMP3 (Player) und macht pause, aber da er in ner Endlosschleife hängt, nimmt er die logischerweise auch gleich wieder raus, wieder rein etc.
    Wie kann ich des lösen, dass ich sag -> wenn Farbe da, dann AIMP3 -> Pause und erst was machen, wenn sich Farbzustand ändert?

    PS: Ich weiß, dass sich des eleganter mit Winexist lösen löst, wollte es aber mal so probieren. Winexist kommt auch noch ^^

  • Probleme mit Arrays

    • thewanderer
    • 9. Februar 2016 um 18:25

    Hm, also er schmeißt die eckigen Klammern sauber raus...

    Habs grade mal geändert, da schmeißt er mir nen Syntax-Error raus

  • Probleme mit Arrays

    • thewanderer
    • 7. Februar 2016 um 20:47

    Damit bastel ich schon grade rum, hab folgendes in mein Skript eingefügt:

    _GUICtrlListView_AddColumn($Result_List, "", 310)
    _GUICtrlListView_AddArray($Result_List, $aResult_sum)

    aber da gibt er mir nur die Linke Spalte im Fenster aus.

    Mit:
    _GUICtrlListView_AddColumn($Result_List, "", 310)
    _GUICtrlListView_AddArray($Result_List, $aResult_sum[0] & $aResult_sum[1])

    bekomm ich nen Error.
    Such grade mal bei Dr. Google ;)

  • Probleme mit Arrays

    • thewanderer
    • 7. Februar 2016 um 18:27

    Hab noch ein kleines Problem, hab mir überlegt, daß ich mir eine GUI bastel, in welcher die gesammelten Items immer "live" aktuallisiert werden. Sonst muß ich ständig die .txt öffnen, schließen...

    Dachte, das ist so zu machen, klappt aber nicht... :(

    Spoiler anzeigen
    AutoIt
    $Form1_1 = GUICreate($rndname, 345, 700, 306, 198)
    $Group1 = GUICtrlCreateGroup($txtg1, 8, 15, 329, 685)
    $Result_List = GUICtrlCreateListView("", 15, 28, 315, 670, BitOR($GUI_SS_DEFAULT_LIST,$LBS_DISABLENOSCROLL), $WS_EX_STATICEDGE)
    _GUICtrlListView_AddArray($Result_List, $aResult_sum)
    GUISetState(@SW_SHOW)
    
    
    _auswertung()
    func _auswertung
    $log = @MyDocumentsDir & '\RIFT\log.txt'
    $file_r = FileRead($log)
    $file_r = StringReplace(StringReplace($file_r,'[',''),']','') ; [ ] entfernen
        Local $a_split, $z
        Local $aResult_u = StringRegExp($file_r, 'Ihr erhaltet: (.*)', 3)
        If Not @error Then
    ;~         _ArrayDisplay($aResult_u, "RegExp Ergebnis")
            _ArrayColInsert($aResult_u,1)
    		For $h = 0 To UBound($aResult_u) - 1
    			$a_split = StringSplit($aResult_u[$h][0], "x")
    			$aResult_u[$h][1] = StringStripWS($a_split[1], 7)
    			If $a_split[0]>1 Then
    				$aResult_u[$h][0] = Int($a_split[2])
    			Else
    				$aResult_u[$h][0] = 1
    			EndIf
    		Next
            _ArraySort($aResult_u, 1, 0 ,0 ,1)
    ;~ 		_ArrayDisplay($aResult_u, '2D')
            Dim $aResult_sum [UBound($aResult_u,$UBOUND_ROWS)][2]
            $i=0
            $zaehler=0
            $item=$aResult_u[0][1]
            For $j = 0 To UBound($aResult_u)-1
                If $aResult_u[$j][1] == $item Then
                    $zaehler += $aResult_u[$j][0]
                Else
                    $aResult_sum[$i][0]=$zaehler
                    $aResult_sum[$i][1]=$item
                    $zaehler=$aResult_u[$j][0]
                    $item=$aResult_u[$j][1]
                    $i+=1
                EndIf
            Next
            $aResult_sum[$i][0]=$zaehler
            $aResult_sum[$i][1]=$item
    		ReDim $aResult_sum[$i+1][2]
            _ArraySort($aResult_sum, 1, 0 ,0 ,0)
    
            for $k = 1 to ubound($aResult_sum) - 1
                guictrlsetdata($Result_List,$aResult_sum[$k])
            next
    
    
            _FileWriteFromArray($plog, $aResult_sum, Default, Default, " x ")
    ;~         _ArrayDisplay($aResult_sum, "2D Array mit Summen")
        EndIf
    EndFunc
    Alles anzeigen

    Zeile 3,4 & 48-50

    Ist dafür Listview überhaupt der richtige Ansatz?

  • Probleme mit Arrays

    • thewanderer
    • 6. Februar 2016 um 21:45

    Hab das Skript jetzt mal mit einer Log mit 20.000 Zeilen laufen lassen. 5760 Ergebnisse mit "Ihr erhaltet:". Dauer vom 3. Schritt, wo er das Array zusammen addiert ~100 Sek.
    Problem war das _Arraydelete

    Hab mich jetzt mal hingesetzt und mit Bekanntem was gebastelt - ohne ArrayDelete. Außerdem wird jetzt die Anzahl an Materialien zuerst ausgegeben

    Spoiler anzeigen
    AutoIt
    Func f1()
        Local $a_split, $z
        Local $aResult_u = StringRegExp($file_r, 'Ihr erhaltet: (.*)', 3)
        If Not @error Then
            _ArrayDisplay($aResult_u, "RegExp Ergebnis")
            _ArrayColInsert($aResult_u,1)
    		For $h = 0 To UBound($aResult_u) - 1
    			$a_split = StringSplit($aResult_u[$h][0], "x")
    			$aResult_u[$h][1] = StringStripWS($a_split[1], 7)
    			If $a_split[0]>1 Then
    				$aResult_u[$h][0] = Int($a_split[2])
    			Else
    				$aResult_u[$h][0] = 1
    			EndIf
    		Next
            _ArraySort($aResult_u, 1, 0 ,0 ,1)
    		_ArrayDisplay($aResult_u, '2D')
    
    
    
    
            Dim $aResult_sum [UBound($aResult_u,$UBOUND_ROWS)][2]
            $i=0
            $zaehler=0
            $item=$aResult_u[0][1]
            For $j = 0 To UBound($aResult_u)-1
                If $aResult_u[$j][1] == $item Then
                    $zaehler += $aResult_u[$j][0]
                Else
                    $aResult_sum[$i][0]=$zaehler
                    $aResult_sum[$i][1]=$item
                    $zaehler=$aResult_u[$j][0]
                    $item=$aResult_u[$j][1]
                    $i+=1
                EndIf
            Next
            $aResult_sum[$i][0]=$zaehler
            $aResult_sum[$i][1]=$item
    		ReDim $aResult_sum[$i+1][2]
            _ArraySort($aResult_sum, 1, 0 ,0 ,0)
    
    
            _FileWriteFromArray($plog, $aResult_sum, Default, Default, " x ")
            _ArrayDisplay($aResult_sum, "2D Array mit Summen")
    EndFunc   ;==>f1
    Alles anzeigen

    Nu braucht er zum Sortieren und Addieren nur noch 2 Sek für die über 5000 Zeilen ;)

  • Probleme mit Arrays

    • thewanderer
    • 6. Februar 2016 um 20:48

    So, habs umgebaut, daß die Anzahl vorne steht.

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™