Ordner nach Dateien durchsuchen

  • Hallo.

    Ich hatte vor mir ein Script zu basteln, das den order durchsucht in dem ich mich befinde. Ich brauch das für meinen Musik-Ordner, da er schon recht groß ist und ich nicht immer jede Musik-Datei wiederfinde.

    Ich will auch nicht immer die Windows-Suche benutzen.

    da ich weiß das man das mit FileFindFirstFile und FileFindNextFile alles machen kann, hab ich schonmal angefangen zu scripten.


    Hier der Code:


    [autoit]

    #include <GUIConstants.au3>
    #include <misc.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Suchen", 346, 140, 370, 261)
    $Button1 = GUICtrlCreateButton("Start", 115, 88, 113, 33, 0)
    $Eingeben = GUICtrlCreateInput("", 56, 32, 233, 26)
    GUICtrlSetLimit(-1, 100)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xF4F7FC)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    While 1
    $search = FileFindFirstFile($Eingeben)
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf
    $file = FileFindNextFile($search)
    If @error then ExitLoop
    MSgBox(0,"Titel",$file)
    WEnd
    FileClose($search)
    EndSwitch
    WEnd

    [/autoit]


    Problem:

    - Das Scipt sagt andauernd, dass keine Dateien gefunden worden, obwhol ich weiß das sie in dem Ordner sind!

    - Ich will das die Datei dann im Ordner so markiert wird, nur ich weiß nicht wie ich das mache.


    Hoffe, mir kann jemand helfen, Danke schonmal :)

  • Hilft dir das?

    Spoiler anzeigen
    [autoit]


    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = '' ;hier den Pfad des Ordners eingeben
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    Global $aOrdner = _FileListToArray($Ordner, "*.*", 0) ;Als Filter kann man auch .mp3 oder sowas wählen
    _ArrayDisplay($aOrdner)
    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]

    Den Pfad zum Ornder kannst du auch per

    [autoit]

    Fileselectfolder

    [/autoit]

    auswählen.

  • Einen Pfad mit entsprechenden Dateien drin hast du angegeben?

    Hier das Ganze mit errorhandling:

    Spoiler anzeigen
    [autoit]


    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = 'D:\Mp3\MP3s' ;hier den Pfad des Ordners eingeben
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    _Listtoarray()

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Listtoarray()
    local $aOrdner = _FileListToArray($Ordner, "*.*", 0) ;Als Filter kann man auch .mp3 oder sowas wählen
    if @error Then
    MsgBox(0, "Fehler" ,@error)
    return
    endif
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next
    endfunc

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]
  • dann mach eins :D

    und dazu eine

    [autoit]

    #include <Array.au3>
    _ArraySearch ( $avArray, $vWhat2Find, $iStart = 0, $iEnd = 0, $iCaseSense = 0, $fPartialSearch = False )

    [/autoit]

    -Funktion

  • Ach man ich bin zu dumm dafür oO Bei mir ist kein Input wenn ich dein Script aufrufe, der macht sogar noch ne Fehlermeldung^^ EDIT: Ich muss den ListView erst per Kreuz schließen damit der Input kommt, kann man das ändern?
    EDIT2: Ich mekre jetzt gerade, dss er nur Dateien sucht die den passenden Anfang haben, geht das auch das ich Abschnitte mitten aus der Zeile rausnehmen kann? zB: Wenn ich nun xxx -yyy zzzz haben, das ich dann zzzz eingeben kann und der das trotzdem findet?

    Line:41: Variable used without being declared

  • Nimm mal Version zwei.
    Was du meinst ist das Listview von _ArrayDisplay, was nur zu Demozwecken eingebaut ist.

    edit \ die Suche lässt sich deinen Wünschen anpassen indem Zeile 43 durch

    [autoit]

    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindInText($hList, GUICtrlRead($Input)))

    [/autoit]

    ersetzt wird.

  • Hab wieder mal eine Frage:


    Das hier ist ja der Code:

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = '' ; Hier steht normalerweise ein Pfad, also nicht beachten

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

    HotKeySet("{ENTER}", "_Open_Ordner")
    HotKeySet("{PGUP}", "_Hide")
    HotKeySet("{PGDN}", "_Show")
    HotKeySet("{END}", "_Exit")

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Suchen', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 5, 380, 30)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    _Listtoarray()

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

    GUISetState()
    While 1
    Sleep(1000)
    WEnd

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

    ; Functions
    Func _Hide()
    GUISetState(@SW_HIDE) ;==> GUI Hide
    EndFunc

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

    Func _Show()
    GUISetState (@SW_SHOW) ;==> GUI Restore
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Listtoarray()
    local $aOrdner = _FileListToArray($Ordner, "*.mp3", 0) ;Als Filter kann man auch .mp3 oder sowas wählen
    if @error Then
    MsgBox(0, "Fehler" ,@error)
    return
    endif
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next
    endfunc

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindInText($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]


    Frage1: Was bringt dieses WM_COMMAND?

    Frage2: Wie ihr seht, hab ich eine Show und Hide Funktion eingbaut. Nachteil ist nun, wenn der Hide-Modus an ist, will ich ganz normal weiterarbeiten, hinzu kommt dass man nunmal Enter drückt. Drücke ich nun Enter, wäjlt er das Lied aus was markiert ist ( das soll er ja auch ) und spielt die Musik ab. Ich will aber nur, dass er bei Enter drücken die Musik abstellt, wenn es im Show-Modus ist. Ich hatte schon probiert, die Opt oben mit einer Variable zu dekarieren und dann bei Hide und Show auf 0 und 1 zu setzen, aber das geht nicht so richtig. Andere Ansätze hatte ich leider noch nicht :(


    EDIT: Hab noch ne Frage: Warum wurde oben das "Opt" auf -3 gesetzt und nicht auf 1?
    MfG

  • hallo Pinguin94,

    zu 1) damit wird die Func _Check_Eingabe aufgerufen und der Doppelklick in der ListBox ermöglicht und in diesem Fall die Func _Open_Ordner aufgerufen
    zu 2) du kannst doch den HotKey aus- und wieder einschalten

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = '' ; Hier steht normalerweise ein Pfad, also nicht beachten

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

    HotKeySet("{ENTER}", "_Open_Ordner")
    HotKeySet("{PGUP}", "_Hide")
    HotKeySet("{PGDN}", "_Show")
    HotKeySet("{END}", "_Exit")

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Suchen', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 5, 380, 30)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    _Listtoarray()

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

    GUISetState()
    While 1
    Sleep(1000)
    WEnd

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

    ; Functions
    Func _Hide()
    GUISetState(@SW_HIDE) ;==> GUI Hide
    HotKeySet("{ENTER}")
    EndFunc ;==>_Hide

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

    Func _Show()
    HotKeySet("{ENTER}", "_Open_Ordner")
    GUISetState(@SW_SHOW) ;==> GUI Restore
    EndFunc ;==>_Show

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Listtoarray()
    Local $aOrdner = _FileListToArray($Ordner, "*.mp3", 0) ;Als Filter kann man auch .mp3 oder sowas wählen
    If @error Then
    MsgBox(0, "Fehler", @error)
    Return
    EndIf
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next
    EndFunc ;==>_Listtoarray

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

    Func _Check_Eingabe($iwParam)
    Switch $iwParam
    Case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindInText($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc ;==>_Check_Eingabe

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc ;==>_Open_Ordner

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

    Func _Ende()
    Exit
    EndFunc ;==>_Ende

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]


    zu 3) welchen Opt meinst du, kann nur

    [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit]

    entdecken, Falls du

    [autoit]

    GUISetOnEvent(-3, '_Ende')

    [/autoit]

    meinst, die -3 steht für $GUI_EVENT_CLOSE, also den Schliessen-Button der Gui [das "X" (oben rechts)]


    mfg (Auto)bert