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

Beiträge von BugFix

  • _GUICtrlListView_DeleteAllItems Parameter falsch erklärt

    • BugFix
    • 8. Juni 2012 um 18:13

    Ja, der Fehler ist reproduzierbar.
    Ursache: Item werden gelöscht, aber nicht die genutzen Ctrl-ID freigegeben, sodass bei neuen Item irgendwann die max. Anzahl an Ctrl von 65535 erreicht wird. Danach kann kein Item/Ctrl mehr erstellt werden.
    Einen Zusammenhang mit dem Handle besteht aber nicht. Dasselbe passiert, wenn die ID verwendet wird für _GUICtrlListView_DeleteAllItems.
    Insofern ist das sicherlich ein Bug, aber nicht in der Hilfe, sondern in der Funktion: _GUICtrlListView_DeleteAllItems.

  • _GUICtrlListView_DeleteAllItems Parameter falsch erklärt

    • BugFix
    • 8. Juni 2012 um 13:50
    Zitat von ohforf

    Ich hab das in meinem Programm falsch gemacht - wenn man mit _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($guiListView)) den Inhalt löscht und dann mit GUICtrlCreateListViewItem("wasauchimmer",$guiListView) wieder Items hinzufügt... und das viele male wiederholt, ist der Listview irgendwann leer und es lässt sich nichts mehr hinzufügen. GUICtrlCreateListViewItem gibt dann null zurück.


    Kann ich nicht bestätigen. Das ist völlig korrekt.
    Ausserdem brauchst du nicht das GUI-Handle, sondern das Handle des LV-Ctrl. ( GUICtrlGetHandle($guiListView) ??? )

    Ich benutze zur Erstellung immer

    [autoit]

    $LV = GuiCtrlCreateListview('Spalte1|Spalte2', ....)
    $hLV = GuiCtrlGetHandle($LV)

    [/autoit]

    Aktualisieren (neuer Inhalt) immer mit:

    [autoit]

    _GuiCtrlListview_DeleteAllItems($hLV)
    ; neue Item wieder mit
    GuiCtrlCreateListviewItem('Bla|Blub', $LV)

    [/autoit]

    Setze das seit Jahren in produktiver Umgebung ein, ohne jedes Problem.

    Wenn du vermeintliche Fehler zeigen möchtest, packe bitte ein Codebsp. dabei, mit dem der Fehler nachvollziehbar ist.

  • Problem Keybinder

    • BugFix
    • 7. Juni 2012 um 17:52
    Zitat von sf190

    Habe die dateien Mal drann gehangen


    Kleiner Tipp:
    Wenn es nicht gerade ein riesiges Skript ist, poste den Quelltext bitte direkt im Thread (Verwenden der Code-Tags). Denn nicht jeder mag extra eine Datei herunterladen um mal einen Blick draufzuwerfen. ;)

  • Problem Keybinder

    • BugFix
    • 7. Juni 2012 um 15:27

    Und wenn du jetzt noch eine Frage formulieren würdest, könnte dir sogar jemand antworten.. :whistling:

  • Fußball-Europameisterschaft (Tippspiel)

    • BugFix
    • 7. Juni 2012 um 09:53

    Jaja, die "Fragen"-Tipps. Mein Sohn hat zugesehen, was ich getippt habe und wurde fast wütend. :D
    Das passiert halt, wenn Realismus und Fanatismus aufeinandertreffen. :rofl:

  • [Tutorial] Sauber Programmieren

    • BugFix
    • 7. Juni 2012 um 09:48
    Zitat von CyRoX

    Gutes Tutorial, auch der Tipp mit dem Einrücken bei GUI-Element Optionen gefällt mir sehr gut und macht den Code wirklich (auch für andere) viel besser lesbar.


    Da siehst du mal, wie widersprüchlich das menschliche Empfindungen sind.
    Derartige Einrückungen stören aus meiner Sicht die Lesart. Denn primär dienen Einrückungen dazu eine Substruktur anzuzeigen, was hier eindeutig nicht der Fall ist.
    Ähnlich geht es mir mit Leerzeilen. Als ich mit VB anfing, stand in dem Lehrbuch, man möge nach jeder Codezeile eine Leerzeile einfügen. Dadurch wird aber schon ein 25-Zeilen Code auf 50 Zeilen aufgebläht - ohne Sinn und Verstand.
    Leerzeilen machen Sinn, wenn man einen Codeblock markieren möchte, z.B. in der GUI die Deklaration von Groups und deren Inhalte, sodass auch codemäßig diese Gruppierung deutlich wird. Wobei man dazu auch sehr gut #region - #endregion nutzen kann.
    Und bei großen Skripts eine große Hilfe, wenn die Erklärungen zu Variablen/Funktionen überall im Skript auslesbar sind (mit diesem Tool)

    Bleibt als Resümee:
    Eine Sprache wie AutoIt, die selbst kaum Konventionen vorgibt, wird immer von jedem anders behandelt werden.
    Testet euch doch mal selbst: Öffnet ein (umfangreicheres) Skript, dass ihr vor >1 Jahr erstellt habt. Wißt ihr auf Anhieb wieder, was wo passiert? :whistling:
    Wenn ja - Dann ist es sauber programmiert, egal welche Notationen verwendet wurden. :thumbup:

  • Wie realisiere ich "Ausführen als..." in AutoIt?

    • BugFix
    • 6. Juni 2012 um 22:05

    Wenn ich das lese, kommt mir nur ein Gedanke: Kindergarten!
    Wenn sich jemand wegen irgendeiner Formulierung angepißt fühlt, dann klärt das bitte per PN. Das ist hier kein Ort um Befindlichkeiten auszutauschen.
    Also an alle: Bleibt beim Thema, sonst kommt das Schloß vor.

  • _ArrayDelete() in Schleife

    • BugFix
    • 6. Juni 2012 um 16:45

    Mal ein kleiner Tip:
    Rückwärts löschen. Dann klappt es auch mit dem Index. ;)

  • intelligente Fehlerauswertung

    • BugFix
    • 5. Juni 2012 um 21:45
    Zitat von MasterOfTime

    wie ich der Variable $return_value automatisch den Wert '' zuteile


    Deklariere die Variable mit Wertvorgabe

    [autoit]

    Func _log($private_code, $return_value='')

    [/autoit]
    Zitat von MasterOfTime

    muss ich für jeden @error diese Funktion aufrufen

    Ja, da @error nach jedem! Aufruf einer beliebigen Funktion neu gefüllt wird, musst du direkt nach dem zu prüfenden Vorgang das Makro auswerten.

  • Processbar richtig einsetzen

    • BugFix
    • 4. Juni 2012 um 23:22

    Du musst die Schrittweite, also den Wert um den je Durchlauf die Progressbar erhöht wird (max. bis 100) mit dem Schleifenzähler multiplizieren und als Progresswert setzen.
    Rechnung:
    $Step = 100 / Anz. Durchläufe
    In der Schleife:

    [autoit]

    For $i = 1 To $max
    GuiCtrlSetData($progress, $i*$Step)
    ;....
    Next

    [/autoit]
  • sqlite3.dll verschwunden

    • BugFix
    • 4. Juni 2012 um 23:11

    Ich hab mal auf meinem Win7-32 System nachgesehen, dort ist sie im System32-Ordner (ohne dass ich sie installiert hätte) vorhanden. Nun kann ich nicht mit Sicherheit sagen, ob sie auch im "Ur"-Windows vorhanden ist, da ich mein erstes Image erst nach Installation aller für mich wesentlichen Programme angelegt habe. Ob eines dieser Programme die Datei mit installiert hat? Viele Browser verwenden sqlite und etliche andere Programme auch. Es bleibt also eine offene Frage. ;)

  • [Tutorial] Sauber Programmieren

    • BugFix
    • 4. Juni 2012 um 20:59

    Die Anwendung von Notationen fördert durchaus die Lesbarkeit.
    Ich habe mir inzwischen noch angewöhnt, Variablen die im Funktionskopf stehen in der Form $_Variable darzustellen. So ist innerhalb der Funktion schneller ersichtlich, welche Variable als Parameter übergeben wurde.
    In einigen UDF findet man die Parametervariablen in Großbuchstaben. Das finde ich unpassend. Großbuchstaben sollten ausschließlich für Konstanten und Strukturen verwendet werden.
    Vieles ist dabei natürlich Geschmackssache.
    Aber, wie schon richtig gesagt wurde: Gut kommentiert, ist halb gelesen. :D

  • Vorgaben in Input-Felder mit Enter übernehmen

    • BugFix
    • 4. Juni 2012 um 20:24

    In Codezeile 48 lese ich den Inhalt des aktuellen Inputs aus und schreibe ihn ins Array. Dort kannst du ansetzen und den gelesenen Wert in das Folge-Input eintragen.

  • Tab-Items sperren und bei Bedarf enablen

    • BugFix
    • 3. Juni 2012 um 20:50
    Zitat von Torni

    Es wird nichts mehr dargestellt bzw. das zuerst ausgewählte bleibt immer auf dem aktuellen Tab stehen.
    Irgendwie wird nur der Tab-Reiter ausgewählt mit dme Code-Beispiel aber nicht der Inhalt angezeigt.


    Ahh, stimmt. Hatte ich nicht bedacht. Dadurch, dass der normale Aktivierungsvorgang des Tab-Item abgefangen wird, muß dass nachgeholt werden.
    Einfach eine Zeile mehr in der Funktion "_Check", sieht dann so aus:

    [autoit]

    Func _Check()
    If Not $check Then Return
    For $i = 1 To $aDisableItem[0]
    If $IndexMouseOver = $i Then
    $check = False
    Return
    EndIf
    Next
    _GUICtrlTab_SetCurSel(GUICtrlGetHandle($Tab), $IndexMouseOver)
    GUICtrlSetState(Execute('$Tab' & $IndexMouseOver +1), $GUI_SHOW) ; == TAB-Item-ID muß dazu fortlaufende Nummer haben um mit dem Index zu verknüpfen
    $check = False
    EndFunc ;==>_Check

    [/autoit]
  • Vorgaben in Input-Felder mit Enter übernehmen

    • BugFix
    • 3. Juni 2012 um 19:05

    Ich hab mal die Lösung erstellt und etwas kommentiert.

    Spoiler anzeigen
    [autoit]

    #Include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <Array.au3>

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

    Global Const $WM_COMMAND = 0x0111

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

    $hGUI = GUICreate('TEST')
    $input1 = GUICtrlCreateInput('1', 40, 30, 60, 20)
    $input2 = GUICtrlCreateInput('', 40, 60, 60, 20)
    $input3 = GUICtrlCreateInput('', 40, 90, 60, 20)
    $input4 = GUICtrlCreateInput('', 40, 120, 60, 20)
    $btArray = GUICtrlCreateButton('Zeige Werte-Array', 20, 200, 150, 25)

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

    Global $aInput[4][2] = [[$input1],[$input2],[$input3],[$input4]] ; == alle Input in einem Array verwalten, Werte werden in das Array gelesen

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

    GUISetState(@SW_SHOW, $hGUI)

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

    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND') ; == registriert Windows-Message "WM_COMMAND" und weist dieser Msg die gleichnamige Funktion zu

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btArray
    _ArrayDisplay($aInput)
    EndSwitch
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $iNext, $fFound = False
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Select
    Case $iCode = 0x0
    Local $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($hGUI, '', ControlGetFocus($hGUI)))
    For $i = 0 To UBound($aInput) -1
    If $aInput[$i][0] = $ID Then
    $fFound = True
    ExitLoop
    EndIf
    Next
    If Not $fFound Then Return $GUI_RUNDEFMSG ; == Control-ID gehört nicht zu den überwachten Input
    $iNext = $i +1
    If $iNext = UBound($aInput) Then $iNext = 0 ; == Array-Index für nächstes Control, bei Ende wieder zum ersten
    $aInput[$i][1] = GUICtrlRead($aInput[$i][0]) ; == Wert auslesen und in das Array schreiben
    ControlFocus($hGUI, '', $aInput[$iNext][0]) ; == Fokus auf nächstes Input setzen
    EndSelect
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Bild- (Film-) Dateien umbenennen in Reihenfolge der Erstellung

    • BugFix
    • 2. Juni 2012 um 23:12

    Es gibt von Oscar ein sehr schönes Skript (FileRenamer).
    Mein Skript ist ähnlich, aber mit einem anderen Hintergrund.
    Die meisten werden das kennen: Man fotografiert munter drauflos, gelegentlich auch ein Movie und dann wird das ganze in einen Ordner geschoben, z.B. "..Oma\Omas_75ter". An Weihnachten kommt dann noch "..Oma\Oma_Weih_2011" etc. pp. hinzu.
    So weit ist das ja schon halbwegs sortiert. Aber in dem Moment, wenn man Bildersammlungen zusammenstellt treten die Probleme auf: In allen Ordnern haben die Dateien dieselben Namen (RIMG00019.jpg o.ä.).
    Mein Ansatz ist folgender:
    - Die Dateien des Ordners werden nach Erstelldatum aufsteigend benannt als "Ordnername+Trennzeichen+Zähler+Dateiendung"
    - Trennzeichen und Stellenzahl des Zählers lassen sich in Einstellungen festlegen
    - Videodateien können wahlweise in einem Unterordner (Name frei wählbar) des Ordners abgelegt und ebenfalls umbenannt werden
    - Es können für komplette Bildersammlungen mit Unterordnern in einem Durchgang alle Dateien umbenannt werden
    - Zu berücksichtigende Dateitypen der Bild-/Videodateien sind individuell festlegbar
    - Unerwünschte Dateien (z.B. Thumbs.db o.ä.) können in einer Liste erfasst und dann während des Umbenennens gleich gelöscht werden
    - Alle gefundenen Dateien werden mit Erstelldatum im Listview angezeigt, Dateien können per Checkbox (Haken entfernen) vom Umbenennen ausgeschlossen werden
    - Im Programmordner wird eine "Settings.ini" mit den Einstellungen abgespeichert

    Zum Ausführen wird die "image_get_info.au3" (von Lazycat) benötigt. Ich habe sie mit angehängt.


    Edit: 18.06.2012
    Einige Neuerungen
    - Anzeige Anzahl eingelesener Bild-/Videodateien
    - Anzeige Anzahl schreibgeschützter Dateien
    - Radiobutton zum Wechsel Darstellung Dateipfade links-/rechts ausgerichtet im Listview
    - Button "Explorer": Öffnet den Explorer im Startordner der Auswahl
    - schreibgeschützte Dateien werden rot dargestellt, die Checkbox wird deaktiviert
    - Evtl. Fehler (Namenskonflikt-Zieldateiname existiert bereits; Umbenennen nicht erfolgreich) werden in eine "Rename.log" geschrieben.
    Falls Fehler auftreten wird die LOG-Datei automatisch geöffnet
    - Doppelklick: markierte Datei wird im Standardprogramm geöffnet
    - Rechtsklick: Kontextmenü
    --- Anzeige kpl. Dateipfad als Tooltip
    --- Anzeige aller Dateidetails
    --- Aufheben Schreibschutz für markierte Datei(en) (Färbung wieder normal, Checkbox wird aktiviert)

    Edit: 25.06.2012
    - Gefixed: Bug bei Button Explorer und Pfad mit Leerzeichen
    - Added: Optional kann zusätzlich ein temporäres Umbenennen mit (wählbarem) Präfix erfolgen. Nützlich, falls schon von Hand einzelne Dateien in die gewünschte Form umbenannt wurden.
    - Added: Im Listview werden bei Erfolg die neuen Dateinamen eingetragen und grün eingefärbt. Bei Fehler bleibt der alte Dateiname und wird orange-rot gefärbt.

    v0.6
    [autoit]

    #Region - TimeStamp
    ; 2012-06-25 13:47:54 v 0.6
    #EndRegion - TimeStamp

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

    #cs
    Im Skriptordner wird die Datei "Rename.log" erstellt mit der Fehlerprotokollierung.
    Die Datei wird bei jedem Neustart (Einlesen) gelöscht und beim Umbenennen neu geschrieben, sofern Fehler auftreten.
    #ce
    #Include <EditConstants.au3>
    #Include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #Include <GuiStatusBar.au3>
    #Include <ProgressConstants.au3>
    #Include <StaticConstants.au3>
    #Include <WindowsConstants.au3>
    #include "image_get_info.au3"

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

    #cs Settings.ini
    [General]
    Startpfad=
    n_stellig=4
    Delimiter=_
    SubFolder=1
    UsePrefix=0
    Prefix=
    Picture_Formate=JPG,JPEG
    Video_Folder_Create=1
    Video_Folder_Name=VIDEO
    Video_Formate=AVI,THM,MOV
    #ce

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

    Global $sPath = @ScriptDir & "\", $bData[2] = [1]
    $bData[1] &= "0x0000010001002020000001002000A810000016..." ; == für Post verkürzt dargestellt
    Global $bDatanames[1] = ["Rename Document.ico"]

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

    For $i = 1 To $bData[0]
    Local $sFile = $sPath & $bDatanames[$i -1]
    Local $hFileOut = FileOpen($sFile, 2+8+16)
    FileWrite($hFileOut, Binary($bData[$i]))
    FileClose($hFileOut)
    Next

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

    OnAutoItExitRegister("_DelBinaryTempFiles")

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

    Func _DelBinaryTempFiles()
    For $i = 1 To $bData[0]
    FileDelete($sPath & $bDatanames[$i -1])
    Next
    EndFunc

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

    Global $sFolder, $aFiles, $fSubFolder = False, $sINI = @ScriptDir & '\Settings.ini', $sLOG = @ScriptDir & '\Rename.log', $hLog, $index, $sDelFile
    Global $fDetail = False, $sFileDetail, $sItemTip, $iFolder = 1, $iSubFolder, $aCountFiles[2] = [0,0], $aItemID[1]
    Global $hStatus, $progress, $hProgress, $iStep, $aParts[2] = [160, -1]
    Global $sPathStart, $iCountNumbers, $sDelimiter, $sExt, $sExtPict, $sExtVideo, $iCreateVideoFolder, $sVideoFolder, $sDeleteList, $aListview[1][2]
    Global $lbCntPic, $lbCntVid, $lbCntErr, $iCntErr, $iCntReadOnly, $sReadOnly, $aCurrItem, $fShowContext = False
    Global $cbPrefixTmp, $lbPrefixTmp, $inPrefixTmp, $sPrefix, $iPrefix, $fPrefix = False
    If Not FileExists($sINI) Then
    IniWrite($sINI, 'General', 'Startpfad', '')
    IniWrite($sINI, 'General', 'n_stellig', 4)
    IniWrite($sINI, 'General', 'Delimiter', '_')
    IniWrite($sINI, 'General', 'SubFolder', 1)
    IniWrite($sINI, 'General', 'UsePrefix', 'N')
    IniWrite($sINI, 'General', 'Prefix', 'TMP')
    IniWrite($sINI, 'General', 'Picture_Formate', 'JPG,JPEG')
    IniWrite($sINI, 'General', 'Video_Folder_Create', 1)
    IniWrite($sINI, 'General', 'Video_Folder_Name', 'VIDEO')
    IniWrite($sINI, 'General', 'Video_Formate', 'AVI,THM,MOV')
    IniWrite($sINI, 'General', 'DeleteList', 'Thumbs.db,Thumbnail.info,Vorschau.pic')
    EndIf

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

    $hGui = GUICreate("Dateien Umbenennen " & Chr(169) & "BugFix", 608, 535, 400, 50, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetBkColor(0xFFFFBB)
    GUISetIcon($sPath & "\Rename Document.ico")
    GUICtrlCreateGroup(" Ordner Auswählen ", 15, 15, 570, 87)
    $mnu = GUICtrlCreateMenu('Menü')
    $mnuSettings = GUICtrlCreateMenuItem('Einstellungen', $mnu)
    GUICtrlCreateMenuItem('', $mnu)
    $mnuHelp = GUICtrlCreateMenuItem('Hilfe', $mnu)
    $inFolder = GUICtrlCreateInput("", 30, 40, 510, 20, $ES_READONLY)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $btSelect = GUICtrlCreateButton("...", 550, 40, 20, 20)
    GUICtrlSetBkColor(-1, 0xFFD700)
    $cbSubFolder = GUICtrlCreateCheckbox('Unterordner mit einbeziehen', 30, 70, 180, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel('Fotos', 330, 64, 60, 17)
    $lbCntPic = GUICtrlCreateLabel('0', 405, 64, 30, 17, $ES_RIGHT)
    GUICtrlCreateLabel('Videos', 330, 81, 60, 17)
    $lbCntVid = GUICtrlCreateLabel('0', 405, 81, 30, 17, $ES_RIGHT)
    $btReadFiles = GUICtrlCreateButton('Einlesen', 480, 70, 90 ,22)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetBkColor(-1, 0x7FFF00)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Datei - Infos ", 15, 112, 570, 340)
    GUICtrlCreateLabel('', 30, 132, 406, 23, $SS_ETCHEDFRAME)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cbSelAll = GUICtrlCreateCheckbox(' Dateien ( Auswahl alle / Auswahl aufheben )', 39, 135, 280, 17)
    $rLeft = GUICtrlCreateRadio('links', 330, 135, 50, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $rRight = GUICtrlCreateRadio('rechts', 380, 135, 50, 17)
    GUICtrlCreateLabel('', 435, 132, 136, 23, $SS_ETCHEDFRAME)
    GUICtrlCreateLabel('Aufnahmezeitpunkt', 440, 136, 123, 17, $SS_CENTER)
    $ListView = GUICtrlCreateListView("Datei|Nr|Aufnahmezeitpunkt", 30, 154, 540, 283, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT,$LVS_NOCOLUMNHEADER) , BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES,$LVS_EX_DOUBLEBUFFER))
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 400)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 0)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, $LVSCW_AUTOSIZE_USEHEADER )
    $hLV = GUICtrlGetHandle($ListView)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $btExplorer = GUICtrlCreateButton('Explorer', 30, 462, 90 ,22)
    GUICtrlSetBkColor(-1, 0xFFD700)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $lbReadOnly = GUICtrlCreateLabel('', 150, 465, 145, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlCreateLabel('Fehler', 330, 465, 60, 17)
    $lbCntErr = GUICtrlCreateLabel('0', 405, 465, 30, 17, $ES_RIGHT)
    $btRename = GUICtrlCreateButton('Umbenennen', 480, 462, 90 ,22)
    GUICtrlSetBkColor(-1, 0xFA8072)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $hStatus = _GUICtrlStatusBar_Create ($hGui)
    _GUICtrlStatusBar_SetMinHeight ($hStatus, 20)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    $inProgress = GUICtrlCreateInput('', 0, 1, 150, 20, BitOR($ES_READONLY,$ES_CENTER), $WS_EX_STATICEDGE)
    $hInProgress = GUICtrlGetHandle($inProgress)
    _GUICtrlStatusBar_EmbedControl($hStatus, 0, $hInProgress)
    $progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
    GUICtrlSetColor(-1, 0x008B00)
    $hProgress = GUICtrlGetHandle($progress)
    _GUICtrlStatusBar_EmbedControl($hStatus, 1, $hProgress)

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

    $hContext = GUICreate('Listview Menü', 200, 69, -1, -1, $WS_POPUP, $WS_EX_MDICHILD, $hGui)
    GUICtrlCreateLabel('', 0, 0, 200, 23, $SS_ETCHEDFRAME)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ConPath = GUICtrlCreateLabel('Pfad Anzeigen', 10, 4, 188, 17)
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlCreateLabel('', 0, 23, 200, 23, $SS_ETCHEDFRAME)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ConDetail = GUICtrlCreateLabel('Details Anzeigen', 10, 27, 188, 17)
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlCreateLabel('', 0, 46, 200, 23, $SS_ETCHEDFRAME)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ConNoRO = GUICtrlCreateLabel('Schreibschutz Aufheben', 10, 50, 188, 17)
    GUICtrlSetColor(-1, 0x8B0000)

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

    $hSettings = GUICreate("Einstellungen", 561, 685, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
    GUISetBkColor(0xFFFFBB)
    GUISetIcon($sPath & "\Rename Document.ico")
    GUICtrlCreateGroup(" Startordner für Auswahl ", 20, 15, 520, 65)
    $inStartFolder = GUICtrlCreateInput("", 35, 40, 450, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $btFolderSelect = GUICtrlCreateButton("...", 500, 40, 20, 20)
    GUICtrlSetBkColor(-1, 0xFFD700)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Verschiedenes ", 20, 95, 520, 95)
    $cbSubDir = GUICtrlCreateCheckbox(' Unterordner Durchsuchen', 35, 120, 150)
    GUICtrlCreateLabel("Trennzeichen", 210, 124, 80, 20)
    $inDelimiter = GUICtrlCreateInput("_", 285, 121, 30, 20)
    GUICtrlCreateLabel("Nummerierung Anzahl Ziffern", 345, 124, 140, 17)
    $inFileNum = GUICtrlCreateInput("4", 490, 121, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
    $cbPrefixTmp = GUICtrlCreateCheckbox('Temporär umbenennen (Vermeidung Namenskollision)', 35, 150, 290)
    $lbPrefixTmp = GUICtrlCreateLabel('Präfix', 345, 154, 50)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $inPrefixTmp = GUICtrlCreateInput('TMP', 460, 151, 60, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Bilder ", 20, 205, 520, 65)
    GUICtrlCreateLabel("Bildformate, kommagetrennt", 35, 230, 171, 20)
    $inFormatPict = GUICtrlCreateInput("JPG,JPEG", 230, 230, 290, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" Video ", 20, 285, 520, 130)
    GUICtrlCreateLabel("Eigenen Ordner für Videos erstellen", 35, 315, 215, 20)
    $rVideoJa = GUICtrlCreateRadio("Ja", 310, 311, 50, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $rVideoNein = GUICtrlCreateRadio("Nein", 420, 311, 50, 17)
    GUICtrlCreateLabel("Name des Video Ordners", 35, 343, 160, 20)
    $inVideoFolder = GUICtrlCreateInput("VIDEO", 230, 342, 290, 20)
    GUICtrlCreateLabel("Videoformate, kommagetrennt", 35, 376, 185, 20)
    $inFormatVideo = GUICtrlCreateInput("AVI,THM,MOV", 230, 373, 290, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup(" zu löschende Dateien ", 20, 430, 520, 200)
    $ListViewDel = GUICtrlCreateListView("|", 35, 455, 330, 160, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
    $hLVDel = GUICtrlGetHandle($ListViewDel)
    $btAddDelFile = GUICtrlCreateButton("Hinzufügen", 410, 455, 110, 25)
    GUICtrlSetBkColor(-1, 0x7FFF00)
    $btDelDelFile = GUICtrlCreateButton("Löschen", 410, 505, 110, 25)
    GUICtrlSetBkColor(-1, 0x00BFFF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $btSave = GUICtrlCreateButton('Speichern', 410, 645, 110, 25)
    GUICtrlSetBkColor(-1, 0xFA8072)

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

    $hHelp = GUICreate("Hilfe", 641, 618, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
    GUISetBkColor(0xFFFFBB)
    GUISetIcon($sPath & "\Rename Document.ico")
    $ListViewHelp = GuiCtrlCreateListView('||', 20, 20, 601, 578, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
    GUICtrlSetBkColor(-1, 0xF5FFFA)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 200)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, $LVSCW_AUTOSIZE_USEHEADER)
    $sHelp = _
    'EINSTELLUNGEN|' & @CRLF & _
    ' "Startordner für Auswahl"|Root-Ordner zur Auswahl der Mediendateiordner' & @CRLF & _
    ' "Trennzeichen"|Zeichen zwischen Dateiname und Nummerierung' & @CRLF & _
    ' "Nummerierung Anzahl Ziffern"|Nummer in Dateinamen, Länge mit Vornullen' & @CRLF & _
    ' "Unterordner durchsuchen"|Alle Ordner unterhalb der Auswahl werden auch verwendet' & @CRLF & _
    ' "Bildformate"|Bilddateitypen, die umbenannt werden sollen' & @CRLF & _
    ' "Temporär Umbenennen"|Um Konflikte mit bereits existierenden Zieldateinamen' & @CRLF & _
    ' |zu vermeiden, werden alle Dateien vorab mit dem gewählten Präfix' & @CRLF & _
    ' |umbenannt und erst dann in der endgültigen Form gespeichert.' & @CRLF & _
    ' "Videoordner erstellen"|Eigenen Ordner für Videos in jeweiligem Ordner erstellen' & @CRLF & _
    '|Alle Videodateien des Ordners werden dorthin verschoben' & @CRLF & _
    ' "Name Video Ordner"|Bezeichnung für anzulegende Videoordner' & @CRLF & _
    ' "Videoformate"|Videodateitypen, die umbenannt werden sollen' & @CRLF & _
    ' "zu löschende Dateien"|Dateien, die in den Ordnern gelöscht werden sollen' & @CRLF & _
    '|' & @CRLF & _
    'PROGRAMM|' & @CRLF & _
    ' "Ordner auswählen"|Ordner dessen Mediendateien umbenannt werden sollen' & @CRLF & _
    '|Anwenden auf Unterordner kann unabhängig von den Vor-' & @CRLF & _
    '|einstellungen gesetzt werden' & @CRLF & _
    ' < Einlesen >|Der/Die (Unter)Ordner werden nach den Dateitypen durchsucht.' & @CRLF & _
    '|Gefundenes wird mit Pfad in das Listview eingetragen.' & @CRLF & _
    '|Das Erstelldatum wird in Spalte 2 angezeigt.' & @CRLF & _
    ' "Checkbox Auswahl Dateien"|Auswählen/Auswahl aufheben für alle Dateien' & @CRLF & _
    '|Ausgewählte Dateien werden umbenannt' & @CRLF & _
    ' "Radio links / rechts"|Ausrichtung Dateipfade im Listview' & @CRLF & _
    ' < Explorer >|Öffnet Explorer im Startordner Auswahl' & @CRLF & _
    ' < Umbenennen >|Gewählte Dateien werden umbenannt in:' & @CRLF & _
    '|ORDNERNAME-TRENNZEICHEN-NUMMER' & @CRLF & _
    '|Nummer ansteigend geordnet nach Erstelldatum' & @CRLF & _
    '|Die Nummerierung beginnt in jedem Ordner bei 1' & @CRLF & _
    '|Videos haben eine eigene Nummerierung' & @CRLF & _
    '|' & @CRLF & _
    'LISTVIEW FUNKTIONEN|' & @CRLF & _
    ' Doppel-Klick|Öffnet die Datei im Standardprogramm' & @CRLF & _
    ' Rechts-Klick|Kontext-Menü' & @CRLF & _
    '| Kompletter Dateipfad als Tooltipp' & @CRLF & _
    '| Alle verfügbaren Details von Bilddateien' & @CRLF & _
    '| Aufheben Schreibschutz markierter Datei(en)' & @CRLF & _
    '|' & @CRLF & _
    'FEHLERBEHANDLUNG|' & @CRLF & _
    '|Anzahl der Fehler wird auf der Oberfläche angezeigt' & @CRLF & _
    '|Im Programmordner wird eine Datei "Rename.log" erstellt,' & @CRLF & _
    '|dort werden Fehler protokolliert.' & @CRLF & _
    '|Treten Fehler auf, wird "Rename.log" im Standardeditor geöffnet.' & @CRLF & _
    '|' & @CRLF & _
    'TIPP|' & @CRLF & _
    '|Treten beim Umbenennen Namenskonflikte wegen bereits' & @CRLF & _
    '|existierender Zieldateien auf:' & @CRLF & _
    '| - Einstellungen "Temporär Umbenennen" aktivieren' & @CRLF & _
    '| - Dateien erneut < Einlesen >' & @CRLF & _
    '| - < Umbenennen >'
    $aItem = StringSplit($sHelp, @CRLF, 1)
    For $i = 1 To $aItem[0]
    GUICtrlCreateListViewItem($aItem[$i], $ListViewHelp)
    GUICtrlSetBkColor(-1, 0xFFFFF0)
    Next

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

    $hDetail = GUICreate("Details", 561, 618, -1, -1, Default, $WS_EX_MDICHILD, $hGui)
    GUISetBkColor(0xFFFFBB)
    GUISetIcon($sPath & "\Rename Document.ico")
    $ListViewDetail = GuiCtrlCreateListView('||', 20, 20, 521, 578, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER), BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
    GUICtrlSetBkColor(-1, 0xF5FFFA)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 200)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, $LVSCW_AUTOSIZE_USEHEADER)
    $hLVDetail = GUICtrlGetHandle($ListViewDetail)

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

    _ReadSettingsFromINI()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState(@SW_SHOW, $hGui)

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

    While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    If $aMsg[1] = $hSettings Then
    GUISetState(@SW_HIDE, $hSettings)
    ElseIf $aMsg[1] = $hDetail Then
    GUISetState(@SW_HIDE, $hDetail)
    ElseIf $aMsg[1] = $hHelp Then
    GUISetState(@SW_HIDE, $hHelp)
    Else
    Exit
    EndIf
    Case $GUI_EVENT_PRIMARYUP
    If $fShowContext Then
    $aMPos = MouseGetPos()
    $tPoint = DllStructCreate('int;int')
    DllStructSetData($tPoint, 1, $aMPos[0])
    DllStructSetData($tPoint, 2, $aMPos[1])
    $tRectContext = _WinAPI_GetWindowRect($hContext)
    If Not _WinAPI_PtInRect($tRectContext, $tPoint) Then
    GUISetState(@SW_HIDE, $hContext)
    $fShowContext = False
    EndIf
    EndIf
    Case $mnuSettings
    _SettingsSet()
    GUISetState(@SW_SHOW, $hSettings)
    Case $mnuHelp
    GUISetState(@SW_SHOW, $hHelp)
    Case $ConPath
    GUISetState(@SW_HIDE, $hContext)
    $aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
    If $aCurrItem[0] <> 0 Then _ToolTipMouseExit(_GUICtrlListView_GetItemText($hLV, $aCurrItem[1]), 4000)
    Case $ConDetail ; == Dateidetail, bei mehreren markierten Dateien wird nur die erste Datei der Markierung verwendet
    GUISetState(@SW_HIDE, $hContext)
    $aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
    If $aCurrItem[0] <> 0 Then
    $sFileDetail = _GUICtrlListView_GetItemText($hLV, $aCurrItem[1])
    _ShowDetail()
    EndIf
    Case $ConNoRO ; == Schreibschutz aufheben, bei mehreren markierten Dateien wird der Schreibschutz für alle markierten Dateien aufgehoben
    GUISetState(@SW_HIDE, $hContext)
    $aCurrItem = _GUICtrlListView_GetSelectedIndices($hLV, True)
    For $i = 1 To $aCurrItem[0]
    If Not FileSetAttrib(_GUICtrlListView_GetItemText($hLV, $aCurrItem[$i]), '-R') Then
    MsgBox(262160, "Fehler", "Der Schreibschutz für diese Datei konnte nicht aufgehoben werden.")
    Else
    _GUICtrlListView_SetItemChecked($hLV, $aCurrItem[$i])
    GUICtrlSetColor($aItemID[$aCurrItem[$i]], 0x00008B)
    $sReadOnly = StringReplace($sReadOnly, ' ' & $aCurrItem[$i] & ' ', ' ')
    $iCntReadOnly -= 1
    If $iCntReadOnly = 0 Then
    GUICtrlSetState($lbReadOnly, $GUI_HIDE)
    Else
    GUICtrlSetData($lbReadOnly, 'Schreibgeschützt: ' & $iCntReadOnly)
    EndIf
    EndIf
    Next
    Case $btSelect
    GUICtrlSetData($lbCntErr, 0)
    GUICtrlSetData($lbCntPic, 0)
    GUICtrlSetData($lbCntVid, 0)
    GUICtrlSetData($progress, 0)
    $sFolder = FileSelectFolder('Ordner mit Bildern auswählen', $sPathStart)
    If $sFolder <> '' Then
    GUICtrlSetData($inFolder, $sFolder)
    GUICtrlSetState($btReadFiles, $GUI_ENABLE)
    GUICtrlSetState($cbSubFolder, $GUI_ENABLE)
    GUICtrlSetState($btExplorer, $GUI_ENABLE)
    GUICtrlSetState($lbReadOnly, $GUI_HIDE)
    GUICtrlSetData($progress, 0)
    GUICtrlSetData($inProgress, '')
    EndIf
    Case $cbSubFolder
    If BitAND(GUICtrlRead($cbSubFolder), $GUI_CHECKED) Then
    $fSubFolder = True
    Else
    $fSubFolder = False
    EndIf
    Case $btReadFiles
    GUICtrlSetState($cbSubFolder, $GUI_DISABLE)
    If FileExists($sLOG) Then FileDelete($sLOG)
    $aCountFiles[0] = 0
    $aCountFiles[1] = 0
    $iCntErr = 0
    $iCntReadOnly = 0
    $sReadOnly = ' '
    _LoadListview()
    If $iCntReadOnly > 0 Then
    GUICtrlSetState($lbReadOnly, $GUI_SHOW)
    GUICtrlSetData($lbReadOnly, 'Schreibgeschützt: ' & $iCntReadOnly)
    EndIf
    Case $cbSelAll
    If _GUICtrlListView_GetItemCount($hLV) > 0 Then
    If BitAND(GUICtrlRead($cbSelAll), $GUI_CHECKED) Then
    _CheckAll(True)
    Else
    _CheckAll(False)
    EndIf
    Else
    GUICtrlSetState($cbSelAll, $GUI_UNCHECKED)
    EndIf
    Case $cbPrefixTmp
    If BitAND(GUICtrlRead($cbPrefixTmp), $GUI_CHECKED) Then
    GUICtrlSetState($lbPrefixTmp, $GUI_ENABLE)
    GUICtrlSetState($inPrefixTmp, $GUI_ENABLE)
    $fPrefix = True
    Else
    GUICtrlSetState($lbPrefixTmp, $GUI_DISABLE)
    GUICtrlSetState($inPrefixTmp, $GUI_DISABLE)
    $fPrefix = False
    EndIf
    Case $rLeft, $rRight
    If BitAND(GUICtrlRead($rLeft), $GUI_CHECKED) Then
    _GUICtrlListView_SetColumn($hLV, 0, 'Datei', -1, 0)
    Else
    _GUICtrlListView_SetColumn($hLV, 0, 'Datei', -1, 1)
    EndIf
    _WinAPI_RedrawWindow($hLV)
    Case $btExplorer
    If $sFolder <> '' Then Run('explorer.exe /root,"' & $sFolder & '"')
    Case $btRename
    GUICtrlSetState($btRename, $GUI_DISABLE)
    $hLog = FileOpen($sLOG, 9)
    _RenameFiles()
    FileClose($hLog)
    Case $btFolderSelect
    $sPathStart = FileSelectFolder('Start Ordner auswählen', '')
    If $sPathStart <> '' Then GUICtrlSetData($inStartFolder, $sPathStart)
    Case $btAddDelFile
    $sDelFile = FileOpenDialog('Dateien zum Löschen wählen', $sPathStart, 'Alle(*.*)')
    If $sDelFile <> '' Then GUICtrlCreateListViewItem(StringTrimLeft($sDelFile, StringInStr($sDelFile, '\', 1, -1)) , $ListViewDel)
    Case $btDelDelFile
    _GUICtrlListView_DeleteItemsSelected($hLVDel)
    Case $btSave
    _WriteSettingsToINI()
    GUISetState(@SW_HIDE, $hSettings)
    EndSwitch
    WEnd

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

    Func _RenameFiles()
    GUICtrlSetData($inProgress, 'Dateien Umbenennen [0%]')
    GUICtrlSetData($progress, 0)
    Local $iItem = _GUICtrlListView_GetItemCount($hLV)
    Local $iStep = 100/$iItem
    Local $nPIC = 0, $nVID = 0, $sItem, $sFile, $sSfx, $sPath, $sNewItem, $sFolder, $sNewPath, $sLastPath, $fCheck = False
    Local $aFilesToDelete = StringSplit($sDeleteList, ',')
    _GUICtrlListView_BeginUpdate($hLV)
    If $fPrefix Then ; == vorher umbenennen mit Präfix
    For $i = 0 To $iItem -1
    GUICtrlSetData($progress, ($i+1)*$iStep)
    GUICtrlSetData($inProgress, 'Temporär Umbenennen [' & Int(($i+1)*$iStep) & '%]')
    If Not _GUICtrlListView_GetItemChecked($hLV, $i) Then ContinueLoop
    $sItem = _GUICtrlListView_GetItemText($hLV, $i)
    $sPath = StringLeft($sItem, StringInStr($sItem, '\', 1, -1))
    $sFile = StringTrimLeft($sItem, StringLen($sPath))
    $sNewItem = $sPath & $sPrefix & '_' & $sFile
    If FileMove($sItem, $sNewItem) Then
    _GUICtrlListView_SetItemText($hLV, $i, $sNewItem)
    Else
    _GUICtrlListView_SetItemChecked($hLV, $i, False)
    GUICtrlSetColor($aItemID[$i], 0xFF1493)
    FileWrite($hLog, 'FEHLER_PRÄFIX "' & $sItem & '" konnte nicht zu "' & $sNewItem & '" umbenannt werden!' & @CRLF)
    $iCntErr += 1
    EndIf
    Next
    EndIf
    For $i = 0 To $iItem -1
    GUICtrlSetData($progress, ($i+1)*$iStep)
    GUICtrlSetData($inProgress, 'Dateien Umbenennen [' & Int(($i+1)*$iStep) & '%]')
    $sItem = _GUICtrlListView_GetItemText($hLV, $i)
    $sSfx = StringTrimLeft($sItem, StringInStr($sItem, '.', 1, -1))
    $sPath = StringLeft($sItem, StringInStr($sItem, '\', 1, -1) -1)
    $sFolder = StringTrimLeft($sPath, StringInStr($sPath, '\', 1, -1))
    If $sPath <> $sLastPath Then
    $sLastPath = $sPath
    $fCheck = True
    $nPIC = 0
    $nVID = 0
    EndIf
    If Not _GUICtrlListView_GetItemChecked($hLV, $i) Then ContinueLoop
    Select
    Case StringInStr($sExtPict, $sSfx)
    $nPIC += 1
    $sNewPath = $sPath & '\' & $sFolder & $sDelimiter & StringFormat('%0' & $iCountNumbers & 'd', $nPIC) & '.' & StringLower($sSfx)
    If FileExists($sNewPath) Then
    $iCntErr += 1
    FileWrite($hLog, 'NAMENSKONFLIKT "' & $sItem & '" konnte nicht zu "' & $sNewPath & '" umbenannt werden, da diese Datei bereits existiert!' & @CRLF)
    Else
    If FileMove($sItem, $sNewPath) = 0 Then
    $iCntErr += 1
    FileWrite($hLog, 'FEHLER_VERSCHIEBEN ' & $sItem & @CRLF)
    GUICtrlSetColor($aItemID[$i], 0xFF1493)
    Else
    _GUICtrlListView_SetItemText($hLV, $i, $sNewPath)
    GUICtrlSetColor($aItemID[$i], 0x228B22)
    EndIf
    EndIf
    ;~ ConsoleWrite(_OutputLen('+> FileMove(' & $sItem, 100) & $sNewPath & ')' & @CRLF)
    Case StringInStr($sExtVideo, $sSfx)
    If $iCreateVideoFolder = 1 Then
    Local $sLenVid = StringLen($sVideoFolder), $sLenPath = StringLen($sPath)
    If ($sLenPath > $sLenVid And StringRight($sPath, $sLenVid) <> $sVideoFolder) Or ($sLenPath < $sLenVid) Then $sPath &= '\' & $sVideoFolder
    EndIf
    $nVID += 1
    If StringRight($sFolder, StringLen($sVideoFolder)) = $sVideoFolder Then
    Local $sTmp = StringTrimRight($sPath, StringLen($sVideoFolder) +1)
    $sFolder = StringTrimLeft($sTmp, StringInStr($sTmp, '\', 1, -1))
    EndIf
    $sNewPath = $sPath & '\' & $sFolder & $sDelimiter & StringFormat('%0' & $iCountNumbers & 'd', $nVID) & '.' & StringLower($sSfx)
    If FileExists($sNewPath) Then
    $iCntErr += 1
    FileWrite($hLog, 'NAMENSKONFLIKT "' & $sItem & '" konnte nicht zu "' & $sNewPath & '" umbenannt werden, da diese Datei bereits existiert!' & @CRLF)
    Else
    If FileMove($sItem, $sNewPath, 8) = 0 Then
    $iCntErr += 1
    FileWrite($hLog, 'FEHLER_VERSCHIEBEN "' & $sItem & '" nach "' & $sNewPath & '"' & @CRLF)
    GUICtrlSetColor($aItemID[$i], 0xFF1493)
    Else
    _GUICtrlListView_SetItemText($hLV, $i, $sNewPath)
    GUICtrlSetColor($aItemID[$i], 0x228B22)
    EndIf
    EndIf
    ;~ ConsoleWrite(_OutputLen('+> FileMove(' & $sItem, 100) & $sNewPath & ', 8)' & @CRLF)
    EndSelect
    If $fCheck Then
    $fCheck = False
    If UBound($aFilesToDelete) > 1 Then
    For $j = 1 To $aFilesToDelete[0]
    If FileExists($sPath & '\' & $aFilesToDelete[$j]) Then
    If FileDelete($sPath & '\' & $aFilesToDelete[$j]) = 0 Then
    $iCntErr += 1
    FileWrite($hLog, 'FEHLER_LÖSCHEN ' & $sPath & '\' & $aFilesToDelete[$j] & @CRLF)
    EndIf
    ;~ ConsoleWrite('!> FileDelete(' & $sPath & '\' & $aFilesToDelete[$j] & ')' & @CRLF)
    EndIf
    Next
    EndIf
    EndIf
    Next
    _GUICtrlListView_EndUpdate($hLV)
    GUICtrlSetData($progress, 100)
    GUICtrlSetData($inProgress, 'Dateien Umbenennen [100%]')
    GUICtrlSetData($lbCntErr, $iCntErr)
    If $iCntErr > 0 Then ShellExecute($sLOG)
    EndFunc

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

    ;==================================================================================
    Func _OutputLen($_s, $_iLen, $_sFill='.') ; == NUR FÜR KONSOLENAUSGABE IM TEST
    Local $sLen = StringLen($_s)
    If $_iLen <= $sLen Then Return $_s & $_sFill
    For $i = $sLen To $_iLen
    $_s &= $_sFill
    Next
    Return $_s
    EndFunc
    ;==================================================================================

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

    Func _ShowDetail()
    If $sFileDetail = '' Then Return
    Local $sInfo = _ImageGetInfo($sFileDetail)
    Local $aTmp, $aSplit = StringSplit(StringTrimRight($sInfo, 1), @LF, 1)
    If @error Then Return
    _GUICtrlListView_DeleteAllItems($hLVDetail)
    For $i = 1 To $aSplit[0]
    $aTmp = StringSplit($aSplit[$i], '=')
    If StringLen(StringStripWS($aTmp[2], 8)) Then
    GUICtrlCreateListViewItem($aTmp[1] & '|' & StringStripWS($aTmp[2], 2), $ListViewDetail)
    GUICtrlSetBkColor(-1, 0xFFFFF0)
    EndIf
    Next
    WinSetTitle($hDetail, '', 'Details von "' & StringTrimLeft($sFileDetail, StringInStr($sFileDetail, '\', 1, -1)) & '"')
    GUISetState(@SW_SHOW, $hDetail)
    EndFunc

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

    Func _ReadSettingsFromINI()
    $sPathStart = IniRead($sINI, 'General', 'Startpfad', '')
    $iCountNumbers = IniRead($sINI, 'General', 'n_stellig', 4)
    $sDelimiter = IniRead($sINI, 'General', 'Delimiter', '_')
    $iSubFolder = IniRead($sINI, 'General', 'SubFolder', 1)
    If $iSubFolder = 1 Then
    GUICtrlSetState($cbSubFolder, $GUI_CHECKED)
    $fSubFolder = True
    Else
    GUICtrlSetState($cbSubFolder, $GUI_UNCHECKED)
    EndIf
    $iPrefix = IniRead($sINI, 'General', 'UsePrefix', 0)
    If $iPrefix = 1 Then
    GUICtrlSetState($cbPrefixTmp, $GUI_CHECKED)
    $fPrefix = True
    Else
    GUICtrlSetState($cbPrefixTmp, $GUI_UNCHECKED)
    EndIf
    $sPrefix = IniRead($sINI, 'General', 'Prefix', 'TMP')
    $sExtPict = IniRead($sINI, 'General', 'Picture_Formate', 'JPG,JPEG')
    $sExtVideo = IniRead($sINI, 'General', 'Video_Formate', 'AVI,THM,MOV')
    If $sExtVideo <> '' Then
    $sExt = $sExtPict & ',' & $sExtVideo
    Else
    $sExt = $sExtPict
    EndIf
    $iCreateVideoFolder = IniRead($sINI, 'General', 'Video_Folder_Create', 1)
    $sVideoFolder = IniRead($sINI, 'General', 'Video_Folder_Name', 'VIDEO')
    $sDeleteList = IniRead($sINI, 'General', 'DeleteList', 'Thumbs.db,Thumbnail.info,Vorschau.pic')
    EndFunc

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

    Func _WriteSettingsToINI()
    $sPathStart = GUICtrlRead($inStartFolder)
    IniWrite($sINI, 'General', 'Startpfad', $sPathStart)
    $iCountNumbers = GUICtrlRead($inFileNum)
    IniWrite($sINI, 'General', 'n_stellig', $iCountNumbers)
    $iSubFolder = 0
    If BitAND(GUICtrlRead($cbSubDir), $GUI_CHECKED) Then $iSubFolder = 1
    IniWrite($sINI, 'General', 'SubFolder', $iSubFolder)
    If $iSubFolder = 1 Then
    GUICtrlSetState($cbSubFolder, $GUI_CHECKED)
    Else
    GUICtrlSetState($cbSubFolder, $GUI_UNCHECKED)
    EndIf
    $sDelimiter = GUICtrlRead($inDelimiter)
    IniWrite($sINI, 'General', 'Delimiter', $sDelimiter)
    $iPrefix = 0
    If BitAND(GUICtrlRead($cbPrefixTmp), $GUI_CHECKED) Then $iPrefix = 1
    IniWrite($sINI, 'General', 'UsePrefix', $iPrefix)
    IniWrite($sINI, 'General', 'Prefix', GUICtrlRead($inPrefixTmp))
    $sExtPict = GUICtrlRead($inFormatPict)
    IniWrite($sINI, 'General', 'Picture_Formate', $sExtPict)
    $sExtVideo = GUICtrlRead($inFormatVideo)
    IniWrite($sINI, 'General', 'Video_Formate', $sExtVideo)
    If $sExtVideo <> '' Then
    $sExt = $sExtPict & ',' & $sExtVideo
    Else
    $sExt = $sExtPict
    EndIf
    $iCreateVideoFolder = 1
    If BitAND(GUICtrlRead($rVideoJa), $GUI_UNCHECKED) Then $iCreateVideoFolder = 0
    IniWrite($sINI, 'General', 'Video_Folder_Create', $iCreateVideoFolder)
    $sVideoFolder = GUICtrlRead($inVideoFolder)
    IniWrite($sINI, 'General', 'Video_Folder_Name', $sVideoFolder)
    $sDeleteList = ''
    For $i = 0 To _GUICtrlListView_GetItemCount($hLVDel) -1
    $sDeleteList &= _GUICtrlListView_GetItemText($hLVDel, $i) & ','
    Next
    If $sDeleteList <> '' Then $sDeleteList = StringTrimRight($sDeleteList, 1)
    IniWrite($sINI, 'General', 'DeleteList', $sDeleteList)
    EndFunc

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

    Func _SettingsSet()
    GUICtrlSetData($inStartFolder, $sPathStart)
    GUICtrlSetData($inFileNum, $iCountNumbers)
    GUICtrlSetData($inDelimiter, $sDelimiter)
    GUICtrlSetData($inVideoFolder, $sVideoFolder)
    GUICtrlSetData($inFormatVideo, $sExtVideo)
    GUICtrlSetData($inFormatPict, $sExtPict)
    If $iSubFolder = 1 Then
    GUICtrlSetState($cbSubDir, $GUI_CHECKED)
    Else
    GUICtrlSetState($cbSubDir, $GUI_UNCHECKED)
    EndIf
    If $iPrefix = 1 Then
    GUICtrlSetState($cbPrefixTmp, $GUI_CHECKED)
    GUICtrlSetState($lbPrefixTmp, $GUI_ENABLE)
    GUICtrlSetState($inPrefixTmp, $GUI_ENABLE)
    $fPrefix = True
    Else
    GUICtrlSetState($cbPrefixTmp, $GUI_UNCHECKED)
    GUICtrlSetState($lbPrefixTmp, $GUI_DISABLE)
    GUICtrlSetState($inPrefixTmp, $GUI_DISABLE)
    $fPrefix = False
    EndIf
    If $iCreateVideoFolder = 1 Then
    GUICtrlSetState($rVideoJa, $GUI_CHECKED)
    Else
    GUICtrlSetState($rVideoNein, $GUI_CHECKED)
    EndIf
    _GUICtrlListView_DeleteAllItems($hLVDel)
    Local $a = StringSplit($sDeleteList, ',')
    For $i = 1 To $a[0]
    GUICtrlCreateListViewItem($a[$i], $ListViewDel)
    Next
    EndFunc

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

    Func _LoadListview()
    _GUICtrlListView_DeleteAllItems($hLV)
    Local $aFolderRecursive, $sFilesFound, $sAllFiles = '', $iErr = 0
    If $fSubFolder Then
    GUICtrlSetData($inProgress, 'Unterordner Einlesen [0%]')
    $sAllFiles = _Multi_FileListToArray($sFolder, $sExt, 1, 1, '', True)
    If StringLen($sAllFiles) = 1 Then
    $sAllFiles = ''
    Else
    $sAllFiles &= Chr(0)
    EndIf
    $aFolderRecursive = _GetFilesFolder_Rekursiv($sFolder, $sExt, 1, 0)
    If @error Then
    If $sAllFiles <> '' Then
    $aFiles = StringSplit(StringTrimRight($sAllFiles, 1), Chr(0))
    Else
    $iErr = 1
    EndIf
    Else
    $iStep = 100/$aFolderRecursive[0]
    For $i = 1 To $aFolderRecursive[0]
    GUICtrlSetData($progress, $i*$iStep)
    GUICtrlSetData($inProgress, 'Unterordner Einlesen [' & Int($i*$iStep) & '%]')
    $sFilesFound = _Multi_FileListToArray($aFolderRecursive[$i], $sExt, 1, 1, '', True)
    If @error Then
    ContinueLoop
    Else
    $sAllFiles &= $sFilesFound & Chr(0)
    EndIf
    Next
    GUICtrlSetData($progress, 100)
    GUICtrlSetData($inProgress, 'Unterordner Einlesen [100%]')
    If $sAllFiles <> '' Then
    $aFiles = StringSplit(StringTrimRight($sAllFiles, 1), Chr(0))
    EndIf
    EndIf
    Else
    $aFiles = _Multi_FileListToArray($sFolder, $sExt, 1, 1)
    If @error Then $iErr = 1
    EndIf
    If $iErr = 1 Then Return
    _GetCountFiles($aFiles)

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

    GUICtrlSetData($progress, 0)
    GUICtrlSetData($inProgress, 'Datei Info Lesen [0%]')
    Sleep(300)
    Local $sInfo, $sDateTime, $sPath, $sLastPath, $iFolder = 0
    $iStep = 100/$aFiles[0]
    ReDim $aListview[$aFiles[0]][3]
    ReDim $aItemID[$aFiles[0]]
    For $i = 1 To $aFiles[0]
    GUICtrlSetData($progress, $i*$iStep)
    GUICtrlSetData($inProgress, 'Datei Info Lesen [' & Int($i*$iStep) & '%]')
    $sInfo = _ImageGetInfo($aFiles[$i])
    $sDateTime = _ImageGetParam($sInfo, "DateTime")
    If $sDateTime = '' Then
    $sDateTime = FileGetTime($aFiles[$i], 1, 1)
    If $sDateTime = '' Then
    ContinueLoop
    Else
    $sDateTime = StringRegExpReplace($sDateTime, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '$1:$2:$3 $4:$5:$6')
    EndIf
    EndIf
    $sPath = StringLeft($aFiles[$i], StringInStr($aFiles[$i], '\', 1, -1) -1)
    If $sPath <> $sLastPath Then
    $sLastPath = $sPath
    $iFolder += 1
    EndIf
    $aListview[$i-1][0] = $iFolder
    $aListview[$i-1][1] = $sDateTime
    $aListview[$i-1][2] = $aFiles[$i]
    Next
    GUICtrlSetData($inProgress, 'Datei Info Lesen [100%]')
    Sleep(500)
    GUICtrlSetData($progress, 0)
    GUICtrlSetData($inProgress, 'Dateien Laden [0%]')
    _ArraySort_2ary($aListview, 0, 0)
    Sleep(300)
    _GUICtrlListView_BeginUpdate($hLV)
    For $i = 0 To UBound($aListview) -1
    GUICtrlSetData($progress, ($i+1)*$iStep)
    GUICtrlSetData($inProgress, 'Dateien Laden [' & Int(($i+1)*$iStep) & '%]')
    $aItemID[$i] = GUICtrlCreateListViewItem($aListview[$i][2] & '|' & $aListview[$i][0] & '|' & $aListview[$i][1], $ListView)
    If StringInStr(FileGetAttrib($aListview[$i][2]), 'R') Then
    GUICtrlSetColor(-1, 0xFF0000) ; == Test auf Schreibschutz
    $sReadOnly &= $i & ' '
    $iCntReadOnly += 1
    Else
    GUICtrlSetColor(-1, 0x00008B)
    EndIf
    Next
    _GUICtrlListView_HideColumn($hLV, 1)
    _GUICtrlListView_EndUpdate($hLV)
    GUICtrlSetData($progress, 100)
    GUICtrlSetData($inProgress, 'Dateien Laden [100%]')
    GUICtrlSetState($cbSelAll, $GUI_CHECKED)
    GUICtrlSetState($btRename, $GUI_ENABLE)
    _CheckAll(True)
    EndFunc

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

    Func _CheckAll($_iState)
    Local $iCount = _GUICtrlListView_GetItemCount($hLV)
    If $iCount = 0 Then Return
    For $i = 0 To $iCount -1
    If _StringInList($sReadOnly, String($i)) Then ContinueLoop
    _GUICtrlListView_SetItemChecked($hLV, $i, $_iState)
    Next
    EndFunc

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

    Func _StringInList($_sStr, $_sSub, $_sDelim=' ', $_iCase=0, $_iPart=0)
    Local $aList = StringSplit($_sStr, $_sDelim, 1)
    For $i = 1 To $aList[0]
    If $_iPart = 1 Then
    If StringInStr($aList[$i], $_sSub, $_iCase) Then Return True
    Else
    If $_iCase = 1 Then
    If $aList[$i] == $_sSub Then Return True
    Else
    If $aList[$i] = $_sSub Then Return True
    EndIf
    EndIf
    Next
    Return False
    EndFunc

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

    Func _GetCountFiles($_a)
    Local $sExt
    For $i = 1 To $_a[0]
    $sExt = StringTrimLeft($_a[$i], StringInStr($_a[$i], '.', 1, -1))
    If StringInStr($sExtPict, $sExt) Then
    $aCountFiles[0] += 1
    ContinueLoop
    EndIf
    If StringInStr($sExtVideo, $sExt) Then $aCountFiles[1] += 1
    Next
    GUICtrlSetData($lbCntPic, $aCountFiles[0])
    GUICtrlSetData($lbCntVid, $aCountFiles[1])
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hLV
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    If $hWndFrom <> $hWndListView Then Return $GUI_RUNDEFMSG
    Switch DllStructGetData($tNMHDR, "Code")
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $iItem = DllStructGetData($tInfo, "Index")
    If $iItem >= 0 Then ShellExecute(_GUICtrlListView_GetItemText($hLV, $iItem))
    Case $NM_RCLICK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $iItem = DllStructGetData($tInfo, "Index")
    If $iItem < 0 Then Return $GUI_RUNDEFMSG
    If StringInStr(FileGetAttrib(_GUICtrlListView_GetItemText($hLV, $iItem)), 'R') Then
    GUICtrlSetState($ConNoRO, $GUI_ENABLE)
    Else
    GUICtrlSetState($ConNoRO, $GUI_DISABLE)
    EndIf
    Local $aMPos = MouseGetPos()
    WinMove($hContext, '', $aMPos[0]-20, $aMPos[1]-70)
    GUISetState(@SW_SHOW, $hContext)
    $fShowContext = True
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _ToolTipMouseExit("text", [time [, x=-1 [, y=-1 [, "title" [, icon [, options]]]]]] )
    ;
    ; Description usual ToolTip, will be terminate with mouse move, latest after time
    ;
    ; Parameter same as used by ToolTip
    ; if x Or y =-1 then ToolTip will be placed at mouse position
    ; optional $TIME default is 3000 ms
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
    If $TIME = -1 Then $TIME = 3000
    Local $start = TimerInit(), $pos0 = MouseGetPos()
    If ($x = -1) Or ($y = -1) Then
    ToolTip($TEXT, $pos0[0], $pos0[1]-15, $TITLE, $ICON, $OPT)
    Else
    ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
    EndIf
    Do
    Sleep(50)
    $pos = MouseGetPos()
    Until (TimerDiff($start) > $TIME) Or _
    (Abs($pos[0] - $pos0[0]) > 10 Or _
    Abs($pos[1] - $pos0[1]) > 10)
    ToolTip('')
    EndFunc ;==>_ToolTipMouseExit

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Recursive listing of files and/or folders
    ; Parameter(s): $sPath Basicpath of listing ('.' -current path, '..' -parent path)
    ; $sExt Extension for file selection '*' or -1 for all (Default)
    ; $iDir -1 Files+Folder(Default), 0 only Files, 1 only Folder
    ; optional: $iRetType 0 for Array, 1 for String as Return
    ; optional: $sDelim Delimiter for string return
    ; 0 -@CRLF (Default) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Default) or string with found pathes of files and/or folder
    ; Array[0] includes count of found files/folder
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $strFiles = '' Then Return SetError(1,0,0)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

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

    ;===============================================================================
    ; Function Name....: _Multi_FileListToArray
    ; Description......: Dateien und/oder Ordner eines Pfades auflisten, mehrere Wildcards möglich
    ; Parameter(s).....: $_sPath Pfad für Auflistung
    ; .................: $_sFilter Filter für Dateityp(en), Wildcard ist "*" (Standard), mehrere Filter möglich, trennen mit "," z.B. "jpg,jpeg,gif,png,bmp"
    ; .................: $_iFlag 0 (Standard) = Dateien u. Ordner, 1 = nur Dateien, 2 = nur Ordner
    ; .................: $_fFullPath 0 (Standard) = nur Datei/Ordnername, 1 = kpl. Pfad
    ; .......optional..: $_sDirChar Standard "", Zeichen(folge), die einer Ordnerausgabe vorangestellt werden kann (z.B. "[D] ")
    ; .......optional..: $_fStrRet 'False' (Standard), mit 'True' Rückgabe eines Chr(0) getrennten Strings, statt eines Arrays
    ; Return Value(s)..: Erfolg Array mit den Dateien/Ordnern, Anzahl an $a[0]
    ; .................: Fehler 0 @error: 1-Pfad existiert nicht; 2-Filter fehlerhaft; 3-Flag fehlerhaft; 4-nichts gefunden
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _Multi_FileListToArray($_sPath, $_sFilter='*', $_iFlag=0, $_fFullPath=0, $_sDirChar='', $_fStrRet=False)
    If Not FileExists($_sPath) Then Return SetError(1,0,0)
    If StringRegExp($_sFilter, '[.;\s]') Then Return SetError(2,0,0)
    If $_iFlag < 0 Or $_iFlag > 2 Then Return SetError(3,0,0)
    If StringRight($_sPath, 1) <> '\' Then $_sPath &= '\'
    Local $fAll = False, $sFiles = '', $aFilter[2] = [1,'*'], $hSearch, $sFound, $aRet, $sSuffix, $sPath = ''
    If $_fFullPath Then $sPath = $_sPath
    If $_sFilter = '*' Then $fAll = True
    If Not $fAll Then $aFilter = StringSplit($_sFilter, ',')
    $hSearch = FileFindFirstFile($_sPath & '*.*')
    While True
    $sFound = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    Switch $_iFlag
    Case 0
    If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ; == alle Ordner
    $sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
    Else ; == Dateien Filtern
    If $fAll Then
    $sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
    Else
    For $i = 1 To $aFilter[0] ; == Dateien aus Filter
    $sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
    If $aFilter[$i] = $sSuffix Then
    $sFiles &= $sPath & $sFound & Chr(0)
    ExitLoop
    EndIf
    Next
    EndIf
    EndIf
    Case 1 ; == Dateien
    If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
    If $fAll Then
    $sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
    Else
    For $i = 1 To $aFilter[0] ; == Dateien aus Filter
    $sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
    If $aFilter[$i] = $sSuffix Then
    $sFiles &= $sPath & $sFound & Chr(0)
    ExitLoop
    EndIf
    Next
    EndIf
    Case 2 ; == Ordner
    If Not StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
    $sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
    EndSwitch
    WEnd
    If $_fStrRet And $sFiles <> '' Then Return StringTrimRight($sFiles, 1)
    $aRet = StringSplit(StringTrimRight($sFiles, 1), Chr(0))
    If @error Then Return SetError(4,0,0)
    Return $aRet
    EndFunc ;==> _Multi_FileListToArray

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

    ;------------------------------------------------------------------------------------------------------------
    ; Function _ArraySort_2ary(ByRef $ARRAY [, $DIM_1ST=0 [, $DESCENDING=0 [$REVERSE=False]]])
    ;
    ; Description sort an 2D-Array 2-ary
    ; BaseIndex is 0
    ; sort the whole array
    ;
    ; Parameter $ARRAY: Array to sort
    ; optional $DIM_1ST: MainSortIndex; 1st Dim. [0] or last occurence in 2nd Dim.[all other values] (default 0)
    ; optional $DESCENDING: Sort ascending[0]/descending[1] (default 0)
    ; optional $REVERSE: Sort 2nd Dimension reverse to 1st Dimension (default False)
    ;
    ; Return Succes ByRef 2-ary sorted Array
    ; Failure 0 set @error
    ; @error = 1 given array is not array
    ; @error = 2 given array has only 1 dimension
    ;
    ; Requirements By using numeric entry, be sure that type is "number" for correct sort
    ; Works with any occurences in 2nd Dimension
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;------------------------------------------------------------------------------------------------------------
    Func _ArraySort_2ary(ByRef $ARRAY, $DIM_1ST=0, $DESCENDING=0, $REVERSE=False)
    If ( Not IsArray($ARRAY) ) Then
    SetError(1)
    Return 0
    EndIf
    Local $FIRST = 0, $LAST, $tmpFIRST, $sortYES = 0
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    SetError(2)
    Return 0
    EndIf
    If $DIM_1ST <> 0 Then $DIM_1ST = $UBound2nd-1
    Local $arTmp[1][$UBound2nd]
    _ArraySort($ARRAY,$DESCENDING,0,0,$DIM_1ST)
    If $REVERSE Then
    Switch $DESCENDING
    Case 0
    $DESCENDING = 1
    Case 1
    $DESCENDING = 0
    EndSwitch
    EndIf
    For $u = 0 To $UBound2nd-1
    For $i = 0 To UBound($ARRAY)-1
    If $sortYES = 0 Then
    If $u > 0 Then
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) And _
    ( $ARRAY[$i][$u-1] = $ARRAY[$i+1][$u-1] )Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    Else
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    EndIf
    ElseIf $sortYES = 1 Then
    If ( $i = UBound($ARRAY)-1 ) Or ( $ARRAY[$i][$u] <> $ARRAY[$i+1][$u] ) Then
    $sortYES = 0
    $LAST = $i +1
    ReDim $arTmp[$LAST-$FIRST][$UBound2nd]
    $tmpFIRST = $FIRST
    For $k = 0 To UBound($arTmp)-1
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$tmpFIRST][$l]
    Next
    $tmpFIRST += 1
    Next
    $tmpFIRST = $FIRST
    Switch $DIM_1ST
    Case 0
    If $u = $UBound2nd-1 Then
    _ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1)
    Else
    _ArraySort($arTmp,$DESCENDING,0,0,$u+1)
    EndIf
    For $k = 0 To UBound($arTmp)-1
    For $l = 1 To $UBound2nd-1
    $ARRAY[$tmpFIRST][$l] = $arTmp[$k][$l]
    Next
    $tmpFIRST += 1
    Next
    Case $UBound2nd-1
    If $u = $UBound2nd-1 Then
    _ArraySort($arTmp,$DESCENDING,0,0,0)
    Else
    _ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd-1-$u-1)
    EndIf
    For $k = 0 To UBound($arTmp)-1
    For $l = 0 To $UBound2nd-2
    $ARRAY[$tmpFIRST][$l] = $arTmp[$k][$l]
    Next
    $tmpFIRST += 1
    Next
    EndSwitch
    EndIf
    EndIf
    Next
    $sortYES = 0
    Next
    EndFunc ;==>_ArraySort_2ary

    [/autoit]

    Hier noch ein paar Bilder:
    [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer01_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer02_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer03_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer04_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer05_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer06_t.gif]
    [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer4_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer5_t.gif] [Blockierte Grafik: http://www.imgbox.de/users/BugFix/thumbnails/renamer6_t.gif]

    DL bisher: 24

    Dateien

    image_get_info.au3 25,2 kB – 384 Downloads RenameImages[0.6].au3 53,84 kB – 345 Downloads
  • Automatisierter und beinahe sicherer Zugang zum Internet-Banking

    • BugFix
    • 2. Juni 2012 um 21:45
    Zitat von HalleMike

    Also doch bloß Arroganz°! Das hat nichts mit Dünnhäutigkeit meinerseits zu tun.


    Es reicht!
    Damit hast du den Bogen überspannt.
    Verwarnung und [CLOSED]

  • Tab-Items sperren und bei Bedarf enablen

    • BugFix
    • 2. Juni 2012 um 20:40

    Hi,
    ich habs mal noch etwas umgebaut und eine Funktion eingefügt (_GuiCtrlTab_ItemStateAble) zum wahlweisen Enablen/Disablen eines (mehrerer) beliebigen Tab-Items.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    OnAutoItExitRegister('OnAutoItExit')
    AdlibRegister('_Check', 50)

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

    Global Const $HC_ACTION = 0

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

    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
    Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $check = False, $IndexMouseOver
    Global $aDisableItem[1] = [0] ; == Array zum Speichern der Disable-Item

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

    $Form1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Tab = GUICtrlCreateTab(8, 8, 280, 304)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    Global $hookGUI = $Form1, $hookID = $Tab

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

    $countTimer = 0
    $fTimer = True
    $timer = TimerInit()
    While 1
    If $fTimer And TimerDiff($timer) >= 5000 Then
    $countTimer += 1
    $fTimer = False
    Switch $countTimer
    Case 1
    MsgBox(0, '', 'Disable Tab2 für 5 Sekunden')
    _GuiCtrlTab_ItemStateAble($Tab, 1, $GUI_DISABLE)
    $timer = TimerInit()
    $fTimer = True
    Case 2
    MsgBox(0, '', 'Enable Tab2 wieder')
    _GuiCtrlTab_ItemStateAble($Tab, 1, $GUI_ENABLE)
    EndSwitch
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _GuiCtrlTab_ItemStateAble($_hWnd, $_iIndex, $_iState) ; == $_iState: $GUI_ENABLE / $GUI_DISABLE
    If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
    Local $iCount = _GUICtrlTab_GetItemCount($_hWnd)
    If $_iIndex < 0 Or $_iIndex > $iCount -1 Then Return
    If $_iState <> $GUI_ENABLE Then $_iState = $GUI_DISABLE
    Switch $_iState
    Case $GUI_ENABLE
    Local $found = False
    For $i = 1 To $aDisableItem[0]
    If $aDisableItem[$i] = $i Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return
    Local $k = 0, $aTmp[$aDisableItem[0]] = [$aDisableItem[0] -1]
    For $j = 1 To $aDisableItem[0]
    If $j = $i Then ContinueLoop
    $k += 1
    $aTmp[$k] = $aDisableItem[$j]
    Next
    $aDisableItem = $aTmp
    Case $GUI_DISABLE
    For $i = 1 To $aDisableItem[0]
    If $aDisableItem[$i] = $_iIndex Then Return
    Next
    $aDisableItem[0] += 1
    ReDim $aDisableItem[$aDisableItem[0]+1]
    $aDisableItem[$aDisableItem[0]] = $_iIndex
    EndSwitch
    EndFunc

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Select
    Case $nCode < 0
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case Not _MouseOverTabItem($hookGUI, $hookID)
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case $wParam = $WM_LBUTTONDOWN
    If $nCode = $HC_ACTION Then
    $check = True ; Überprüfung aktivieren
    Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSelect
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_MouseProc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If ControlGetFocus($Form1) <> 'SysTabControl321' Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN Then
    Switch $vkCode
    Case 0x25, 0x27
    $check = True
    Return -1
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func _Check()
    If Not $check Then Return
    For $i = 1 To $aDisableItem[0]
    If $IndexMouseOver = $i Then
    $check = False
    Return
    EndIf
    Next
    _GUICtrlTab_SetCurSel(GUICtrlGetHandle($Tab), $IndexMouseOver)
    $check = False
    EndFunc ;==>_Check

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

    Func _MouseOverTabItem($GUI, $TabID) ; == True wenn Maus über einem der TabItem
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
    DllStructSetData($tMouse, 1, $posM[0])
    DllStructSetData($tMouse, 2, $posM[1])
    Opt('MouseCoordMode', $old)
    Local $tTabItem, $iCountItem = _GUICtrlTab_GetItemCount(GUICtrlGetHandle($TabID))
    $IndexMouseOver = -1
    For $i = 0 To $iCountItem -1
    $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $i, 1)
    If _WinAPI_PtInRect($tTabItem, $tMouse) Then
    $IndexMouseOver = $i
    Return True
    EndIf
    Next
    Return False
    EndFunc ;==>_MouseOverTabItem

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

    ;===============================================================================
    ; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    ; Description: Returns the co-ordinates of a TabItem relatively to the GUI co-ordinates
    ; Parameter(s): $GUI - window handle
    ; $TabID - Tab ID (not handle!)
    ; $iTabItem - TabItem index
    ; $iReturnType - Return type array=0 (default), RECT-structure=1
    ; Return Value(s): Array or structure with co-ordinates of a TabItem (left, top, right, bottom)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    Local $hWnd = GUICtrlGetHandle($TabID)
    Local $TabPos = ControlGetPos($GUI, '', $TabID)
    Local $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $pRect = DllStructGetPtr($tRECT)
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
    Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
    If $iTabItem > 0 Then
    For $i = 0 To $iTabItem -1
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    $posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Next
    EndIf
    If $iReturnType Then
    DllCall("user32", 'long', 'SetRect', 'ptr', $pRECT, 'long', $posLeft, _
    'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
    Return $tRECT
    Else
    Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
    Return $aOut
    EndIf
    EndFunc ;==>_GUICtrlTab_GetItemRectRelativ

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHook2)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]
  • Tab-Items sperren und bei Bedarf enablen

    • BugFix
    • 2. Juni 2012 um 18:55

    Ich hatte das, wie folgt gelöst. Im Bsp. ist TAB-Item3 Passwort-geschützt (pass)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    OnAutoItExitRegister('OnAutoItExit')
    AdlibRegister('_CheckPass', 50)

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

    Global Const $HC_ACTION = 0

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

    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
    Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $hTab, $lastTab = 0, $checkPass = False

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

    Global $Passwort = 'pass', $passItem = 2 ; <== 0-basierter Index des PW-geschützten TabItems

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

    $Form1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Tab = GUICtrlCreateTab(8, 8, 280, 304)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    Global $hookGUI = $Form1, $hookID = $Tab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Tab
    Switch GUICtrlRead($Tab)
    Case 0
    WinSetTitle($Form1, '', ' >> Tab1 aktiviert <<')
    Case 1
    WinSetTitle($Form1, '', ' >> Tab2 aktiviert <<')
    Case 2
    WinSetTitle($Form1, '', ' >> Tab3 aktiviert <<')
    Case 3
    WinSetTitle($Form1, '', ' >> Tab4 aktiviert <<')
    EndSwitch
    Sleep(1000)
    WinSetTitle($Form1, '', 'Testfenster')
    EndSwitch
    WEnd

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Select
    Case $nCode < 0
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case Not _MouseOverTabItem($hookGUI, $hookID, $passItem)
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case $wParam = $WM_LBUTTONDOWN
    If $nCode = $HC_ACTION Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSelect
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_MouseProc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If ControlGetFocus($Form1) <> 'SysTabControl321' Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN Then
    Switch $vkCode
    Case 0x25 ; ==> Pfeil li.
    If GUICtrlRead($hookID) - 1 = $passItem Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Tastendruck wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    Case 0x27 ; ==> Pfeil re.
    If GUICtrlRead($hookID) + 1 = $passItem Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Tastendruck wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func _CheckPass()
    If Not $checkPass Then Return
    If InputBox('Passwort', 'Bitte Passwort eingeben:') == $Passwort Then
    _GUICtrlTab_SetCurSel(GUICtrlGetHandle($Tab), $passItem)
    Else
    MsgBox(0, 'Fehler', 'Falsches Passwort!')
    EndIf
    $checkPass = 0
    EndFunc ;==>_CheckPass

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

    Func _MouseOverTabItem($GUI, $TabID, $iTabItem)
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
    DllStructSetData($tMouse, 1, $posM[0])
    DllStructSetData($tMouse, 2, $posM[1])
    Opt('MouseCoordMode', $old)
    Local $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, 1)
    If _WinAPI_PtInRect($tTabItem, $tMouse) Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>_MouseOverTabItem

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

    ;===============================================================================
    ; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    ; Description: Returns the co-ordinates of a TabItem relatively to the GUI co-ordinates
    ; Parameter(s): $GUI - window handle
    ; $TabID - Tab ID (not handle!)
    ; $iTabItem - TabItem index
    ; $iReturnType - Return type array=0 (default), RECT-structure=1
    ; Return Value(s): Array or structure with co-ordinates of a TabItem (left, top, right, bottom)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    Local $hWnd = GUICtrlGetHandle($TabID)
    Local $TabPos = ControlGetPos($GUI, '', $TabID)
    Local $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $pRect = DllStructGetPtr($tRECT)
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
    Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
    If $iTabItem > 0 Then
    For $i = 0 To $iTabItem -1
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    $posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Next
    EndIf
    If $iReturnType Then
    DllCall("user32", 'long', 'SetRect', 'ptr', $pRECT, 'long', $posLeft, _
    'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
    Return $tRECT
    Else
    Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
    Return $aOut
    EndIf
    EndFunc ;==>_GUICtrlTab_GetItemRectRelativ

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHook2)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Zahlen aus der momentanigen Bildschirmanzeige lesen

    • BugFix
    • 2. Juni 2012 um 17:30

    OK, nun reicht es.
    Wir alle wissen spätestens nach dem krampfhaften Bemühen des TE sein Vorhaben schönzureden, dass es sich um ein Captcha-Auslesen handelt.
    Verstoß gegen die Forenregeln --- [CLOSED]

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™