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

Beiträge von Oscar

  • Files in verschiedenen Ordnern mit einem bestimmten Datum auslesen, moven und Ordnerstruktur herstellen

    • Oscar
    • 5. November 2013 um 17:41

    Dein Problem ist für einen Anfänger nicht ganz leicht zu lösen. Man muss schon genau wissen, was man für Pfade (relativ oder absolut) von der Einlesefunktion zurückbekommt.
    Dementsprechend muss man FileMove anpassen. Hier mal eine Fix- und Fertig-Version (zum testen kannst Du Zeile 20 auskommentieren):

    Spoiler anzeigen
    [autoit]


    Global $sDate = _InputDateBox(0, 'Kopier-Datum')
    If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden

    [/autoit] [autoit][/autoit] [autoit]

    Global $sSourceDir = FileSelectFolder('Quellverzeichnis auswählen!', '', 2, @ScriptDir) ; Quellverzeichnis auswählen!
    If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
    If Not FileExists($sSourceDir) Then Exit MsgBox(0, 'Fehler!', 'Quellverzeichnis existiert nicht!')
    If StringRight($sSourceDir, 1) <> '\' Then $sSourceDir &= '\' ; Wenn am Ende des Verzeichnisses ein Backslash fehlt, diesen hinzufügen

    [/autoit] [autoit][/autoit] [autoit]

    Global $sDestDir = FileSelectFolder('Zielverzeichnis auswählen!', '', 2, @DesktopDir) ; Zielverzeichnis auswählen!
    If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
    If Not FileExists($sDestDir) Then Exit MsgBox(0, 'Fehler!', 'Zielverzeichnis existiert nicht!')
    If StringRight($sDestDir, 1) <> '\' Then $sDestDir &= '\' ; Wenn am Ende des Verzeichnisses ein Backslash fehlt, diesen hinzufügen

    [/autoit] [autoit][/autoit] [autoit]

    Global $aFileList = _RecursiveFileListToArray($sSourceDir, '.*', 1) ; Alle Dateien aus dem Quellverzeichnis (rekursiv) einlesen
    ;~ _ArrayDisplay($aFileList)
    If MsgBox(4 + 48 + 256 + 262144, 'Sicherheitsfrage', 'Sollen die Dateien wirklich verschoben werden?') = 7 Then Exit
    For $i = 1 To $aFileList[0] ; $aFileList[0] enthält anzahl
    If FileGetTime($aFileList[$i], 0, 1) < $sDate Then ; wenn das Änderungsdatum der Datei kleiner als das ausgewählte Datum ist, dann Datei verschieben
    ConsoleWrite(StringFormat('\nQuelle: "%s"\n-> Ziel: "%s"\n', $aFileList[$i], StringReplace($aFileList[$i], $sSourceDir, $sDestDir)))
    If FileMove($aFileList[$i], StringReplace($aFileList[$i], $sSourceDir, $sDestDir), 8) = 0 Then ConsoleWrite('! Fehler! Die Datei konnte nicht verschoben werden!' & @CR & @CR)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _InputDateBox([$iFormat][, $sTitle][, $sText][, $sDefaultDate][, $hParent])
    ; Description: Fragt den Benutzer nach Datum oder Datum und Uhrzeit und gibt dies als String in Form von "YYYYMMDDhhmmss" zurück
    ; Parameter(s): $iFormat = 0 oder 1
    ; bei 0 wird nur nach dem Datum gefragt (Uhrzeit wird dann als "000000" zurückgegeben)
    ; bei 1 wird nach Datum und Uhrzeit gefragt
    ; Requirement: -
    ; Return Value(s): bei Erfolg = String in Form von "YYYYMMDDhhmmss"
    ; bei Abbruch = Leerstring und @error = 1
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _InputDateBox($iFormat = 1, $sTitle = '', $sText = '', $sDefaultDate = '', $hParent = '')
    If $iFormat < 0 Or $iFormat > 1 Then $iFormat = 1
    If $sTitle = '' Or $sTitle = Default Then $sTitle = 'Datum-Box'
    If $sText = '' Or $sText = Default Then $sText = 'Bitte Datum auswählen!'
    If $iFormat Then $sText = 'Bitte Datum und Uhrzeit auswählen!'
    Local $iOnEventMode = Opt('GUIOnEventMode', 0), $sRetDate = '', $iError = 0
    Local $hGui = GUICreate($sTitle, 260 + $iFormat * 85, 130, Default, Default, Default, 8, $hParent)
    GUISetBkColor(0xCCCCCC, $hGui)
    GUISetIcon('shell32.dll', 24, $hGui)
    GUICtrlCreateGroup($sText, 10, 20, 240 + $iFormat * 85, 70)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial', 5)
    GUICtrlCreateIcon('shell32.dll', -21, 30, 48, 32, 32)
    Local $idDate = GUICtrlCreateDate($sDefaultDate, 75, 49, 150 + $iFormat * 85, 30, $iFormat)
    GUICtrlSetFont(-1, 14, 400, 0, 'Verdana', 5)
    If $iFormat Then
    Local $DTM_SETFORMAT_ = 0x1032
    Local $sStyle = 'dd.MM.yyyy HH:mm:ss'
    GUICtrlSendMsg($idDate, $DTM_SETFORMAT_, 0, $sStyle)
    EndIf
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    Local $idOk = GUICtrlCreateButton('Ok', 100 + $iFormat * 85, 100, 60, 25, 1) ; <- Value 1 = $BS_DEFPUSHBUTTON
    Local $idCancel = GUICtrlCreateButton('Abbrechen', 170 + $iFormat * 85, 100, 80, 25)
    GUISetState(@SW_SHOW, $hGui)
    While True
    Switch GUIGetMsg()
    Case $idCancel, -3 ; <- Value -3 = $GUI_EVENT_CLOSE
    $iError = 1
    ExitLoop
    Case $idOk
    $sRetDate = StringRegExpReplace(GUICtrlRead($idDate), '(\d{2})\.(\d{2})\.(\d{4}).*', '$3$2$1')
    If $iFormat Then
    $sRetDate &= StringRegExpReplace(GUICtrlRead($idDate), '\d{2}\.\d{2}\.\d{4} (\d{2}):(\d{2}):(\d{2})', '$1$2$3')
    Else
    $sRetDate &= '000000'
    EndIf
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($hGui)
    Opt('GUIOnEventMode', $iOnEventMode)
    Return SetError($iError, 0, $sRetDate)
    EndFunc ;==>_InputDateBox

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $fRecursion][, $sDelim])
    ; Description:: gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $fRecursion = Verzeichnisse rekursiv durchsuchen
    ; False = Nein
    ; True = Ja
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ; und: AspirinJunkie (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
    Local $hSearch, $sFile, $sReturn = '', $aD
    Local Static $hDll
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*')
    If Not @error And $hSearch <> -1 Then
    If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    $aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
    If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $fOpenDLL Then DllClose($hDll)
    EndIf
    If $iFormat = 2 Then $iFormat = 3
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]
  • Mehrere Dateien umbenennen

    • Oscar
    • 4. November 2013 um 14:23

    Zeile 15 ist falsch. Da fehlt ein Backslash:

    [autoit]

    FileMove($Pfad & '\' & $FileList[$i], $Pfad & '\' & $Foto)

    [/autoit]
  • Files in verschiedenen Ordnern mit einem bestimmten Datum auslesen, moven und Ordnerstruktur herstellen

    • Oscar
    • 4. November 2013 um 12:27

    [verschoben nach Programmieranfragen, da es ja scheinbar nicht um Hilfe zu einem Script geht, sondern ein fertiges Script erwartet wird]

  • SSD - Hilfe bei Kaufentscheidung

    • Oscar
    • 3. November 2013 um 17:15

    Ruhemodus/Standby habe ich sogut wie gar nicht benutzt. Allerdings war mein Download-Verzeichnis auf der SSD (Userverzeichnis). Vielleicht sollte man das ändern?! :S

    Es gab eigentlich nur ein Anzeichen (wobei ich mir nicht sicher bin, ob das wirklich mit dem Tod der SSD zu tun hatte), vor etwa zwei Wochen: da ist Windows während des bootens abgestürzt/hängengeblieben. Nach einem Reset lief aber wieder alles. :S
    Der "Tod" der SSD kam aber dann über Nacht.

  • TCP Chat Extras

    • Oscar
    • 3. November 2013 um 17:05

    Beim hochladen schickt der Client die Datei an den Server. Beim runterladen schickt der Client eine entsprechende Anforderung (z.B. '-DL "Datei sowieso") an den Server und der schickt dann die Datei an den Client.
    Der Server sollte vielleicht zusätzlich noch einen Befehl "-LIST" oder so unterstützen, damit der Client eine Liste der vorhandenen Dateien anfordern kann.

  • SSD - Hilfe bei Kaufentscheidung

    • Oscar
    • 2. November 2013 um 16:19

    Mein BIOS braucht schon recht lange. Hier sind (inkl. SSD) 4 Platten am Rechner, USB3.0-PCI-Card, 1 DVD-ROM, 1 DVD-Brenner, 2 USB-Drucker, USB-Cardreader, USB-Fingerabdruckscanner.
    Bis Windows dann "endlich" startet...
    Vielleicht sollte ich mal nach einer neuen BIOS-Version suchen... :rolleyes:

  • SSD - Hilfe bei Kaufentscheidung

    • Oscar
    • 2. November 2013 um 14:01

    Ja, das mit Defragmentierung, Indexdienst, Auslagerungsdatei, etc. ist mir bekannt (wird übrigens von "Samsung Magician" auch gut erklärt) und war es auch schon bei der alten SSD.
    Ich wollte nur mal auf die "kurze" Lebensdauer und den plötzlichen Tod meiner alten SSD hinweisen. Verbunden mit dem Tipp, öfter mal ein Backup anzulegen. Bei mir war das wirklich großes Glück, dass ich vor etwa 10 Tagen ein Backup meines Systems gemacht hatte. Meine übrigen Daten (Bilder, etc.) sichere ich zwar öfter, aber das war mein erstes Backup der System-SSD. Puh! :)

  • SSD - Hilfe bei Kaufentscheidung

    • Oscar
    • 2. November 2013 um 13:40

    Ja, ich weiß, dass der Thread bereits 993 Tage alt ist. :S
    Leider! Diese (damals gekaufte) SSD hat gestern das Zeitliche gesegnet. Lebensdauer also nicht mal 3 Jahre. :thumbdown:
    Die SSD wird vom BIOS nicht mehr erkannt. Auch extern (SATA -> USB3.0) ist nichts mehr zu machen (Gerät lässt sich nicht starten. Code 10).
    Naja, zum Glück hatte ich ein relativ junges Backup von meiner System-SSD.
    Ich habe mir jetzt eine "Samsung SSD 840 EVO" eingebaut und das Backup zurückgespielt. Schön schnell, obwohl mein Mainboard kein SATA Rev.3 unterstützt.
    Mal schauen, wie lange diese SSD überlebt...

    Und die Moral von der Geschicht: Vergiss das Backup auch bei einer SSD nicht. :D

  • Hilfe bei einem Messenger

    • Oscar
    • 31. Oktober 2013 um 15:13

    Wo ist das Server-Script?
    Wieso verbindest Du mit @IPAddress1? Oder ist das nur zum testen (Server und Client auf dem gleichen Rechner)?
    Es ist keine Abfrage im Script, wenn die Verbindung unterbrochen wurde (Send fehlerhaft).
    Was soll das "Case @error" beim GuiGetMsg-Switch?

  • Scriptfehler?!

    • Oscar
    • 31. Oktober 2013 um 09:49

    _FileListToArray liest aber keine Unterverzeichnisse ein.

  • Scriptfehler?!

    • Oscar
    • 30. Oktober 2013 um 14:03

    Die Funktion, die ich gepostet habe kommt mit Sonderzeichen (aus Deinem Beispiel) problemlos zurecht. Das habe ich gerade getestet.
    Allerdings sucht sie nur nach Verzeichnissen. Hier mal die abgewandelte Version für Verzeichnisse und Dateien:

    Spoiler anzeigen
    [autoit]


    $sStartPath = 'c:\Users\'
    $sSearchword = 'MyDB'

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip('Suche läuft! Bitte warten...')
    $aFound = _SearchFileFolder($sStartPath, $sSearchword)
    If Not @error Then
    ToolTip('')
    ConsoleWrite($aFound[0] & ' Treffer' & @CR)
    For $i = 1 To $aFound[0]
    ConsoleWrite($i & '.) "' & $aFound[$i] & '"' & @CR)
    Next
    Else
    ConsoleWrite('Error: ' & @error & @CR)
    ToolTip('')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _SearchFileFolder($sPath, $sSearchword, $iRek = 0)
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    Local $hSearch, $sFound, $sOut = '', $aFileAttr, $hDll = DllOpen('kernel32.dll')
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If Not @error Then
    While True
    $sFound = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    $aFileAttr = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFound)
    If @error Or BitAND($aFileAttr[0], 0x400) Then ContinueLoop
    If StringInStr($sFound, $sSearchword) Then $sOut &= $sPath & $sFound & '|'
    $sOut &= _SearchFileFolder($sPath & $sFound, $sSearchword, $iRek + 1)
    Else
    If StringInStr($sFound, $sSearchword) Then $sOut &= $sPath & $sFound & '|'
    EndIf
    WEnd
    FileClose($hSearch)
    EndIf
    DllClose($hDll)
    If $iRek = 0 And $sOut <> '' Then Return SetError(0, 0, StringSplit(StringTrimRight($sOut, 1), '|'))
    If $sOut <> '' Then Return SetError(0, 0, $sOut)
    Return SetError(1, 0, '')
    EndFunc ;==>_SearchFolder

    [/autoit]
  • Scriptfehler?!

    • Oscar
    • 30. Oktober 2013 um 13:04

    Ich mag die rekursiven Funktionen lieber. :)
    Zum Beispiel diese:

    Spoiler anzeigen
    [autoit]


    $sStartPath = 'c:\Users\'
    $sSearchFolder = 'Music'

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip('Suche läuft! Bitte warten...')
    $aFound = _SearchFolder($sStartPath, $sSearchFolder)
    If Not @error Then
    ToolTip('')
    ConsoleWrite($aFound[0] & ' Treffer' & @CR)
    For $i = 1 To $aFound[0]
    ConsoleWrite($i & '.) "' & $aFound[$i] & '"' & @CR)
    Next
    Else
    ConsoleWrite('Error: ' & @error & @CR)
    ToolTip('')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _SearchFolder($sPath, $sFolder, $iRek = 0)
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    Local $hSearch, $sFound, $sOut = '', $aFileAttr, $hDll = DllOpen('kernel32.dll')
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If Not @error Then
    While True
    $sFound = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    $aFileAttr = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFound)
    If @error Or BitAND($aFileAttr[0], 0x400) Then ContinueLoop
    If $sFound = $sFolder Then $sOut &= $sPath & $sFound & '|'
    $sOut &= _SearchFolder($sPath & $sFound, $sFolder, $iRek + 1)
    EndIf
    WEnd
    FileClose($hSearch)
    EndIf
    DllClose($hDll)
    If $iRek = 0 And $sOut <> '' Then Return SetError(0, 0, StringSplit(StringTrimRight($sOut, 1), '|'))
    If $sOut <> '' Then Return SetError(0, 0, $sOut)
    Return SetError(1, 0, '')
    EndFunc ;==>_SearchFolder

    [/autoit]
  • Alte Dateien löschen

    • Oscar
    • 28. Oktober 2013 um 12:42

    Da Du ja ein fertiges Script haben willst, habe ich den Thread mal nach "Programmieranfragen" verschoben.

  • 10er Countdown mit Abfrage

    • Oscar
    • 27. Oktober 2013 um 18:19

    Zum eigentlichen Thema zurück:
    Hier gibt es das fertige Script: Multi-Timer

  • Multi-Timer

    • Oscar
    • 27. Oktober 2013 um 18:02

    Nachdem ich in "Hilfe & Unterstützung" bereits das Grundgerüst gepostet habe, hier jetzt ein fertiges Script, mit diversen Einstell-Möglichkeiten (siehe Kommentare).

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Einstellungen Anfang (Achtung! Die Einstellungen werden nicht überprüft! Wer hier zu hohe/niedrige Werte einträgt, hat selbst Schuld! ;-))
    Global $iXSpacing = 140 ; horizontaler Abstand zwischen den Timern (min. 120 px)
    Global $iYSpacing = 120 ; vertikaler Abstand zwischen den Timern (min. 100 px)
    Global $iCountRow = 2 ; Anzahl der Timer-Reihen (min. 1)
    Global $iTimerPerRow = 5 ; Timer pro Reihe (min. 3)
    Global $iAdlibTicks = 20 ; ms für den AdlibRegister-Aufruf
    Global $iFlashStartTicks = 60000 ; ms bevor der Timer abgelaufen ist, fängt die LED an zu blinken
    Global $iTimerMin = 15 ; Minuten (Timer Mindestwert, min. 1 Minute)
    Global $iTimerMax = 45 ; Minuten (Timer Maximalwert, max. 99 Minuten)
    Global $iTimerStandard = 15 ; Minuten (Timer Standardwert, 1-99 im Bereich von Min. bis Max.)
    Global $iTimerStep = 15 ; Minuten (Timer Sprungweite, sollte ein Vielfaches von Min. sein im Bereich von Min. bis Max.)
    Global $iFlashInterval = 250 ; ms Intervallzeit für die Blink-LED
    Global $aFlashLED[4] = [0x000000, 0xFFFF00, 0xFF0000, 0x00FF00] ; Farben für die Blink-LED (Standard: schwarz/gelb = blinken, rot = Timer läuft nicht, grün = Timer läuft)
    ; Einstellungen Ende

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists(@ScriptDir & '\prog.ico') Then _Hourglass(True, @ScriptDir)
    Global Const $UDM_SETACCEL = 1131
    Global Const $UDM_SETRANGE32 = 1135
    Global Const $UDM_SETPOS32 = 1137
    Global $UDACCEL = DllStructCreate('UINT nSec; UINT nInc')
    Global $pUDACCEL = DllStructGetPtr($UDACCEL)
    DllStructSetData($UDACCEL, 'nSec', 0)
    DllStructSetData($UDACCEL, 'nInc', $iTimerStep)
    Global $iTimerCount = $iCountRow * $iTimerPerRow
    Global $aidTimerDisplay[$iTimerCount], $aidUpDownButton[$iTimerCount], $aidLED[$iTimerCount], $aidStartButton[$iTimerCount]
    Global $aTimer[$iTimerCount], $aTimerStart[$iTimerCount], $aFlashTimer[$iTimerCount][2]
    Global $iProgTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('Multi-Timer', $iTimerPerRow * $iXSpacing + $iXSpacing / 4, Int($iTimerCount / $iTimerPerRow) * $iYSpacing + 65)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetIcon(@ScriptDir & '\prog.ico', 0, $hGui)
    For $i = 0 To $iTimerCount - 1
    $aTimerStart[$i] = $iTimerStandard ; TimerStart auf Standardwert setzen
    GUICtrlCreateLabel(StringFormat('Timer %02i', $i + 1), ($iXSpacing / 4) + Mod($i, $iTimerPerRow) * $iXSpacing, 20 + Int($i / $iTimerPerRow) * $iYSpacing, 100, 32, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 400, 0, 'Tahoma')
    $aidTimerDisplay[$i] = GUICtrlCreateInput('', ($iXSpacing / 4) + Mod($i, $iTimerPerRow) * $iXSpacing, 50 + Int($i / $iTimerPerRow) * $iYSpacing, 116, 32, $ES_READONLY)
    GUICtrlSetOnEvent(-1, '_ChangeTime')
    GUICtrlSetFont(-1, 14, 400, 0, 'Tahoma')
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $aidUpDownButton[$i] = GUICtrlCreateUpdown(-1)
    GUICtrlSendMsg(-1, $UDM_SETRANGE32, $iTimerMin, $iTimerMax) ; Wertebereich setzen
    GUICtrlSendMsg(-1, $UDM_SETPOS32, 0, $iTimerStandard) ; Standardwert setzen
    GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL) ; Sprungweite setzen
    GUICtrlSetData($aidTimerDisplay[$i], _MyTicksToTime($iTimerStandard * 60000)) ; Standardwert anzeigen
    $aidLED[$i] = GUICtrlCreateLabel('', ($iXSpacing / 4) + Mod($i, $iTimerPerRow) * $iXSpacing, 91 + Int($i / $iTimerPerRow) * $iYSpacing, 16, 16, Default, $WS_EX_CLIENTEDGE)
    GUICtrlSetBkColor(-1, $aFlashLED[2])
    $aidStartButton[$i] = GUICtrlCreateButton('Start', $iXSpacing / 4 + 18 + Mod($i, $iTimerPerRow) * $iXSpacing, 88 + Int($i / $iTimerPerRow) * $iYSpacing, 98, 22)
    GUICtrlSetOnEvent(-1, '_StartTimer')
    Next
    GUICtrlCreateButton('Alle starten', ($iXSpacing / 4) + ($iTimerPerRow / 2 - 1.5) * $iXSpacing, Int($iTimerCount / $iTimerPerRow) * $iYSpacing + 20, 116, 30)
    GUICtrlSetOnEvent(-1, '_StartAll')
    GUICtrlCreateButton('Startwerte laden', ($iXSpacing / 4) + ($iTimerPerRow / 2 - 0.5) * $iXSpacing, Int($iTimerCount / $iTimerPerRow) * $iYSpacing + 20, 116, 30)
    GUICtrlSetOnEvent(-1, '_LoadStartVal')
    GUICtrlCreateButton('Alle stoppen', ($iXSpacing / 4) + ($iTimerPerRow / 2 + 0.5) * $iXSpacing, Int($iTimerCount / $iTimerPerRow) * $iYSpacing + 20, 116, 30)
    GUICtrlSetOnEvent(-1, '_StopAll')

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    AdlibRegister('_Timer', $iAdlibTicks)
    WinWaitClose($hGui)
    $UDACCEL = 0
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _CloseGui()
    AdlibUnRegister('_Timer')
    GUIDelete($hGui)
    EndFunc ;==>_CloseGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _Timer()
    Local $aTicks[$iTimerCount], $iTicks = TimerDiff($iProgTimer)
    For $i = 0 To $iTimerCount - 1
    $aTicks[$i] = ($iTicks - $aTimer[$i])
    Next
    For $i = 0 To $iTimerCount - 1
    If BitAND(GUICtrlGetState($aidUpDownButton[$i]), $GUI_DISABLE) Then
    $iTicks = $aTimerStart[$i] * 60000 - $aTicks[$i]
    If $iTicks < $iFlashStartTicks Then ; wenn Timer-Zeit kleiner als die Blinkvorgabezeit, dann...
    If $iTicks <= 0 Then ; wenn Timer-Zeit Null erreicht hat, dann Timer stoppen
    GUICtrlSetOnEvent($aidStartButton[$i], '_StartTimer')
    GUICtrlSetData($aidStartButton[$i], 'Start')
    GUICtrlSetState($aidStartButton[$i], $GUI_DISABLE)
    GUICtrlSetState($aidUpDownButton[$i], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$i], $aFlashLED[1])
    $iTicks = 0
    $aFlashTimer[$i][0] = 0
    Else ; ansonsten LED blinken lassen
    If TimerDiff($aFlashTimer[$i][0]) >= $iFlashInterval Then ; wenn die Intervallzeit erreicht ist,
    $aFlashTimer[$i][0] = TimerInit() ; Intervallzeit-Timer neu setzen
    $aFlashTimer[$i][1] = Not $aFlashTimer[$i][1] ; Farbwert umkehren (0 <-> 1)
    GUICtrlSetBkColor($aidLED[$i], $aFlashLED[Number($aFlashTimer[$i][1])]) ; die Farbe der LED wechseln
    EndIf
    EndIf
    EndIf
    GUICtrlSetData($aidTimerDisplay[$i], _MyTicksToTime($iTicks)) ; Die ms des Timers in "Minuten:Sekunden.Millisekunden" umrechnen und anzeigen
    EndIf
    Next
    EndFunc ;==>_Timer

    [/autoit] [autoit][/autoit] [autoit]

    Func _MyTicksToTime($iTicks)
    Local $sOut = StringRight('0' & Int($iTicks / 60000), 2)
    $iTicks = Mod($iTicks, 60000)
    $sOut &= ':' & StringRight('0' & Int($iTicks / 1000), 2)
    $iTicks = Mod($iTicks, 1000)
    Return $sOut & '.' & StringRight('00' & $iTicks, 3)
    EndFunc ;==>_MyTicksToTime

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeTime()
    Local $iCount = (@GUI_CtrlId - $aidTimerDisplay[0]) / 5
    $aTimerStart[$iCount] = GUICtrlRead(@GUI_CtrlId)
    GUICtrlSetData(@GUI_CtrlId, StringRight('0' & $aTimerStart[$iCount], 2) & ':00.000')
    GUICtrlSetState($aidStartButton[$iCount], $GUI_FOCUS)
    GUICtrlSetState($aidStartButton[$iCount], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$iCount], $aFlashLED[2])
    EndFunc ;==>_ChangeTime

    [/autoit] [autoit][/autoit] [autoit]

    Func _LoadStartVal()
    For $i = 0 To $iTimerCount - 1
    If GUICtrlRead($aidLED[$i]) = ' ' Then ; nur die Werte der gestoppten Timer neu setzen
    GUICtrlSetData($aidLED[$i], '')
    GUICtrlSetData($aidTimerDisplay[$i], _MyTicksToTime($aTimerStart[$i] * 60000))
    GUICtrlSetOnEvent($aidStartButton[$i], '_StartTimer')
    GUICtrlSetData($aidStartButton[$i], 'Start')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_ENABLE)
    GUICtrlSetState($aidStartButton[$i], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$i], $aFlashLED[2])
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartAll()
    Local $iTimerDiff = TimerDiff($iProgTimer)
    For $i = 0 To $iTimerCount - 1
    GUICtrlSetOnEvent($aidStartButton[$i], '_StopTimer')
    GUICtrlSetData($aidStartButton[$i], 'Stop')
    GUICtrlSetState($aidStartButton[$i], $GUI_ENABLE)
    GUICtrlSetState($aidUpDownButton[$i], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$i], $aFlashLED[3])
    $aTimer[$i] = $iTimerDiff
    $aflashTimer[$i][0] = 0
    $aflashTimer[$i][1] = 0
    Next
    EndFunc ;==>_StartAll

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll()
    AdlibUnRegister('_Timer')
    _Timer()
    For $i = 0 To $iTimerCount - 1
    If BitAND(GUICtrlGetState($aidUpDownButton[$i]), $GUI_DISABLE) Then
    GUICtrlSetOnEvent($aidStartButton[$i], '_StartTimer')
    GUICtrlSetData($aidStartButton[$i], 'Start')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_ENABLE)
    GUICtrlSetState($aidStartButton[$i], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$i], $aFlashLED[1])
    GUICtrlSetData($aidLED[$i], ' ')
    EndIf
    Next
    AdlibRegister('_Timer', $iAdlibTicks)
    EndFunc ;==>_StopAll

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartButton[0]) / 5
    GUICtrlSetOnEvent($aidStartButton[$iCount], '_StopTimer')
    GUICtrlSetData($aidStartButton[$iCount], 'Stop')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$iCount], $aFlashLED[3])
    $aTimer[$iCount] = TimerDiff($iProgTimer)
    $aflashTimer[$iCount][0] = 0
    $aflashTimer[$iCount][1] = 0
    EndFunc ;==>_StartTimer

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartButton[0]) / 5
    GUICtrlSetState($aidStartButton[$iCount], $GUI_DISABLE)
    GUICtrlSetOnEvent($aidStartButton[$iCount], '_StartTimer')
    GUICtrlSetData($aidStartButton[$iCount], 'Start')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$iCount], $aFlashLED[1])
    GUICtrlSetData($aidLED[$iCount], ' ')
    EndFunc ;==>_StopTimer

    [/autoit] [autoit][/autoit] [autoit]

    ;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2013-03-25

    [/autoit] [autoit][/autoit] [autoit]

    Func _Hourglass($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Hourglass
    $Hourglass &= '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'
    $Hourglass &= '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'
    $Hourglass &= '/059tP8APnCs/zhppf9ELVzwBVqX958FAAIAMHQCMF+Z3EkAfLb3UIS+/1MAh8H/VInD/1UAisT/VovF/1fEjMYyAFiNxzIAMQEPsQExArECMQNHerT0MC9emL7fBfZlOiwAW5V/MWGbsDeAZ6HOOmqk3HB8AOU+b6n0QHGrHv8yAPBwMQAxATxspgbmMQKxAjFgmq4raFqUdTAELZ8FOgYHVbAMGDAAJzAALjAAM3UwADowAEAxAPABNQA6VTAAMzAALjAAJzAAF0MwAL6J4AAHQTUAwAM0ALEA+AAfQfwAAj8yAP8A/0H/geM0ALAA/gB/cgExAjEA+PAADzYEdQRxAHEBcZgeEDAAEZh/mA8ABAgOABAOHTE/EiU+AGETKUR4FCtI4IQWLkyRMQCxADEBD7EBMQKxAv4RWpnoLgRip/CPt/9bkMcA/22h0/9xpdYA/2ab0f9TicUE/z9wkTBmrP8ngFmf/ydXl+g/jgCb/Dhmof9SfwCy/1+Mu/9kkCC9/2eSvjIAYo4AvP9biLn/Tnogr/81YZ2wjJnxAf8ZkUdTbIrBuAjByPGxhcbZ5/4BdYWauND7093lAPq0vcXwU2uJDr4xGh8QclkEnpqRALX9+/XW//nsALquzeLjrsziAOP/8td1/fnx4MSemZC0MQKfAzpvACSjn5ez+vbtAMDL2t++y9rcoLr78uCWMAGysQEHHwMPADAGIZyXj6AQ2OHfqzGLnJeOHp8xAZ8CDwC4cVKzvnzAvDEAsQAfAg8A+AcLAJSVkaiy0OTqgKnL4u2Pk5MxUA4LnwIPADAOJaGdlgC16/Dw2s7b3QC7zNrcu8zd5uDSl5mYwbEBHwP7FwCfmpG0/fr00jD/+Oy49ljwF/b2MPLLnpr/F/xjaugA4dSx///++P8I9+esO2PvwOjhDNOrMQKfAwAALF0AmWpGaZXVTnkEq+Bwte1Rgrb1gE6Bt/9JfLUxUQD1QnKq7Uhzp+DgRWiT1rBaPgQwwAT8NPG5c63/WIMAtf9njrv/ao4Auv9pjrn/YYiAuP9QfLH/OHFZMmEwWViX4NL7LzJhAJvHSHu1/0+DHr1yT3FQOVExAU+CvLWxUP8wS68fDHIEKjAAqlAwAGYwAHgwAIA0ABexADEBsQEmOQPAA6wKQTEAgHQA4AesQQDwD6xB+B+sQfz8P3MA8QBxATEA+QLxAA=='
    $Hourglass = _Base64Decode($Hourglass)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($Hourglass) & ']')
    DllStructSetData($tSource, 1, $Hourglass)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 7886)
    $tSource = 0
    Local $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
    Local $hFile = FileOpen($sSavePath & "\prog.ico", 18)
    FileWrite($hFile, $bString)
    FileClose($hFile)
    EndIf
    Return $bString
    EndFunc ;==>_Hourglass

    [/autoit] [autoit][/autoit] [autoit]

    Func _Base64Decode($sB64String)
    Local $struct = DllStructCreate("int")
    Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
    Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
    $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($a, 1)
    EndFunc ;==>_Base64Decode

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000)
    Local $tBuffer, $Ret
    $tOutput = 0
    $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']')
    If @error Then Return SetError(1, 0, 0)
    $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0)
    If @error Then Return SetError(2, 0, 0)
    If $Ret[0] Then Return SetError(3, $Ret[0], 0)
    $tOutput = DllStructCreate('byte[' & $Ret[6] & ']')
    If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then
    $tOutput = 0
    Return SetError(4, 0, 0)
    EndIf
    Return $Ret[6]
    EndFunc ;==>_WinAPI_LZNTDecompress

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_MoveMemory($pDestination, $pSource, $iLenght)
    DllCall('ntdll.dll', 'none', 'RtlMoveMemory', 'ptr', $pDestination, 'ptr', $pSource, 'ulong_ptr', $iLenght)
    If @error Then Return SetError(5, 0, 0)
    Return 1
    EndFunc ;==>_WinAPI_MoveMemory

    [/autoit]

    Dateien

    MultiTimer.au3 16,76 kB – 411 Downloads
  • 10er Countdown mit Abfrage

    • Oscar
    • 26. Oktober 2013 um 17:41

    Stimmt, das passiert manchmal!
    Mit Deinem Verbesserungsvorschlag ist auch der Fehler behoben. Danke! :thumbup:

  • 10er Countdown mit Abfrage

    • Oscar
    • 25. Oktober 2013 um 20:17

    Argh! Nein! Mir ist ein Denkfehler unterlaufen. Meine Funktion "_MyTicksToTime" braucht unterschiedlich lange (je nach Anzahl der Ticks). Da ich den TimerDiff innerhalb der Schleife auslese, fällt die Ausführungszeit der Funktion da mit rein.
    Ich habe das ganze Script jetzt mal auf nur einen Timer reduziert und den Einfluß der Funktion ausgeschaltet. Wenn man dann noch den AdlibRegister-Aufruf auf 10 ms verkürzt, laufen alle Timer völlig synchron. Bei mir selbst mit 20 Timern. :)

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $UDM_SETACCEL = 1131
    Global Const $UDM_SETRANGE32 = 1135
    Global $UDACCEL = DllStructCreate("UINT nSec; UINT nInc")
    Global $pUDACCEL = DllStructGetPtr($UDACCEL)
    DllStructSetData($UDACCEL, "nSec", 0)
    DllStructSetData($UDACCEL, "nInc", 15) ; Sprungweite 15 Minuten

    [/autoit] [autoit][/autoit] [autoit]

    Global $iAdlibTicks = 10 ; ms für den AdlibRegister-Aufruf
    Global $iTimerCount = 20 ; Anzahl der Timer
    Global $aidTimerDisplay[$iTimerCount], $aidUpDownButton[$iTimerCount]
    Global $aidLED[$iTimerCount], $aidStartButton[$iTimerCount]
    Global $aTimer[$iTimerCount], $aTimerStart[$iTimerCount]
    Global $iProgTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate($iTimerCount & ' Timer', 660, Int($iTimerCount / 5) * 140 + 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    For $i = 0 To $iTimerCount - 1
    $aTimerStart[$i] = 15 ; TimerStart auf 15 Minuten vorbelegen
    GUICtrlCreateLabel(StringFormat('Timer %02i', $i+1), 10 + Mod($i, 5) * 130, 20 + Int($i/5) * 140, 100, 32, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 400, 0, 'Tahoma')
    $aidTimerDisplay[$i] = GUICtrlCreateInput('15:00.000', 10 + Mod($i, 5) * 130, 50 + Int($i/5) * 140, 116, 32, $ES_READONLY)
    GUICtrlSetOnEvent(-1, '_ChangeTime')
    GUICtrlSetFont(-1, 14, 400, 0, 'Tahoma')
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $aidUpDownButton[$i] = GUICtrlCreateUpdown(-1)
    GUICtrlSendMsg(-1, $UDM_SETRANGE32, 15, 45) ; Wertebereich 15 - 45 Minuten
    GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL)
    $aidLED[$i] = GUICtrlCreateLabel('', 10 + Mod($i, 5) * 130, 91 + Int($i/5) * 140, 16, 16, Default, $WS_EX_CLIENTEDGE)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $aidStartButton[$i] = GUICtrlCreateButton('Start', 28 + Mod($i, 5) * 130, 88 + Int($i/5) * 140, 98, 22)
    GUICtrlSetOnEvent(-1, '_StartTimer')
    Next
    GUICtrlCreateButton('Alle starten', 140, Int($iTimerCount / 5) * 140, 116, 30)
    GUICtrlSetOnEvent(-1, '_StartAll')
    GUICtrlCreateButton('Alle stoppen', 400, Int($iTimerCount / 5) * 140, 116, 30)
    GUICtrlSetOnEvent(-1, '_StopAll')
    GUISetState()
    AdlibRegister('_Timer', $iAdlibTicks)
    WinWaitClose($hGui)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _CloseGui()
    AdlibUnRegister('_Timer')
    GUIDelete($hGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Timer()
    Local $aTicks[$iTimerCount], $iTicks = TimerDiff($iProgTimer)
    For $i = 0 To $iTimerCount - 1
    $aTicks[$i] = ($iTicks - $aTimer[$i])
    Next
    For $i = 0 To $iTimerCount - 1
    If BitAND(GUICtrlGetState($aidUpDownButton[$i]), $GUI_DISABLE) Then
    $iTicks = $aTimerStart[$i] * 60000 - $aTicks[$i]
    GUICtrlSetData($aidTimerDisplay[$i], _MyTicksToTime($iTicks))
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MyTicksToTime($iTicks)
    Local $sOut = ''
    $sOut = StringRight('0' & Int($iTicks / 60000), 2)
    $iTicks = Mod($iTicks, 60000)
    $sOut &= ':' & StringRight('0' & Int($iTicks / 1000), 2)
    $iTicks = Mod($iTicks, 1000)
    Return $sOut & '.' & StringRight('00' & $iTicks, 3)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeTime()
    Local $iCount = (@GUI_CtrlId - $aidTimerDisplay[0]) / 5
    $aTimerStart[$iCount] = GUICtrlRead(@GUI_CtrlId)
    GUICtrlSetData(@GUI_CtrlId, $aTimerStart[$iCount] & ':00.000')
    GUICtrlSetState($aidStartButton[$iCount], $GUI_FOCUS)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartAll()
    Local $iTimerDiff = TimerDiff($iProgTimer)
    For $i = 0 To $iTimerCount - 1
    GUICtrlSetOnEvent($aidStartButton[$i], '_StopTimer')
    GUICtrlSetData($aidStartButton[$i], 'Stop')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$i], 0x00FF00)
    $aTimer[$i] = $iTimerDiff
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll()
    For $i = 0 To $iTimerCount - 1
    GUICtrlSetOnEvent($aidStartButton[$i], '_StartTimer')
    GUICtrlSetData($aidStartButton[$i], 'Start')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$i], 0xFF0000)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartbutton[0]) / 5
    GUICtrlSetOnEvent(@GUI_CtrlId, '_StopTimer')
    GUICtrlSetData(@GUI_CtrlId, 'Stop')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$iCount], 0x00FF00)
    $aTimer[$iCount] = TimerDiff($iProgTimer)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartbutton[0]) / 5
    GUICtrlSetOnEvent(@GUI_CtrlId, '_StartTimer')
    GUICtrlSetData(@GUI_CtrlId, 'Start')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$iCount], 0xFF0000)
    EndFunc

    [/autoit]
  • 10er Countdown mit Abfrage

    • Oscar
    • 25. Oktober 2013 um 19:42

    Ich wollte doch mal sehen, wie man sowas programmieren kann und habe mal ein Script erstellt:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $UDM_SETACCEL = 1131
    Global Const $UDM_SETRANGE32 = 1135
    Global $UDACCEL = DllStructCreate("UINT nSec; UINT nInc")
    Global $pUDACCEL = DllStructGetPtr($UDACCEL)
    DllStructSetData($UDACCEL, "nSec", 0)
    DllStructSetData($UDACCEL, "nInc", 15) ; Sprungweite 15 Minuten

    [/autoit] [autoit][/autoit] [autoit]

    Global $iAdlibTicks = 20 ; ms für den AdlibRegister-Aufruf
    Global $iTimerCount = 10 ; Anzahl der Timer
    Global $aidTimerDisplay[$iTimerCount], $aidUpDownButton[$iTimerCount]
    Global $aidLED[$iTimerCount], $aidStartButton[$iTimerCount]
    Global $aTimer[$iTimerCount], $aTimerStart[$iTimerCount]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate($iTimerCount & ' Timer', 660, Int($iTimerCount / 5) * 140 + 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    For $i = 0 To $iTimerCount - 1
    $aTimerStart[$i] = 15 ; TimerStart auf 15 Minuten vorbelegen
    GUICtrlCreateLabel(StringFormat('Timer %02i', $i+1), 10 + Mod($i, 5) * 130, 20 + Int($i/5) * 140, 100, 32, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 400, 0, 'Tahoma')
    $aidTimerDisplay[$i] = GUICtrlCreateInput('15:00.000', 10 + Mod($i, 5) * 130, 50 + Int($i/5) * 140, 116, 32, $ES_READONLY)
    GUICtrlSetOnEvent(-1, '_ChangeTime')
    GUICtrlSetFont(-1, 14, 400, 0, 'Tahoma')
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $aidUpDownButton[$i] = GUICtrlCreateUpdown(-1)
    GUICtrlSendMsg(-1, $UDM_SETRANGE32, 15, 45) ; Wertebereich 15 - 45 Minuten
    GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL)
    $aidLED[$i] = GUICtrlCreateLabel('', 10 + Mod($i, 5) * 130, 91 + Int($i/5) * 140, 16, 16, Default, $WS_EX_CLIENTEDGE)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $aidStartButton[$i] = GUICtrlCreateButton('Start', 28 + Mod($i, 5) * 130, 88 + Int($i/5) * 140, 98, 22)
    GUICtrlSetOnEvent(-1, '_StartTimer')
    Next
    GUICtrlCreateButton('Alle starten', 140, Int($iTimerCount / 5) * 140, 116, 30)
    GUICtrlSetOnEvent(-1, '_StartAll')
    GUICtrlCreateButton('Alle stoppen', 400, Int($iTimerCount / 5) * 140, 116, 30)
    GUICtrlSetOnEvent(-1, '_StopAll')
    GUISetState()
    AdlibRegister('_Timer', $iAdlibTicks)
    WinWaitClose($hGui)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _CloseGui()
    AdlibUnRegister('_Timer')
    GUIDelete($hGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Timer()
    Local $iTicks
    For $i = 0 To $iTimerCount - 1
    If BitAND(GUICtrlGetState($aidUpDownButton[$i]), $GUI_DISABLE) Then
    $iTicks = $aTimerStart[$i] * 60000 - TimerDiff($aTimer[$i])
    GUICtrlSetData($aidTimerDisplay[$i], _MyTicksToTime($iTicks))
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _MyTicksToTime($iTicks)
    Local $sOut = ''
    $sOut = StringRight('0' & Int($iTicks / 60000), 2)
    $iTicks = Mod($iTicks, 60000)
    $sOut &= ':' & StringRight('0' & Int($iTicks / 1000), 2)
    $iTicks = Mod($iTicks, 1000)
    Return $sOut & '.' & StringRight('00' & $iTicks, 3)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeTime()
    Local $iCount = (@GUI_CtrlId - $aidTimerDisplay[0]) / 5
    $aTimerStart[$iCount] = GUICtrlRead(@GUI_CtrlId)
    GUICtrlSetData(@GUI_CtrlId, $aTimerStart[$iCount] & ':00.000')
    GUICtrlSetState($aidStartButton[$iCount], $GUI_FOCUS)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartAll()
    For $i = 0 To $iTimerCount - 1
    GUICtrlSetOnEvent($aidStartButton[$i], '_StopTimer')
    GUICtrlSetData($aidStartButton[$i], 'Stop')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$i], 0x00FF00)
    $aTimer[$i] = TimerInit()
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll()
    For $i = 0 To $iTimerCount - 1
    GUICtrlSetOnEvent($aidStartButton[$i], '_StartTimer')
    GUICtrlSetData($aidStartButton[$i], 'Start')
    GUICtrlSetState($aidUpDownButton[$i], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$i], 0xFF0000)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartbutton[0]) / 5
    GUICtrlSetOnEvent(@GUI_CtrlId, '_StopTimer')
    GUICtrlSetData(@GUI_CtrlId, 'Stop')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_DISABLE)
    GUICtrlSetBkColor($aidLED[$iCount], 0x00FF00)
    $aTimer[$iCount] = TimerInit()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopTimer()
    Local $iCount = (@GUI_CtrlId - $aidStartbutton[0]) / 5
    GUICtrlSetOnEvent(@GUI_CtrlId, '_StartTimer')
    GUICtrlSetData(@GUI_CtrlId, 'Start')
    GUICtrlSetState($aidUpDownButton[$iCount], $GUI_ENABLE)
    GUICtrlSetBkColor($aidLED[$iCount], 0xFF0000)
    EndFunc

    [/autoit]

    Beim Start aller Timer laufen diese relativ synchron. Lediglich die Millisekunden weichen voneinander ab (beim Stoppen aller Timer). Wobei die Abweichung nicht linear in der Reihenfolge der Timer ist, was ich etwas merkwürdig finde. Vielleicht hat dazu mal jemand eine Erklärung parat?

  • FileSearch

    • Oscar
    • 23. Oktober 2013 um 19:28

    Zu 1.) Stimmt, das muss ich noch ändern. Danke!
    Zu 2.) Es gibt so viele Dateiendungen. Wie will man da eine Auswahl vorgeben?
    Außerdem gibt es ja die Möglichkeit "reguläre Ausdrücke" zu benutzen. Dort kannst Du dann sowas "\A.*\.(exe|com|bat)\z" als Suchbegriff eingeben (innerhalb der Klammern beliebig erweiterbar).

  • FileSearch

    • Oscar
    • 23. Oktober 2013 um 19:01

    Ich weiß, dass es bereits Hunderte von Datei-Suchprogrammen gibt und es gibt sogar schnellere als dieses hier, aber ich hatte mal Lust sowas selbst zu schreiben und wollte mal sehen, wie schnell oder langsam das mit AutoIt wird.
    Erstaunt war ich dann schon, dass die Suche gar nicht so lange dauert. Ich habe mal einen beliebigen Suchbegriff (*kugel*) genommen und ihn auf meine 4 Festplatten (>560.000 Dateien) losgelassen. Die Suche hat dann etwa 1 Minute und 30 Sekunden gedauert und ich hatte 75 Treffer. Je mehr Treffer, desto länger dauert die Suche.
    Man kann diverse Einstellungen vornehmen (Erklärung über Tooltips).
    Das Programm ist noch nicht ganz fertig. Die Einstellungen werden noch nicht gespeichert, aber ansonsten sollte alles funktionieren.
    Wenn jemand Fehler findet oder Verbesserungsvorschläge hat, immer her damit. :D

    Screenshot:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=prog.ico
    #AutoIt3Wrapper_Outfile=FileSearch.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Description=FileSearch
    #AutoIt3Wrapper_Res_Fileversion=0.9.0.1
    #AutoIt3Wrapper_Res_LegalCopyright=Oscar (http://www.autoit.de)
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GuiComboBox.au3>
    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiStatusBar.au3>
    #include <ListViewConstants.au3>
    #include <Misc.au3>
    #include <StaticConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitle = 'FileSearch'
    Global $sVersion = '0.9.0.1'
    _Singleton($sTitle & $sVersion)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sDate = '23.10.2013'
    Global $sAppDir = @AppDataDir & '\FileSearch\'
    If Not FileExists($sAppDir) Then DirCreate($sAppDir)
    Global $sIniFile = $sAppDir & 'FileSearch.ini'
    Global $fStartSearch = False, $iFoundCount = 0, $iAllFiles = 0, $iSearchTimer, $aFileList[1][1]
    Global $aSearchExt[6] = ['', '\.(mpg|mpeg|avi|mkv|mp4)', '\.(wav|wma|mp1|mp2|mp3|ogg|aif|aiff|ac3|rm)', '\.(bmp|jpg|gif|png|tif|tiff)', '\.(txt|pdf|ini|reg|nfo)', '\.(doc|docx|pps|ppt|odt|ods|odp)'], $sSearchExt = $aSearchExt[0]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate(StringFormat('%s v%3.3s', $sTitle, $sVersion), 1000, 585)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUISetIcon(@ScriptDir & '\FileSearch.exe', 0)
    GUISetBkColor(0xBBBBBB)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateGroup('Einstellungen:', 10, 6, 980, 120)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    Global $idSetCaseSensitiv = GUICtrlCreateCheckbox('Groß-/Kleinschreibung beachten', 25, 24, 280, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Ist der Haken gesetzt, wird bei der Suche die Groß-/Kleinschreibung des Suchbegriffs beachtet.' & @CR & 'Ohne Haken ist die Groß-/Kleinschreibung egal.', '', 1, 1)
    Global $idSetHiddenView = GUICtrlCreateCheckbox('Versteckte und Systemdateien anzeigen', 25, 48, 280, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Ist der Haken gesetzt, werden auch versteckte und Systemdateien angezeigt.', '', 1, 1)
    Global $idSetRegEx = GUICtrlCreateCheckbox('RegEx verwenden (für Profis)', 25, 72, 260, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Der Suchbegriff kann einen "regulären Ausdruck" enthalten.' & @CR & 'Damit lassen sich komplexere Suchmuster erstellen.' & @CR & 'Weitere Informationen zu RegEx findet man im Internet.', '', 1, 1)
    Global $idSetView = GUICtrlCreateCheckbox('Ergebnisse sofort anzeigen', 25, 96, 280, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Die Suchergebnisse werden sofort angezeigt und können auch schon per Doppelklick aufgerufen werden,' & @CR & 'aber die Suche dauert länger, wenn viele Dateien gefunden werden.', '', 1, 1)
    GUICtrlSetState(-1, $GUI_CHECKED)
    Global $idSetDrive = GUICtrlCreateRadio('Laufwerke:', 310, 23, 90, 25)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Hier können die Laufwerke ausgewählt werden, die durchsucht werden sollen.' & @CR & 'Standardmäßig sind alle Festplatten ausgewählt.', '', 1, 1)
    GUICtrlSetOnEvent(-1, '_ChangeSearchPath')
    Global $aidDrives
    _CreateDrives()
    Global $idSetDir = GUICtrlCreateRadio('Verzeichnis:', 310, 95, 90, 25)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Hier kann ein Verzeichnis ausgewählt werden.' & @CR & 'Dieses Verzeichnis wird dann rekursiv (inkl. Unterverzeichnissen) durchsucht.', '', 1, 1)
    GUICtrlSetOnEvent(-1, '_ChangeSearchPath')
    Global $idSetSearchDir = GUICtrlCreateLabel('', 410, 96, 520, 22, $SS_SUNKEN)
    GUICtrlSetFont(-1, 12, 400, 0, 'Tahoma')
    GUICtrlSetBkColor($idSetSearchDir, 0xCCCCCC)
    GUICtrlSetTip(-1, 'Dieses Verzeichnis wird rekursiv (inkl. Unterverzeichnissen) durchsucht.', '', 1, 1)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $idGetSearchDir = GUICtrlCreateButton('...', 931, 94, 36, 26)
    GUICtrlSetFont(-1, 12, 400, 0, 'Tahoma')
    GUICtrlSetTip(-1, 'Öffnet eine Verzeichnis-Auswahlbox.', '', 1, 1)
    GUICtrlSetOnEvent(-1, '_SelectSearchDir')
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateGroup('', -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateGroup('Suchbegriff: (Platzhalter: * = Null oder mehr beliebige Zeichen, ? = ein beliebiges Zeichen)', 10, 140, 980, 92)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    GUICtrlCreateLabel('Suche auf folgende Dateiendungen beschränken:', 30, 201, 320, 28)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    Global $idSearchExt = GUICtrlCreateCombo('Alle Dateien (*.*)', 360, 198, 440, 28, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, 'Videodateien (*.mpg *.avi *.mkv *.mp4)')
    GUICtrlSetData(-1, 'Audiodateien (*.wav *.wma *.mp1 *.mp2 *.mp3 *.ogg *.aiff *.ac3 *.rm)')
    GUICtrlSetData(-1, 'Grafikdateien (*.bmp *.jpg *.gif *.png *.tif)')
    GUICtrlSetData(-1, 'Textdateien (*.txt *.pdf *.ini *.reg *.nfo)')
    GUICtrlSetData(-1, 'Officedateien (*.doc *.xls *.pps *.ppt *.odt *.ods *.odp)')
    GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma')
    GUICtrlSetOnEvent(-1, '_GetSearchExt')
    Global $idSearchString = GUICtrlCreateInput('', 30, 168, 770, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma')
    Global $idSearchStart = GUICtrlCreateButton('Start', 810, 166, 160, 54, $BS_DEFPUSHBUTTON)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    GUICtrlSetImage(-1, 'shell32.dll', -23, 1)
    GUICtrlSetOnEvent(-1, '_StartSearch')
    GUICtrlCreateGroup('', -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $idFoundGroup = GUICtrlCreateGroup('Gefundene Dateien:', 10, 248, 980, 300)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    Global $idFileList = GUICtrlCreateListView('Dateiname|Erw.|Größe (Bytes)|Attr.|Erstellungsdatum|Änderungsdatum|Verzeichnis', 20, 272, 960, 265, $LVS_SHOWSELALWAYS)
    GUICtrlSetOnEvent(-1, '_SortFileList')
    Global $hFileList = GUICtrlGetHandle($idFileList)
    _GUICtrlListView_JustifyColumn($hFileList, 2, 1)
    Global $idCMFound = GUICtrlCreateContextMenu($idFileList)
    Global $idCMAllFiles = GUICtrlCreateMenuItem('Alle Dateinamen in eine Textdatei speichern', $idCMFound)
    GUICtrlSetOnEvent(-1, '_SaveFilenamesToTxt')
    Global $idCMMarkFiles = GUICtrlCreateMenuItem('Die markierten Dateinamen in eine Textdatei speichern', $idCMFound)
    GUICtrlSetOnEvent(-1, '_SaveFilenamesToTxt')
    GUICtrlCreateGroup('', -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hInfoIcon = _WinAPI_LoadShell32Icon(221)
    Global $hSearchIcon = _WinAPI_LoadShell32Icon(22)
    Global $hDiskIcon = _WinAPI_LoadShell32Icon(8)
    Global $hAttentionIcon = _WinAPI_LoadShell32Icon(77)
    Global $aParts[3] = [240,800, 840]
    Global $hStatus = _GUICtrlStatusBar_Create($hGui)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_RegisterSortCallBack($hFileList) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
    ;~ _ChangeSearchPath()
    GUISetState()
    GUICtrlSetState($idSetDrive, $GUI_CHECKED)
    GUICtrlSetState($idSearchString, $GUI_FOCUS)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hInfoIcon)
    _GUICtrlStatusBar_SetText($hStatus, 'Bereit.', 0)
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(20)
    If $fStartSearch Then _Search()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _SaveFilenamesToTxt()
    Local $aSelItems, $aItems[1], $iItemCount = _GUICtrlListView_GetItemCount($hFileList), $sDefaultFilename, $sSaveFile, $hFile
    If $iItemCount = 0 Then Return ; wenn keine Einträge vorhanden sind, dann Funktion verlassen
    Switch @GUI_CtrlId
    Case $idCMAllFiles ; Alle Dateinamen auslesen
    ReDim $aItems[$iItemCount]
    For $i = 0 To $iItemCount - 1
    $aItems[$i] = _GUICtrlListView_GetItemTextString($hFileList, $i)
    Next
    Case $idCMMarkFiles ; nur die markierten Dateinamen auslesen
    $aSelItems = ControlListView($hGui, '', $idFileList, 'GetSelected', 1) ; markierte Items auslesen
    If $aSelItems = '' Then Return ; wenn keine Einträge markiert sind, dann Funktion verlassen
    $aSelItems = StringSplit($aSelItems, '|', 2) ; ansonsten Array mit Indizes erstellen
    ReDim $aItems[UBound($aSelItems)] ; das Array entsprechend dimensionieren
    For $i = 0 To UBound($aSelItems) - 1
    $aItems[$i] = _GUICtrlListView_GetItemTextString($hFileList, $aSelItems[$i])
    Next
    EndSwitch
    $sDefaultFilename = StringFormat('Ergebnis der Suche (%s%s%s %s%s%s).txt', @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC) ; Default-Dateinamen erstellen
    $sSaveFile = FileSaveDialog($sTitle & ' - Ergebnis der Suche speichern...', '', 'Textdateien (*.txt)', 18, $sDefaultFilename, $hGui) ; Benutzer nach Speicherort und Dateinamen fragen
    If @error Then Return ; wenn dieser auf [Abbrechen] geklickt hat, dann die Funktion verlassen
    $hFile = FileOpen($sSaveFile, 2) ; ausgewählte Datei zum speichern öffnen
    If $hFile = -1 Then ; wenn ein Fehler aufgetreten ist, dann den Benutzer informieren
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hAttentionIcon)
    _GUICtrlStatusBar_SetText($hStatus, 'Datei konnte nicht gespeichert werden!', 0)
    Else ; ansonsten die Einträge in die Datei speichern
    For $i = 0 To UBound($aItems) - 1
    FileWrite($hFile, StringRegExpReplace($aItems[$i], '(.+)\|(.+)\|(.+)\|(.+)\|(.+)\|(.+)\|(.+)', '"$7$1.$2"' & @CRLF & '$4' & @TAB & '$5 $6 $3' & @CRLF & @CRLF))
    Next
    FileClose($hFile) ; Datei schließen
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hInfoIcon) ; und Benutzer informieren
    _GUICtrlStatusBar_SetText($hStatus, 'Datei gespeichert!', 0)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SortFileList()
    Local $iItemCount = _GUICtrlListView_GetItemCount($hFileList), $iColumnCount = _GUICtrlListView_GetColumnCount($hFileList)
    If $iItemCount = 0 Then Return
    Local $aList = $aFileList ; lokale Kopie des ListView-Arrays erstellen
    Local $iSortColumn = GUICtrlGetState($idFileList), $iDescending = 0
    Local $hFileListHeader = _GUICtrlListView_GetHeader($hFileList)
    Local $iItemFlags = _GUICtrlHeader_GetItemFlags($hFileListHeader, $iSortColumn) ; Flags auslesen (Pfeil nach oben/unten)
    GUISetState(@SW_LOCK, $hGui)
    For $i = 0 To $iColumnCount - 1
    _GUICtrlHeader_SetItemFlags($hFileListHeader, $i, 0)
    Next
    If BitAND($iItemFlags, 8) Then ; wenn Pfeil nach oben, dann Sortierrichtung umkehren
    $iDescending = 1
    _GUICtrlHeader_SetItemFlags($hFileListHeader, $iSortColumn, 4) ; Pfeil nach unten setzen
    Else
    _GUICtrlHeader_SetItemFlags($hFileListHeader, $iSortColumn, 8) ; Pfeil nach oben setzen
    EndIf
    ToolTip('Die Liste wird sortiert!' & @CR & 'Bitte warten...', Default, Default, $sTitle, 1, 1)
    _ArraySort($aList, $iDescending, 0, 0, $iSortColumn) ; lokale Kopie sortieren
    For $i = 0 To $iItemCount - 1
    $aList[$i][2] = _StringAddThousandsSep($aList[$i][2]) ; Tausender-Punkte wieder setzen
    $aList[$i][4] = StringRegExpReplace($aList[$i][4], '(\d{4})\.(\d{2})\.(\d{2}) (.+)', '$3.$2.$1 $4') ; Datum wieder nach TT.MM.YYYY
    $aList[$i][5] = StringRegExpReplace($aList[$i][5], '(\d{4})\.(\d{2})\.(\d{2}) (.+)', '$3.$2.$1 $4') ; Datum wieder nach TT.MM.YYYY
    Next
    _GUICtrlListView_DeleteAllItems($hFileList)
    _GUICtrlListView_AddArray($hFileList, $aList)
    ToolTip('')
    GUISetState(@SW_UNLOCK, $hGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ReadListView2Array()
    Local $iItemCount = _GUICtrlListView_GetItemCount($hFileList), $iColumnCount = _GUICtrlListView_GetColumnCount($hFileList)
    If $iItemCount = 0 Then Return
    ReDim $aFileList[$iItemCount][$iColumnCount]
    For $i = 0 To $iItemCount - 1
    For $j = 0 To $iColumnCount - 1
    Switch $j
    Case 2
    $aFileList[$i][$j] = Number(StringReplace(_GUICtrlListView_GetItemText($hFileList, $i, $j), '.', '')) ; Tausender-Punkte entfernen (wird sonst falsch sortiert)
    Case 4, 5
    $aFileList[$i][$j] = StringRegExpReplace(_GUICtrlListView_GetItemText($hFileList, $i, $j), '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3.$2.$1 $4') ; Datum umwandeln nach YYYY.MM.TT
    Case Else
    $aFileList[$i][$j] = _GUICtrlListView_GetItemText($hFileList, $i, $j)
    EndSwitch
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetSearchExt()
    $sSearchExt = $aSearchExt[_GUICtrlComboBox_GetCurSel($idSearchExt)]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $tNMHDR, $hWndFrom, $tInfo, $iIndex, $sDir, $sFile
    Local Const $tagNMITEMACTIVATE64 = "hwnd hWndFrom;uint_ptr IDFrom;INT_ptr Code;int Index;int SubItem;int NewState;int OldState;" & _
    "int Changed;int X;int Y;int lParam;int KeyFlags" ; als Alternative für 64 Bit Support, Danke progandy!
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    Switch $hWndFrom
    Case $hFileList
    Switch DllStructGetData($tNMHDR, 'Code')
    Case $NM_DBLCLK
    $tInfo = DllStructCreate($tagNMITEMACTIVATE64, $ilParam)
    $iIndex = DllStructGetData($tInfo, 'Index')
    If $iIndex > -1 Then
    $sDir = _GUICtrlListView_GetItemText($hFileList, $iIndex, 6)
    $sFile = _GUICtrlListView_GetItemText($hFileList, $iIndex, 0) & '.' & _GUICtrlListView_GetItemText($hFileList, $iIndex, 1)
    ShellExecute($sDir & $sFile, '', $sDir)
    EndIf
    EndSwitch
    EndSwitch
    $tNMHDR = ''
    $tInfo = ''
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SelectSearchDir()
    Local $sPath = FileSelectFolder('Bitte das Suchverzeichnis auswählen!' & @CR & 'Dieses Verzeichnis wird dann rekursiv durchsucht.', '', 2, '', $hGui)
    If FileExists($sPath) Then
    GUICtrlSetData($idSetSearchDir, $sPath)
    GUICtrlSetState($idSetDrive, $GUI_UNCHECKED)
    GUICtrlSetState($idSetDir, $GUI_CHECKED)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Search()
    Local $sSearchword = GUICtrlRead($idSearchString), $sPath = ''
    If $sSearchword = '' Then $sSearchword = '*'
    If Not BitAND(GUICtrlRead($idSetRegEx), $GUI_CHECKED) Then
    $sSearchword = StringRegExpReplace($sSearchword, '[\\:/{}()\[\]]', '')
    $sSearchword = StringReplace($sSearchword, '.', '\.')
    $sSearchword = StringReplace($sSearchword, '*', '.*')
    $sSearchword = StringReplace($sSearchword, '?', '.')
    $sSearchword = '\A' & $sSearchword & $sSearchExt & '\z'
    EndIf
    If Not BitAND(GUICtrlRead($idSetCaseSensitiv), $GUI_CHECKED) Then $sSearchword = '(?i)' & $sSearchword
    _GUICtrlListView_DeleteAllItems($hFileList)
    If Not BitAND(GUICtrlRead($idSetView), $GUI_CHECKED) Then
    _GUICtrlListView_BeginUpdate($hFileList)
    GUICtrlSetState($idFileList, $GUI_DISABLE)
    EndIf
    ;~ ConsoleWrite('Suchbegriff: ' & $sSearchword & @CR)
    $iFoundCount = 0
    $iAllFiles = 0
    $iSearchTimer = TimerInit()
    If BitAND(GUICtrlRead($idSetDrive), $GUI_CHECKED) Then ; Wenn Laufwerkssuche ausgewählt
    For $i = 0 To UBound($aidDrives) - 1
    If Not $fStartSearch Then ExitLoop
    If BitAND(GUICtrlRead($aidDrives[$i]), $GUI_CHECKED) Then ; Laufwerk angehakt?
    If DriveStatus(GUICtrlRead($aidDrives[$i], 1)) = 'READY' Then ; Laufwerk ist bereit (Datenträger vorhanden)?
    $sPath = GUICtrlRead($aidDrives[$i], 1)
    Local $hDll = DllOpen('kernel32.dll')
    _SearchRekursive($sPath, $sSearchword, $hDll)
    DllClose($hDll)
    EndIf
    EndIf
    Next
    Else ; Verzeichnissuche ausgewählt
    $sPath = GUICtrlRead($idSetSearchDir)
    Local $hDll = DllOpen('kernel32.dll')
    _SearchRekursive($sPath, $sSearchword, $hDll)
    DllClose($hDll)
    EndIf
    If Not BitAND(GUICtrlRead($idSetView), $GUI_CHECKED) Then
    _GUICtrlListView_EndUpdate($hFileList)
    GUICtrlSetState($idFileList, $GUI_ENABLE)
    EndIf
    _CancelSearch()
    Sleep(250)
    _ReadListView2Array()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SearchRekursive($sPath, $sSearchword, $hDll)
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    Local Static $iTimer = TimerInit()
    Local $hSearch = FileFindFirstFile($sPath & '*'), $sFile = '', $aFileAtt, $iIndex = 0, $iNewFound = 0
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop ; wenn ein Fehler (kein weiteres Verzeichnis und/oder Datei vorhanden) aufgetreten ist, die Suchschleife verlassen
    If @extended Then ; $sFile ist ein Verzeichnis
    If Not $fStartSearch Then ExitLoop ; Wenn Benutzer auf Stop geklickt hat, Suchschleife verlassen
    $aFileAtt = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile) ; Attribute auslesen
    If @error Or BitAND($aFileAtt[0], $FILE_ATTRIBUTE_REPARSE_POINT) Then ContinueLoop ; Wenn NTFS-ReparsePoint, dann weitersuchen.
    If Not BitAND(GUICtrlRead($idSetHiddenView), $GUI_CHECKED) Then
    If BitAND($aFileAtt[0], $FILE_ATTRIBUTE_SYSTEM) Or BitAND($aFileAtt[0], $FILE_ATTRIBUTE_HIDDEN) Then ContinueLoop ; Wenn versteckte oder Systemdatei, dann weitersuchen.
    EndIf
    _SearchRekursive($sPath & $sFile, $sSearchword, $hDll) ; sonst ins Unterverzeichnis wechseln (rekursiv)
    Else ; $sFile ist eine Datei
    If Not $fStartSearch Then ExitLoop ; Wenn Benutzer auf Stop geklickt hat, Suchschleife verlassen
    If Not BitAND(GUICtrlRead($idSetHiddenView), $GUI_CHECKED) Then
    $aFileAtt = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile) ; Attribute auslesen
    If @error Or BitAND($aFileAtt[0], $FILE_ATTRIBUTE_SYSTEM) Or BitAND($aFileAtt[0], $FILE_ATTRIBUTE_HIDDEN) Then ContinueLoop ; Wenn versteckte oder Systemdatei, dann weitersuchen.
    EndIf
    $iAllFiles += 1
    If StringRegExp($sFile, $sSearchword) Then ; Wenn das Suchwort im Dateinamen enthalten ist, dann neuen Listview-Eintrag erzeugen.
    If StringInStr($sFile, '.') Then ; Punkt im Dateinamen vorhanden, dann trennen nach Dateiname|Erweiterung
    $iIndex = _GUICtrlListView_AddItem($hFileList, StringRegExpReplace($sFile, '(.+)\..+', '$1'), 0, _GUICtrlListView_GetItemCount($hFileList) + 9999)
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, StringRegExpReplace($sFile, '.+\.(.+)', '$1'), 1)
    Else ; ansonsten nur den Dateinamen übernehmen und Erweiterung leer lassen
    $iIndex = _GUICtrlListView_AddItem($hFileList, $sFile)
    EndIf
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, _StringAddThousandsSep(FileGetSize($sPath & $sFile)), 2) ; Dateigröße hinzufügen
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, FileGetAttrib($sPath & $sFile), 3) ; Dateiattribute hinzufügen
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, StringRegExpReplace(FileGetTime($sPath & $sFile, 0, 1), '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$3.$2.$1 $4:$5:$6'), 4) ; Erstellungsdatum hinzufügen
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, StringRegExpReplace(FileGetTime($sPath & $sFile, 1, 1), '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$3.$2.$1 $4:$5:$6'), 5) ; Änderungsdatum hinzufügen
    _GUICtrlListView_AddSubItem($hFileList, $iIndex, $sPath, 6) ; Verzeichnis hinzufügen
    $iFoundCount += 1
    EndIf
    EndIf
    If TimerDiff($iTimer) > 250 Then ; Die Meldungen in der Statuszeile nur alle 250ms aktualisieren (erhöht die Suchgeschwindigkeit)
    $iTimer = TimerInit()
    _GUICtrlStatusBar_SetText($hStatus, 'Suche läuft... (' & _StringAddThousandsSep($iFoundCount) & ' Treffer)', 0)
    _GUICtrlStatusBar_SetText($hStatus, $sPath, 1)
    _GUICtrlStatusBar_SetText($hStatus, _StringAddThousandsSep($iAllFiles) & ' Dateien', 2)
    If $iFoundCount <> $iNewFound Then
    $iNewFound = $iFoundCount
    _GUICtrlListView_SetColumnWidth($idFileList, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($idFileList, 6, $LVSCW_AUTOSIZE)
    EndIf
    EndIf
    WEnd
    EndIf
    FileClose($hSearch)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartSearch()
    $fStartSearch = True
    GUICtrlSetState($idSearchString, $GUI_DISABLE)
    GUICtrlSetState($idSearchExt, $GUI_DISABLE)
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hSearchIcon)
    _GUICtrlStatusBar_SetText($hStatus, 'Suche...', 0)
    GUICtrlSetData($idSearchStart, 'Stop')
    GUICtrlSetOnEvent($idSearchStart, '_CancelSearch')
    GUICtrlSetImage($idSearchStart, 'shell32.dll', -110, 1)
    GUISetCursor(1, 1, $hGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CancelSearch()
    $fStartSearch = False
    GUICtrlSetState($idSearchExt, $GUI_ENABLE)
    GUICtrlSetState($idSearchString, $GUI_ENABLE)
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hInfoIcon)
    _GUICtrlStatusBar_SetText($hStatus, 'Bereit.', 0)
    _GUICtrlStatusBar_SetText($hStatus, _StringAddThousandsSep($iFoundCount) & ' Treffer. Benötigte Zeit: ' & _TicksToTimeFormat(TimerDiff($iSearchTimer), '%hh:%mm:%ss.%ms'), 1)
    _GUICtrlStatusBar_SetText($hStatus, _StringAddThousandsSep($iAllFiles) & ' Dateien', 2)
    GUICtrlSetData($idSearchStart, 'Start')
    GUICtrlSetOnEvent($idSearchStart, '_StartSearch')
    GUICtrlSetImage($idSearchStart, 'shell32.dll', -23, 1)
    GUISetCursor(2, 0, $hGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CloseGui()
    _GUICtrlListView_UnRegisterSortCallBack($hFileList)
    _WinAPI_DestroyIcon($hInfoIcon)
    _WinAPI_DestroyIcon($hDiskIcon)
    _WinAPI_DestroyIcon($hSearchIcon)
    _WinAPI_DestroyIcon($hAttentionIcon)
    GUIDelete($hGui)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CreateDrives()
    If IsArray($aidDrives) Then
    For $i = UBound($aidDrives) To 0 Step -1
    GUICtrlDelete($aidDrives[$i])
    Next
    EndIf
    Local $aDrives = DriveGetDrive('ALL'), $iCount = 0
    Global $aidDrives[$aDrives[0]]
    For $i = 1 To $aDrives[0]
    Switch DriveStatus($aDrives[$i])
    Case 'READY', 'NOTREADY'
    $aidDrives[$iCount] = GUICtrlCreateCheckbox(StringUpper($aDrives[$i]), 410 + Mod($iCount, 13) * 44, 24 + Int($iCount / 13) * 22, 36, 22)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Hier können die Laufwerke ausgewählt werden, die durchsucht werden sollen.' & @CR & 'Standardmäßig sind alle Festplatten ausgewählt.', '', 1, 1)
    $iCount += 1
    EndSwitch
    Next
    _SetDriveCheckbox()
    ReDim $aidDrives[$iCount]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetDriveCheckbox($sState = $GUI_CHECKED, $sType = 'Fixed')
    For $i = 0 To UBound($aidDrives) - 1
    If $sType = 'ALL' Or (DriveGetType(GUICtrlRead($aidDrives[$i], 1)) = $sType) Then GUICtrlSetState($aidDrives[$i], $sState)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeSearchPath()
    If BitAND(GUICtrlRead($idSetDrive), $GUI_CHECKED) Then ; Laufwerke als Suchpfad ausgewählt
    _SetDriveCheckbox($GUI_ENABLE, 'ALL')
    GUICtrlSetBkColor($idSetSearchDir, 0xCCCCCC)
    GUICtrlSetState($idSetSearchDir, $GUI_DISABLE)
    GUICtrlSetState($idGetSearchDir, $GUI_DISABLE)
    Else ; Verzeichnis als Suchpfad
    GUICtrlSetBkColor($idSetSearchDir, 0xEEEEEE)
    GUICtrlSetState($idSetSearchDir, $GUI_ENABLE)
    GUICtrlSetState($idGetSearchDir, $GUI_ENABLE)
    _SetDriveCheckbox($GUI_DISABLE, 'ALL')
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _TicksToTimeFormat($iTicks, $sFormat = '%hh:%mm:%ss')
    ; Description:: Diese Funktion wandelt Millisekunden in ein anzugebenes Zeitformat um
    ; Parameter(s): $iTicks = Zeit in Millisekunden
    ; $sFormat:
    ; %ww für Wochen
    ; %dd für Tage
    ; %hh für Stunden
    ; %mm für Minuten
    ; %ss für Sekunden
    ; %ms für Millisekunden
    ; sonstige Zeichen, die dazwischen stehen, werden übernommen
    ; Requirement(s): -
    ; Return Value(s): Zeit im ausgewählten Format (String)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _TicksToTimeFormat($iTicks, $sFormat = '%hh:%mm:%ss')
    Local $aTime[6], $sOut, $aTimeFormat[6] = ['ww', 'dd', 'hh', 'mm', 'ss', 'ms'], $aFormat
    $aTime[4] = Int($iTicks / 1000)
    $aTime[5] = $iTicks - $aTime[4] * 1000
    $aTime[0] = Int($aTime[4] / 604800)
    $aTime[4] = Mod($aTime[4], 604800)
    $aTime[1] = Int($aTime[4] / 86400)
    $aTime[4] = Mod($aTime[4], 86400)
    $aTime[2] = Int($aTime[4] / 3600)
    $aTime[4] = Mod($aTime[4], 3600)
    $aTime[3] = Int($aTime[4] / 60)
    $aTime[4] = Mod($aTime[4], 60)
    $aFormat = StringRegExp($sFormat, '(?i)%([^%]+)', 3)
    If Not IsArray($aFormat) Then Return SetError(1, 0, $iTicks)
    For $i = 0 To UBound($aFormat) - 1
    For $j = 0 To UBound($aTimeFormat) - 1
    If StringLeft($aFormat[$i], 2) = $aTimeFormat[$j] Then $sOut &= StringFormat('%0' & 2 + ($j = 5) & 'i', $aTime[$j]) & StringMid($aFormat[$i], 3)
    Next
    Next
    Return $sOut
    EndFunc ;==>_TicksToTimeFormat

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _StringAddThousandsSep
    ; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
    ; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
    ; Parameters ....: $sString - The string to be converted.
    ; $sThousands - Optional: The Thousands delimiter
    ; $sDecimal - Optional: The decimal delimiter
    ; Return values .: Success - The string with Thousands delimiter added.
    ; Author ........: SmOke_N (orignal _StringAddComma
    ; Modified.......: Valik (complete re-write, new function name)
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================
    Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
    Local $sResult = "" ; Force string
    Local $rKey = "HKCU\Control Panel\International"
    If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
    If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
    Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
    If UBound($aNumber) = 2 Then
    Local $sLeft = $aNumber[0]
    While StringLen($sLeft)
    $sResult = $sThousands & StringRight($sLeft, 3) & $sResult
    $sLeft = StringTrimRight($sLeft, 3)
    WEnd
    $sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
    If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
    EndIf
    Return $sResult
    EndFunc ;==>_StringAddThousandsSep

    [/autoit]

    Dateien

    FileSearch_v09.zip 584,29 kB – 437 Downloads FileSearch.png 41,47 kB – 0 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™