• Hallo Leute habe den DateiSucher erweitert Funkey hatte schon recht das _GetFilesFolder_Rekursiv
    Nicht die richtige Func ist aber eine super alternative!

    Option1: Es lassen sich alle Dateien suche egal wie sie geschrieben und auf welchem Lokalen Laufwerk sie liegt.

    Option2: Suchen mit Wildcards Einzige Einschränkung das Dateien zusammenhängend geschrieben sein müssen und es lässt sich nicht auf CD/DVD Laufwerke suchen. [ und Netz.w.-Laufwerke ]

    Option3: Doppelklick auf ein gefundenen Eintrag und es öffnet sich das Verzeichnis in dem die Datei liegt.

    Neu!!!!!!

    Option4: Auf Freigegebenen Netzwerk-Laufwerke suchen, bei Fund auch Ordner Öffnen möglich [ Die Funktion ist noch nicht ausreichend Getestet ]
    Bitte Postet eure Test-Läufe!

    Option5: ( Datei-Option) Dateien Kopieren, Verschieben, Löschen, Umbenennen [ nicht auf Netz.w.-Laufwerke ]

    Update: überarbeitet!

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=655.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <_FileFindNet.au3>
    #include <GuiListView.au3>
    #include <String.au3>
    #include <File.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $szDrive, $szDir, $szFName, $szExt, $EV, $evt, $Path
    Global Const $D_B_C = -3
    Local $SYS[13]
    MsgBox(0, 'Info', 'Laufwerke werden Automatisch erkannt und durchsucht!')
    GUICreate('Datei - Sucher', 800, 460, -1, -1)
    GUISetBkColor(0x09999999)
    GUISetOnEvent(-3, '_ExitComand')
    $SYS[0] = GUICtrlCreateListView('', 0, 0, 800, 400)
    Local $hLV = GUICtrlGetHandle($SYS[0])
    _GUICtrlListView_AddColumn($hLV, 'Fund [ Laufwerk: \ Pfad \ Datei ] - DoubleClick zum Öffnen des Verzeichnis! ', 500)
    $SYS[1] = GUICtrlCreateInput('', 5, 420, 240, 20)
    $SYS[2] = GUICtrlCreateCheckbox('Nur Freigegebene Netzwerk-Laufwerke', 430, 410, 205, 20)
    $SYS[3] = GUICtrlCreateLabel('Fund:', 690, 423, 30, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 9, 900, '', '')
    $SYS[4] = GUICtrlCreateLabel('', 730, 423, 50, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 9, 900, '', '')
    GUICtrlCreateButton('Suchen', 260, 417, 70, 25)
    GUICtrlSetOnEvent(-1, '_Starter')
    GUICtrlCreateButton('Option', 345, 417, 70, 25)
    GUICtrlSetOnEvent(-1, 'OPSHOW')
    $SYS[11] = GUICtrlCreateLabel('', 5, 443, 250, 20)
    $SYS[12] = GUICtrlCreateCheckbox('Nur Pfad ausgabe ', 430, 430, 205, 20)
    GUISetState()
    GUIRegisterMsg(0x004E, 'VOeffnen')

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

    Global $GUI1 = GUICreate('Datei Option', 480, 100, -1, -1, $WS_POPUPWINDOW)
    GUISetBkColor(0x09999999)
    $SYS[5] = GUICtrlCreateButton('Kopieren', 20, 30, 80, 22)
    GUICtrlSetOnEvent(-1, 'Option')
    $SYS[6] = GUICtrlCreateButton('Verschieben', 110, 30, 80, 22)
    GUICtrlSetOnEvent(-1, 'Option')
    $SYS[7] = GUICtrlCreateButton('Löschen', 200, 30, 80, 22)
    GUICtrlSetOnEvent(-1, 'Option')
    $SYS[8] = GUICtrlCreateButton('Umbenennen', 20, 58, 80, 22)
    GUICtrlSetOnEvent(-1, 'Option')
    $SYS[9] = GUICtrlCreateInput('', 110, 60, 350, 20)
    GUICtrlCreateButton('Exit', 380, 30, 80, 22)
    GUICtrlSetOnEvent(-1, '_Exit1')
    GUICtrlCreateLabel(' Datei Option', 0, 5, 1000, 20, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 11, 900, '', '')
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateButton('Aktualisieren', 290, 30, 80, 22)
    GUICtrlSetOnEvent(-1, 'OPSHOW')
    GUISetState(@SW_HIDE, $GUI1)

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

    Func _Starter()
    Dim $Suche = GUICtrlRead($SYS[1]), $Drive, $st = '.', $a, $y, $z = 0, $j_N = 0, $co
    If $Suche = '' Then Return GUICtrlCreateListViewItem(' " Error " Keine Eingabe im Suchfeld', $SYS[0])
    If $Suche = '*.*' Or $Suche = '*.' Or $Suche = '.*' Then Return MsgBox(0, 'Info', 'Diese [*.*] Wildcard oder nur [*.] u. [.*] wird nicht unterstützt!')
    _GUICtrlListView_DeleteAllItems($hLV)
    GUICtrlSetData($SYS[4], '')
    Dim $obWMI = ObjGet('winmgmts:\\' & $st & '\root\CIMV2')
    If BitAND(GUICtrlRead($SYS[12]), $GUI_CHECKED) = $GUI_CHECKED Then $j_N = 1
    If BitAND(GUICtrlRead($SYS[2]), $GUI_CHECKED) = $GUI_CHECKED Then
    $co = $obWMI.ExecQuery('SELECT * FROM Win32_SystemNetworkConnections')
    If Not IsObj($co) Then Return MsgBox(0, 'WMI Output', 'No WMI Objects Found for class: ' & 'Drive')
    SplashTextOn('Suche gestartet', ' Bitte warten.....', 150, 40, -1, -1, 20, '', 13)
    For $ob In $co
    $y = StringSplit($ob.PartComponent, '\')
    GUICtrlSetData($SYS[11], 'Suche in : ' & StringReplace('\\' & $y[9] & '\' & $y[11], '"', ''))
    $a = _FileFindNet($Suche, StringReplace('\\' & $y[9] & '\' & $y[11], '"', ''), '', $j_N, 0)
    For $n = 1 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$n], $SYS[0])
    Next
    GUICtrlSetData($SYS[4], $a[0])
    Next
    Else
    $co = DriveGetDrive('all')
    SplashTextOn('Suche gestartet', ' Bitte warten.....', 150, 40, -1, -1, 20, "", 13)
    For $i = 1 To UBound($co) - 1
    $Drive = DriveGetFileSystem($co)
    If @error = 1 Then ContinueLoop
    GUICtrlSetData($SYS[11], 'Suche in : ' & _StringProper($co[$i] & '\') & ' ' & $Drive)
    $a = _FileFindNet($Suche, '', _StringProper($co[$i] & '\'), $j_N, 0)
    If @error Then ContinueLoop
    $z += $a[0]
    For $n = 1 To UBound($a) - 1
    GUICtrlCreateListViewItem($a[$n], $SYS[0])
    Next
    GUICtrlSetData($SYS[4], $z)
    Next
    EndIf
    _GUICtrlListView_SetColumnWidth($SYS[0], 0, $LVSCW_AUTOSIZE)
    SplashOff()
    EndFunc ;==>_Starter

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

    Func OPSHOW()
    If GUICtrlRead($SYS[0]) = ' ' Then Return MsgBox(0, 'Info', 'Bitte wählen sie eine Datei im Hauptprogramm [ Tabelle ] aus ! ')
    $Path = _PathSplit(StringReplace(GUICtrlRead(GUICtrlRead($SYS[0])), '|', ' '), $szDrive, $szDir, $szFName, $szExt)
    GUICtrlSetData($SYS[9], $Path[3] & $Path[4])
    GUISetState(@SW_SHOW, $GUI1)
    EndFunc ;==>OPSHOW

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

    Func Option()
    Dim $Folder, $len
    $Path = _PathSplit(StringReplace(GUICtrlRead(GUICtrlRead($SYS[0])), '|', ' '), $szDrive, $szDir, $szFName, $szExt)
    Switch @GUI_CtrlId
    Case $SYS[5]
    $Folder = FileSelectFolder('Ordner auswählen', '')
    FileCopy($Path[1] & $Path[2] & GUICtrlRead($SYS[9]), $Folder & '\')
    ShellExecute($Folder)
    Case $SYS[6]
    $Folder = FileSelectFolder('Ordner auswählen', '')
    FileMove($Path[1] & $Path[2] & GUICtrlRead($SYS[9]), $Folder & '\')
    ShellExecute($Folder)
    Case $SYS[7]
    FileDelete($Path[1] & $Path[2] & GUICtrlRead($SYS[9]))
    Case $SYS[8]
    If StringLeft(GUICtrlRead($SYS[11]), 2) = '\\' Then Return MsgBox(0, 'Info', ' Datei kann auf diesen Wege nicht Umbenannt werden!')
    $len = StringLen($Path[1] & $Path[2])
    Run(@ComSpec & ' /c ' & $Path[1] & ' & cd ' & StringLeft($Path[1] & $Path[2], $len - 1) & ' & REN ' & $Path[3] & $Path[4] & '' & GUICtrlRead($SYS[9]), '', @SW_HIDE, 2)
    ShellExecute($Path[1] & $Path[2])
    EndSwitch
    EndFunc ;==>Option

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

    Func VOeffnen($hWndGUI, $MsgID, $wP, $lP)
    If GUICtrlRead(GUICtrlRead($SYS[0])) = '' Then Return (0)
    $EV = DllStructCreate('int;int;int', $lP)
    If @error Then Return
    $evt = DllStructGetData($EV, 3)
    If $wP = $SYS[0] Then
    If $evt = $D_B_C Then
    $Path = _PathSplit(StringReplace(GUICtrlRead(GUICtrlRead($SYS[0])), '|', ''), $szDrive, $szDir, $szFName, $szExt)
    ShellExecute($Path[1] & $Path[2])
    EndIf
    EndIf
    EndFunc ;==>VOeffnen

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

    Func _ExitComand()
    Exit
    EndFunc ;==>_ExitComand

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

    Func _Exit1()
    GUISetState(@SW_HIDE, $GUI1)
    EndFunc ;==>_Exit1

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

    While 1 * Sleep(10)
    WEnd

    [/autoit]


    Lg Kleiner

    3 Mal editiert, zuletzt von kleiner27 (23. Januar 2010 um 12:00)

  • Ich würde die MsgBox wegmachen und einfach nur den Pfad zurückgeben lassen, dann kann man die FUnktion viel universeller brauchen.

  • Ich denke _GetFilesFolder_Rekursiv ist dafür nicht die richtige Funktion. Folgendes dauert anstelle von 5min nur 5sec. Außerdem kann man Wildcards verwenden.

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>

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

    $a = _FindFiles('notepad.exe', 'C:\')
    _ArrayDisplay($a)
    $a = _FindFiles('note*', 'C:\')
    _ArrayDisplay($a)

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

    Func _FindFiles($sFileName, $sStartPath)
    ;funkey 20.12.2009
    Local $line, $aFiles
    Local $cmd = 'dir /a /b /s "' & $sFileName
    Local $Pid = Run(@ComSpec & " /c " & $cmd, $sStartPath, @SW_HIDE, 2)
    While 1
    $line &= StdoutRead($Pid, 0, 0)
    If @error Then ExitLoop
    WEnd
    Return StringSplit(StringTrimRight($line, 2), @CRLF, 3)
    EndFunc

    [/autoit]
  • Also!

    Wenn ich in diesem Verzeichnis [ C:\Dokumente und Einstellungen\.......\Anwendungsdaten\.purple\logs\msn\.......@live.de\......l@msn.de] diese Datei 2009-10-16.195302+0200CET.html suche bekomme ich nichts ausgegeben!


    Spoiler anzeigen
    [autoit]

    #include <_GetFilesFolder_Rekursiv.au3>
    #include <Array.au3>
    #include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)
    GUICreate('test',500,500,-1,-1)
    GUISetOnEvent(-3, '_Exit')
    $SYS = GUICtrlCreateEdit('', 0, 0, 400, 400)
    GUISetState()

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

    _DateiSucher()

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

    Func _DateiSucher()
    Local $x = 1, $y = 1, $Gesuch = '2009-10-16.195302+0200CET.html', $Label = 'C:\'
    Dim $aRueckgabeArray = _GetFilesFolder_Rekursiv($Label, $x, $y)
    For $i = 1 To $aRueckgabeArray[0]
    Suchen(FileFindFirstFile($aRueckgabeArray[$i] & '*.*'), $aRueckgabeArray[$i], $Gesuch)
    Next
    EndFunc ;==>_DateiSucher

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

    ;-----------------------------------------------
    ;---Suchen($PfadPDE, $Pfad, $Gesuch)
    ;
    ;~ [PfadPDE] = Pfad\*.*
    ;
    ;~ [$Pfad] = Pfad\
    ;
    ;~ [$Gesuch] = Gesuchte Datei
    ;
    ;----------------------------------------------

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

    Func Suchen($PfadPDE, $Pfad, $Gesuch)
    While 1
    If FileFindNextFile($PfadPDE) = '' Then ExitLoop
    If FileFindNextFile($PfadPDE) = $Gesuch Then _GUICtrlEdit_InsertText($SYS, $Pfad & $Gesuch & @CRLF );MsgBox(0,0,$Pfad & $Gesuch)
    WEnd
    EndFunc ;==>Suchen

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

    Func _Exit()
    Exit
    EndFunc

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

    While 1 * Sleep(10)
    WEn

    [/autoit]

    Ich kann noch nicht sagen ob es an BugFix seine Funktion lieg aber meine im zusammenhang klapt nicht

    Edir: an BugFix Funktion liegt es nicht!


    Edit2: habe den fehler gefunden ich hatte die abfrage geendert in

    [autoit]

    While 1
    If FileFindNextFile($PfadPDE) = '' Then ExitLoop
    If FileFindNextFile($PfadPDE) = $Gesuch Then _GUICtrlEdit_InsertText($SYS, $Pfad & $Gesuch & @CRLF );MsgBox(0,0,$Pfad & $Gesuch)
    WEnd

    [/autoit]

    und so geht es

    [autoit]

    While 1
    Dim $file = FileFindNextFile($PfadPDE)
    If $file = '' Then ExitLoop
    If $file = $Gesuch Then _GUICtrlEdit_InsertText($SYS, $Pfad & $Gesuch & @CRLF );MsgBox(0,0,$Pfad & $Gesuch)
    WEnd

    [/autoit]

    Aber auf jeden fall ist miene func langsamer! :(


    LG Kleiner

    Einmal editiert, zuletzt von kleiner27 (20. Dezember 2009 um 18:49)

  • In der Version schafe ich die datein in 3,7 sec zu suchen und mit deiner 1,3 sec!

    Spoiler anzeigen
    [autoit]

    #include <_GetFilesFolder_Rekursiv.au3>
    #include <Array.au3>
    #include <GuiEdit.au3>

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate('test', 500, 500, -1, -1)
    GUISetOnEvent(-3, '_Exit')
    $SYS = GUICtrlCreateEdit('', 0, 0, 400, 400)
    GUISetState()

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

    _DateiSucher()

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

    Func _DateiSucher()
    Dim $x = 1, $y = 1, $Gesuch = 'notepad.exe', $Label = 'C:\', $Info, $file, $Array
    $Array = _GetFilesFolder_Rekursiv($Label, $x, $y)
    For $i = 1 To UBound($Array) - 1
    $Info = FileFindFirstFile($Array[$i] & '*.*')
    Do
    $file = FileFindNextFile($Info)
    If $file = $Gesuch Then _GUICtrlEdit_InsertText($SYS, $Array[$i] & $Gesuch & @CRLF)
    Until $file = ''
    Next
    EndFunc ;==>_DateiSucher

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    While 1 * Sleep(10)
    WEnd

    [/autoit]

    LG Kleiner

  • >"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\Stefan\Downloads\Sucher.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
    +>21:58:39 Starting AutoIt3Wrapper v.2.0.0.3 Environment(Language:0407 Keyboard:00000407 OS:WIN_VISTA/ CPU:X64 OS:X86)
    >Running AU3Check (1.54.19.0) from:C:\Program Files\AutoIt3
    C:\Users\Stefan\Downloads\Sucher.au3(7,10) : ERROR: can't open include file <_FileFindNet.au3>
    #include <_FileFindNet.au3>
    ~~~~~~~~~^
    C:\Users\Stefan\Downloads\Sucher.au3(76,94) : ERROR: _FileFindNet(): undefined function.
    $a = _FileFindNet($Suche, StringReplace('\\' & $y[9] & '\' & $y[11], '"', ''), '', $j_N, 0)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Stefan\Downloads\Sucher.au3 - 2 error(s), 0 warning(s)
    !>21:58:39 AU3Check ended.rc:2
    +>21:58:45 AutoIt3Wrapper Finished
    >Exit code: 0 Time: 7.043


    hab das #include nicht :(