markierung im windows explorer kopieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Unwesen.

    markierung im windows explorer kopieren

    hallo,

    also wie ich tastendruck simuliere und den ganzen schnickschnack weiß ich.
    ich habe einen ordner mit ca. 4000 bildern drinne.
    da ist es relativ aufwenidg, wenn ich für jedes bild, welches ich gerne behalten möchte, immer strg+v dann im nächsten ordner strg+c drücken muss.

    mein code bis zu der stelle lautet

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.F3) Then
    2. My.Computer.Keyboard.Sendkeys("^C")
    3. End If


    ich bin nur grade relativ inspirationlos, wie ich ihm sagen kann, dass er auf druck von "F3" die markierte datei in einem bestimmten ordner kopieren soll.

    Danke für jede hilfe
    ok nach zusammengoogeln der einzelnen notwendigen anweisungen hab ich hier mal ein unaufgeräumtes, aber funktionierendes programm geschrieben.

    die form selbst besteht nur aus einer textbox und einem label in welchem steht "bei Tastendruck auf F4 wird die markierte datei im angegebenen Zielordner Kopiert"

    dabei simuliere ich auf die markierte datei die tastenkombination STRG+C anschließen greife ich auf die zwischenablage zu und lese sämtlich vorhandene dateipfade aus, welche in der zwischenablage sind.

    diese werden in einer list(of string) gespeichert und in meinem beispiel wird nur der erste listeneintrag kopiert.

    hier alle API´s

    VB.NET-Quellcode

    1. Private Declare Function IsClipboardFormatAvailable Lib "user32" ( _
    2. ByVal wFormat As Integer) As Integer
    3. Private Declare Function OpenClipboard Lib "user32" ( _
    4. ByVal hwnd As Integer) As Integer
    5. Private Declare Function GetClipboardData Lib "user32" ( _
    6. ByVal wFormat As Integer) As Integer
    7. Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal HDROP As Integer, ByVal UINT As Integer, ByVal lpStr As String, ByVal ch As Integer) As Integer
    8. Private Declare Function CloseClipboard Lib "user32" () As Integer


    hier die eigentliche auslesung der dateipfade

    VB.NET-Quellcode

    1. Public Function GetClipboardFiles(ByRef Files As List(Of String)) As Integer
    2. Dim nHandle As Integer
    3. Dim nCount As Integer
    4. Dim nLen As Integer
    5. Dim sFile As String
    6. Dim i As Integer
    7. Dim index1 As Integer
    8. ' Prüfen, ob Dateien in der Zwischenablage vorhanden
    9. If IsClipboardFormatAvailable(CF_HDROP) > 0 Then
    10. ' Zwischenablage öffnen
    11. If OpenClipboard(0) <> 0 Then
    12. ' Handle holen
    13. nHandle = GetClipboardData(CF_HDROP)
    14. If nHandle <> 0 Then
    15. ' jetzt alle Dateinamen ermitteln
    16. nCount = DragQueryFile(nHandle, -1, vbNullString, 0)
    17. For i = 0 To nCount - 1
    18. nLen = DragQueryFile(nHandle, i, vbNullString, 0)
    19. index1 = 0
    20. sFile = "T"
    21. Do While index1 < nLen 'der string sfile wird nur ersetzt -> die länge bleibt erhalten. deswegen die länge von sfile mit der länge des pfades,der zu kopierenden datei, anpassen
    22. sFile = sFile + "T"
    23. index1 = index1 + 1
    24. Loop
    25. nLen = DragQueryFile(nHandle, i, sFile, Len(sFile))
    26. sFile = Mid(sFile, 1, Len(sFile) - 1) 'ein zeichen abziehen um das letzte leerzeichen zu löschen
    27. 'fragt mich nicht, warum er hinten immer ein leerzeichen hängt
    28. Files.Add(sFile)
    29. Next i
    30. End If
    31. ' Zwischenablage schließen
    32. CloseClipboard()
    33. End If
    34. End If
    35. GetClipboardFiles = nCount
    36. End Function


    das kopieren selbst sieht dann so aus:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. If GetAsyncKeyState(Keys.F4) Then
    3. SendKeys.SendWait("^c")
    4. list1.Clear()
    5. nCount = GetClipboardFiles(list1)
    6. index = 0
    7. Dim strindex As Integer
    8. Try
    9. strindex = InStrRev(list1(0), "\")
    10. Catch ex As Exception
    11. MsgBox("Sie haben keine Datei ausgewählt!")
    12. Exit Sub
    13. End Try
    14. Try
    15. File.Copy(list1(0), TextBox2.Text + Mid(list1(0), strindex))
    16. Catch ex As Exception
    17. MsgBox("Die Datei existiert bereits im Zielordner")
    18. Exit Sub
    19. End Try
    20. End If
    21. End Sub


    @SystemUnknown:
    deine version ist sicherlich wesentlich einfacher für den programmierer.
    aber die problemstellung war ja folgende: ich habe einen ordner mit 4000 bildern, diese lasse ich ihn Ansicht->Filmstreifen durchlaufen und wenn es ein bild gibt, welches ich behalten möchte, drücke ich "F4" und das aktuell markierte bild wird dann in mein zielordner kopiert oder wenn ich möchte auch verschoben. somit habe ich aus meinen 4000 bildern nurnoch meine ausgewählten bilder in einem anderen ordner und den ordner mit 4000bildern kann ich löschen.

    aber trotzdem danke für den link, er ist wirklich gut und ich habs mir angeschaut, den kann ich schon für mein nächstes prog verwenden ;P