Selektiertes Objekt im Ordner erfassen

  • Hallo,

    wenn ich einen Ordner öffne und darin befinden sich viele Dateien, wie kann ich das selektierte objekt in einem Ordner erfassen, der momentan aktiv also im Vordergrund ist!

    Wäre cool wenn mir des jemand sagen kann.. möchte dann nämlich ein Programm schreiben, das folgenden Zweck erfüllt.
    Wenn ich einen Ordner mit z.B vielen MP3's hab schau den durch und möchte welche kopieren in einen anderen Ordner.
    Das Mehrfach Selektieren is blöd wenn ich mir zwischendurch ein Lied anhöhren will, deshalb will ich ein Programm schreiben das mit dann mit einem HotKey die Dateien die Selektiert sind in einen von mir angegebenen Ordner kopiert!

    Vielen Dank

    2 Mal editiert, zuletzt von Madmaxx89 (27. Juni 2009 um 17:58)

  • Hi, kann auch daran liegen, dass mir der Schädel brummt :pinch: , aber so ganz versteh ich net, was du willst.
    Bitte mal genauer erklären ^^

  • okay ich versuchs nochmal..

    wenn ich einen Doppelklick auf einen Ornder mache, öffnet er sich doch oder?
    Sagen wir darin sind viele Dateien egal welcher Art, wenn ich davon eine Datei auswähle ist es doch selektiert also blau markiert oder?
    Diese Datei will ich mich autoit erfassen!

    Dann einen HotKey für kopieren setzen.. das er mir die Datei die markiert ist in einen bestimmten Ordner kopiert!

    Ich hoffe es is verständlicher..

    • Offizieller Beitrag

    Ich nehme mal an, dass Du bei Deinem Doppelklick den Explorer von Windows meinst.
    Du öffnest also einen Ordner im Explorer, markierst eine oder mehrere Dateien und willst diese per Hotkey in ein vorher festgelegtes Verzeichnis kopieren. Habe ich das soweit richtig gedeutet?
    Wenn ja, dann gibt es hier die Lösung:

    Spoiler anzeigen
    [autoit]


    HotKeySet('!c', '_CopySelectedFiles') ; Hotkey: [ALT] & [code=c]
    HotKeySet('!q', '_End') ; Hotkey: [ALT] & [q]
    While True
    Sleep(50)
    WEnd

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

    Func _CopySelectedFiles()
    Local $sSelItems, $aItems, $aFiles, $sPath, $sDestPath
    If WinExists('[CLASS:CabinetWClass]') Then
    $sSelItems = ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetSelected', 1)
    If $sSelItems <> '' Then
    $sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $aItems = StringSplit($sSelItems, '|')
    Dim $aFiles[$aItems[0] + 1] = [$aItems[0]]
    For $i = 1 To $aItems[0]
    $aFiles[$i] = $sPath & ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetText', $aItems[$i])
    Next
    $sDestPath = 'c:\copy\' ; <- hier das Zielverzeichnis eintragen
    For $i = 1 To $aFiles[0]
    FileCopy($aFiles[$i], $sDestPath, 8 + 0) ; <- wenn statt der 0 eine 1 steht, dann evtl. bestehende Datei überschreiben
    Next
    EndIf
    EndIf
    EndFunc

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

    Func _End()
    Exit
    EndFunc

    [/autoit]

    Funktioniert zumindest unter WindowsXP. Ob's auch unter Vista läuft, kann ich nicht sagen.

  • mhm.. Funktioniert Leider bloss bei Ordner..

    habt ihr ne idee wie es auch bei normalen Dateien, wie etwa.. txt, doc, xls, oder mp3 usw funktioniert.. will ja nicht immer ganze ordner kopieren!

    habs um ne kleine GUI erweitert, dazu noch eine Frage wie kann ich die GUI, wenn ich auf den minimieren Button klicke direkt in den SysTray bringen?

  • ja ich benutze Vista Home!

    Mein Programm schaut bisher so aus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <date.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    If _Singleton(@ScriptName, 1) = 0 Then
    MsgBox(16, "Warning", "An occurence is already running", 10)
    Exit
    EndIf

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

    Global $logdatei, $standardpath, $sDestPath, $log

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

    $standardpath = @DesktopDir & "\Kopierte Dateien" ;Standardordner

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

    Opt("GUIOnEventMode", 1)
    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 1)
    TraySetState()
    TraySetClick(16)

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

    $gui = GUICreate("Kopiermaschine", 400, 150, 200, 200, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $DS_SETFOREGROUND), $WS_EX_TOPMOST)
    $input = GUICtrlCreateInput($standardpath, 60, 20, 270, 20, BitOR($ES_NOHIDESEL, $ES_OEMCONVERT))
    $button1 = GUICtrlCreateButton("...", 350, 20, 30, 20)
    GUISetFont(12, 10)
    $label = GUICtrlCreateLabel("Ziel: ", 10, 20)
    GUISetFont(0)
    ;~ $radio_kopieren = GUICtrlCreateCheckbox("Kopieren", 150, 60)
    GUISetFont(12, 10)
    $b_taste = GUICtrlCreateButton("Tasten", 60, 100, 125)
    $b_beenden = GUICtrlCreateButton("Beenden", 205, 100, 125)
    $b_starten = GUICtrlCreateButton("Starten", 60, 60, 270)
    GUISetFont(0)

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

    GUISetState(@SW_SHOW, $gui)

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

    $TrayItem2 = TrayCreateItem("Zeigen")
    TrayItemSetOnEvent($TrayItem2, "_zeigen")
    $TrayItem1 = TrayCreateItem("Exit")
    TrayItemSetOnEvent($TrayItem1, "_end")

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

    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_klein")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_end")
    GUICtrlSetOnEvent($b_beenden, "_end")
    GUICtrlSetOnEvent($button1, "_explorer")
    GUICtrlSetOnEvent($b_starten, "_starten")
    GUICtrlSetOnEvent($b_taste, "_tasten")

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

    While True
    Sleep(20)
    WEnd

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

    Func _tasten()
    MsgBox(0, "Hot keys", '[ALT] & [code=c] = Kopieren' & @CRLF & '[ALT] & [q] = Beenden')
    EndFunc ;==>_tasten

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

    Func _explorer()
    $var = FileSelectFolder("Choose a folder.", "")
    GUICtrlSetData($input, $var)
    EndFunc ;==>_explorer

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

    Func _starten()

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

    $read = GUICtrlRead($input)
    If Not FileExists($read) Then
    $temp = MsgBox(4100, "Fehler", "Verzeichnis existiert nicht, soll das Verzeichnis erstellt werden? ")
    If $temp = 6 Then
    If Not DirCreate($read) Then
    MsgBox(0, "Fehler", "Verzeichnis kann nicht erstellt werden")
    EndIf
    $sDestPath = $read
    $log = $read & "\log.txt"
    $logdatei = FileOpen($log, 9)

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

    MsgBox(0, "Erfolgreich", "Programm wurde gestartet")
    Else
    MsgBox(0, "Abbruch", "Programm wurde nicht gestartet")
    EndIf
    Else
    $sDestPath = $read
    $log = $sDestPath & "\log.txt"
    $logdatei = FileOpen($log, 9)
    MsgBox(0, "Erfolgreich", "Programm wurde gestartet")
    EndIf

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

    HotKeySet('!c', '_CopySelectedFiles') ; Hotkey: [ALT] & [code=c]
    HotKeySet('!q', '_End') ; Hotkey: [ALT] & [q]

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

    EndFunc ;==>_starten

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

    Func _CopySelectedFiles()
    Local $sSelItems, $aItems, $aFiles, $sPath
    If WinExists('[CLASS:CabinetWClass]') Then
    $sSelItems = ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetSelected', 1)
    If $sSelItems <> '' Then
    $sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $aItems = StringSplit($sSelItems, '|')
    Dim $aFiles[$aItems[0] + 1] = [$aItems[0]]
    For $i = 1 To $aItems[0]
    $aFiles[$i] = $sPath & ControlListView('[CLASS:CabinetWClass]', '', '[CLASS:SysListView32; INSTANCE:1]', 'GetText', $aItems[$i])
    Next
    For $i = 1 To $aFiles[0]
    FileCopy($aFiles[$i], $sDestPath, 8 + 0) ; <- wenn statt der 0 eine 1 steht, dann evtl. bestehende Datei überschreiben
    $datum = _DateTimeFormat(_NowCalc(), 0) ;LOgDATEI
    MsgBox(0, "Aktuelle Datei", $aFiles[$i])
    FileWrite($logdatei, $datum & " " & $aFiles[$i] & @CRLF) ;LOgDATEI
    Next
    EndIf
    EndIf
    EndFunc ;==>_CopySelectedFiles

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _klein()
    GUISetState(@SW_HIDE)
    EndFunc ;==>_klein

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

    Func _zeigen()
    GUISetState(@SW_SHOW, $gui)
    EndFunc ;==>_zeigen

    [/autoit]

    Verbesserungsvorschläge?
    und wie könnte das mit den Dateien Funktionieren?

    Einmal editiert, zuletzt von Madmaxx89 (27. Juni 2009 um 23:46)

  • Au3Info:

    >>>> Window <<<<
    Title: Koda
    Class: CabinetWClass
    Position: 332, 23
    Size: 800, 600
    Style: 0x14CF0000
    ExStyle: 0x00000100
    Handle: 0x00300704

    >>>> Control <<<<
    Class: SysListView32
    Instance: 1
    ClassnameNN: SysListView321
    Advanced (Class): [CLASS:SysListView32; INSTANCE:1]
    ID: 1
    Text: FolderView
    Position: 274, 66
    Size: 510, 428
    ControlClick Coords: 49, 131
    Style: 0x56101348
    ExStyle: 0x00000000
    Handle: 0x004405E2

    >>>> Mouse <<<<
    Position: 663, 248
    Cursor ID: 0
    Color: 0x84CBEF

    >>>> StatusBar <<<<
    1:
    2:
    3: Computer

    >>>> Visible Text <<<<
    Navigationsleiste
    Adresse: C:\Users\madmax\Documents\Koda
    Koda


    mhm..

  • mhm..

    hat jemand ne idee??

    oder könnte vll jemand anders mit Vista das mal Testen nicht das es nur bei mir so is.. :P


    Danke..