Hallo zusammen
Für meine Digitalkamera habe ich ein kleines Programm, welches mir die neuen Bilder von der Kamera auf den PC kopiert. Dabei werden die Rohdateibilder in einen anderen Ordner kopiert als die JPG Dateien. Die guten Bilder markiere ich und kann diese dann in einen anderen Ordner verschieben, auch die Rohdateibilder.
Nun habe ich aber eine Kamera für meine Tochter gekauft, welche als Portables Gerät angezeigt wird. Ich habe nun etwas geforscht, bin z.B. auf diesen Artikel gelangt: Cell Phone als USB device
Nun habe ich mit Shell.BrowseForFolder relativ einfach gegen den Rat von Franky Zugriff auf die Kamera. Der Grund ist, ich habe überhaupt keine Grundlagen für Zugriffe auf API.
Mein Problem. Wie kann ich den ausgewählten Pfad speichern, dass ich nicht jedes mal den Browser starten muss? Mit der Funktion Ordnerpfad_ermittlen() kann ich den Pfad auslesen, mit diesem Pfad kann ich aber kein Folder erzeugen. Mit den Normalen Pfade (z.B. "C:\Temp\) kann ich problemlos ein Folder erstellen.
Besten Dank für Eure Tipps
Aufruf:
Spoiler anzeigen
Modul:
Spoiler anzeigen
Für meine Digitalkamera habe ich ein kleines Programm, welches mir die neuen Bilder von der Kamera auf den PC kopiert. Dabei werden die Rohdateibilder in einen anderen Ordner kopiert als die JPG Dateien. Die guten Bilder markiere ich und kann diese dann in einen anderen Ordner verschieben, auch die Rohdateibilder.
Nun habe ich aber eine Kamera für meine Tochter gekauft, welche als Portables Gerät angezeigt wird. Ich habe nun etwas geforscht, bin z.B. auf diesen Artikel gelangt: Cell Phone als USB device
Nun habe ich mit Shell.BrowseForFolder relativ einfach gegen den Rat von Franky Zugriff auf die Kamera. Der Grund ist, ich habe überhaupt keine Grundlagen für Zugriffe auf API.
Mein Problem. Wie kann ich den ausgewählten Pfad speichern, dass ich nicht jedes mal den Browser starten muss? Mit der Funktion Ordnerpfad_ermittlen() kann ich den Pfad auslesen, mit diesem Pfad kann ich aber kein Folder erzeugen. Mit den Normalen Pfade (z.B. "C:\Temp\) kann ich problemlos ein Folder erstellen.
Besten Dank für Eure Tipps
Aufruf:
VB.NET-Quellcode
- Private Sub BT_ordnerpfad_Click(sender As Object, e As EventArgs) Handles BT_ordnerpfad.Click
- TB_ordnerpfad.Text = MTP_Kopieren.Ordnerpfad_ermittlen()
- End Sub
- Private Sub BT_Kopieren_Click(sender As Object, e As EventArgs) Handles BT_Kopieren.Click
- Call MTP_Kopieren.Dateien_Kopieren(TB_ordnerpfad.Text, "c:\temp\mi8", "c:\temp\mi8\arw", ".arw", "c:\temp\guteBilder")
- End Sub
Modul:
VB.NET-Quellcode
- 'https://www.vb-paradise.de/index.php/Thread/133529-Cell-Phone-als-USB-device/
- Imports System.IO
- Imports Shell32
- Module MTP_Kopieren
- Public Function Ordnerpfad_ermittlen() As String
- 'für Import von Kamera oder auch Natel:
- ' + Reference to the COM Component "Microsoft Shell Controls and Automation"
- ' + Include Shell32 Namespace
- '"Microsoft Shell Controls and Automation" causes error BC31541 (Interop type cannot be added).
- 'To avoid this error, click this reference and set:
- ' Accept Interop Types=False
- Dim shell = New Shell()
- Dim Hwnd As Integer
- Dim FromFolder = shell.BrowseForFolder(Hwnd, "Choose folder", 0, 17)
- If FromFolder Is Nothing Then
- MsgBox("*** OK, cancelled.")
- Return ""
- End If
- 'This is how to get the real path form the folder object, which is a cryptic expression:
- 'Dim fi As FolderItem = (TryCast(FromFolder, Folder3)).Self
- 'Dim path = fi.Path 'Just for your info
- 'Note: FromFolder is a COM-Object, so it cannot be used like a .NET directory
- 'Copy all files from cell phone to PC directory
- Dim folder = DirectCast(FromFolder, Folder3)
- Ordnerpfad_ermittlen = folder.Self.Path.ToString
- End Function
- Sub Dateien_Kopieren(Quellordner As String, Zielordner As String, ZielordnerRAW As String, Rohdateiendung As String, GutebilderOrdner As String)
- Dim shell = New Shell()
- Dim Hwnd As Integer
- 'Dim quellordnerShell As Folder3 = DirectCast(shell.NameSpace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_2717&pid_ff40#3803ec03#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{10001,,56481779712}\{E903B08B-FFFF-FFFF-0000-000000000000}\{54CDAA72-0000-0000-0000-000000000000}"), Folder3)
- Dim quellordnerShell As Folder3 = DirectCast(shell.NameSpace(Quellordner), Folder3)
- Dim ZielordnerShell As Folder3 = DirectCast(shell.NameSpace(Zielordner), Folder3)
- Dim ZielordnerRAWshell As Folder3 = DirectCast(shell.NameSpace(ZielordnerRAW), Folder3)
- If quellordnerShell Is Nothing Then
- quellordnerShell = shell.BrowseForFolder(Hwnd, "Choose folder", 0, 17)
- End If
- 'Dim folder = DirectCast(srcFolder, Folder3)
- For Each item In quellordnerShell.Items
- If TypeOf item Is Folder3 Then
- Dim subFolder = DirectCast(item, Folder3)
- ElseIf TypeOf item Is FolderItem2 Then
- Dim fileItem = DirectCast(item, FolderItem2)
- If File.Exists(IO.Path.Combine(Zielordner, fileItem.Name.ToString)) Or
- File.Exists(IO.Path.Combine(ZielordnerRAW, fileItem.Name.ToString)) Or
- File.Exists(IO.Path.Combine(GutebilderOrdner, fileItem.Name.ToString)) Or
- File.Exists(IO.Path.Combine(GutebilderOrdner, "raw", fileItem.Name.ToString)) Then
- Else
- If fileItem.Name.Substring(fileItem.Name.Length - Rohdateiendung.Length).ToLower = Rohdateiendung.ToString.ToLower Then
- ZielordnerRAWshell.CopyHere(fileItem)
- Debug.Print("Rohdatei: " & fileItem.Name.ToString)
- ' Kopieren der Datei
- Else
- 'für z.B. Filme
- ZielordnerShell.CopyHere(fileItem)
- Debug.Print("JPG: " & fileItem.Name.ToString)
- End If
- End If
- End If
- Next
- End Sub
- End Module