Fremdprogramm starten über "Öffnen mit"

  • VB.NET

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

    Fremdprogramm starten über "Öffnen mit"

    Hallo,
    ich möchte eine jpg Datei bearbeiten und mit "Öffnen mit" das Programm auswählen können.
    Bisher kann ich aber nur das Default Programm starten.

    VB.NET-Quellcode

    1. Dim myProcess As New Process
    2. myProcess.StartInfo.FileName = PfadBilder & GroupBoxBild.Text
    3. myProcess.StartInfo.UseShellExecute = True
    4. myProcess.StartInfo.RedirectStandardOutput = False
    5. myProcess.Start()
    6. myProcess.Dispose()


    hat jemand eine tipp für mich?

    Helmut

    *VB.NET-BBCode eingefügt*
    Bilder
    • Screenshot 2024-11-10 134334.jpg

      78,33 kB, 758×540, 28 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich vermute, du musst das gewünschte Programm angeben, sowas wie myProcess.StartInfo.FileName = "C:\Programme\Adobe\Photoshop\Photoshop.exe " & PfadBilder & GroupBoxBild.Text. Steht das Programm im PATH des Systems, so reicht auch Photoshop.exe ohne Pfad bzw. natürlich auch einfach Photoshop.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi

    Das erste was mir da in den Sinn kommt ist die API SHOpenWithDialog -> learn.microsoft.com/en-us/wind…obj_core-shopenwithdialog

    Als Alternative, und erst ab Win10, gäbe es auch eine Möglichkeit per WinRT Launcher Klasse.
    Mfg -Franky-
    @Kalimba Willkommen im Forum. :thumbup:
    Was hast Du vor?
    Soll Dein Programm im Explorer-Contextmenü erscheinen?
    Wenn ja: Löse das Problem manuell, indem Du Dein Programm über "Andere App auswählen" auswählst und diese als Standard auswählst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich will eine .JPG Datei bearbeiten und möchte das externe Programm (Paint, Paint3D,Paint.net, ..) auswählen.

    ich habe eine Lösung gefunden:
    Dim myProcess As New Process
    myProcess.Start("rundll32", "shell32.dll,OpenAs_RunDLL " & filePath)
    myProcess.Dispose()

    Danke für die Unterstützung,
    Helmut
    Hi. Es ist relativ egal welchen Weg Du gehst. Viele Wege führen zum Ziel. Am Ende wird immer der gleiche Dialog aufgerufen. Den kann man entsprechend auch direkt, ohne Umwege, aufrufen. ;) Letzteres hat auch den Vorteil das man den Dialog per Flags ein wenig anpassen und steuern kann.
    Mfg -Franky-
    @Kalimba Zieh Dir Deine Programme per Shortcut auf den Desktop und ziehe danach Deine PNG auf das entsprechende Shortcut.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Warum so kompliziert wenn es auch Einfach geht? Ich möchte meinen Desktop nicht mit zig Anwendungen zupflastern die ich zum Bearbeiten verschiedenster Dateien benötigen könnte. Einfach die in Windows vorhandene API bzw. den vorhandenen Dialog dafür nutzen. ;) Fertig.

    @Kalimba Auf die schnelle. Keine zusätzlichen Referenzen, keine zusätzlichen Nuget-Pakete, direkt und keine Umwege über nicht dokumentierten Code.
    Eine Klasse OpenWithDialog (kann man natürlich seinen Wünschen anpassen und verbessern)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class OpenWithDialog
    3. Private Const S_OK As Integer = 0
    4. ' Starting in Windows 10, the OAIF_ALLOW_REGISTRATION, OAIF_FORCE_REGISTRATION and OAIF_HIDE_REGISTRATION flags will be ignored.
    5. Public Enum OPEN_AS_INFO_FLAGS As UInteger
    6. OAIF_ALLOW_REGISTRATION = 1
    7. OAIF_REGISTER_EXT = 2
    8. OAIF_EXEC = 4
    9. OAIF_FORCE_REGISTRATION = 8
    10. OAIF_HIDE_REGISTRATION = 32
    11. OAIF_URL_PROTOCOL = 64
    12. OAIF_FILE_IS_URI = 128
    13. End Enum
    14. Private Structure OPENASINFO
    15. <MarshalAs(UnmanagedType.LPWStr)> Dim pcszFile As String
    16. <MarshalAs(UnmanagedType.LPWStr)> Dim pcszClass As String
    17. Dim oaifInFlags As OPEN_AS_INFO_FLAGS
    18. Sub New(szFile As String,
    19. szClass As String,
    20. inFlags As OPEN_AS_INFO_FLAGS)
    21. pcszFile = szFile
    22. pcszClass = szClass
    23. oaifInFlags = inFlags
    24. End Sub
    25. End Structure
    26. <DllImport("Shell32.dll", EntryPoint:="SHOpenWithDialog")>
    27. <PreserveSig> Private Shared Function SHOpenWithDialog(<[In]> hwndParent As IntPtr,
    28. <[In]> ByRef poainfo As OPENASINFO) As Integer
    29. End Function
    30. Public Function ShowDialog(FileName As String) As Boolean
    31. Return OpenWithDialog(FileName, Nothing, OPEN_AS_INFO_FLAGS.OAIF_EXEC, Nothing)
    32. End Function
    33. Public Function ShowDialog(FileName As String,
    34. ClassName As String) As Boolean
    35. Return OpenWithDialog(FileName, ClassName, OPEN_AS_INFO_FLAGS.OAIF_EXEC, Nothing)
    36. End Function
    37. Public Function ShowDialog(FileName As String,
    38. ClassName As String,
    39. Flags As OPEN_AS_INFO_FLAGS) As Boolean
    40. Return OpenWithDialog(FileName, ClassName, Flags, Nothing)
    41. End Function
    42. Public Function ShowDialog(FileName As String,
    43. Parent As IWin32Window) As Boolean
    44. Return OpenWithDialog(FileName, Nothing, OPEN_AS_INFO_FLAGS.OAIF_EXEC, Parent)
    45. End Function
    46. Public Function ShowDialog(FileName As String,
    47. ClassName As String,
    48. Parent As IWin32Window) As Boolean
    49. Return OpenWithDialog(FileName, ClassName, OPEN_AS_INFO_FLAGS.OAIF_EXEC, Parent)
    50. End Function
    51. Public Function ShowDialog(FileName As String,
    52. ClassName As String,
    53. Flags As OPEN_AS_INFO_FLAGS,
    54. Parent As IWin32Window) As Boolean
    55. Return OpenWithDialog(FileName, ClassName, Flags, Parent)
    56. End Function
    57. Private Function OpenWithDialog(szFile As String,
    58. szClass As String,
    59. eFlags As OPEN_AS_INFO_FLAGS,
    60. winParent As IWin32Window) As Boolean
    61. Dim Ret As Boolean
    62. Dim hParent As IntPtr = Nothing
    63. Dim OpenInfo = New OPENASINFO(szFile, szClass, eFlags)
    64. If winParent IsNot Nothing Then hParent = winParent.Handle
    65. If SHOpenWithDialog(hParent, OpenInfo) = S_OK Then Ret = True
    66. Return Ret
    67. End Function
    68. End Class


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim OWD As New OpenWithDialog
    4. OWD.ShowDialog("D:\DeinBild.jpg")
    5. End Sub
    6. End Class
    Mfg -Franky-