Anwendung zum Standardprogramm für Dateitypen Öffnen StartupNextInstance

  • .NET (FX) 4.5–4.8
  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Anwendung zum Standardprogramm für Dateitypen Öffnen StartupNextInstance

    Hallo
    ich komme aktuelle nicht weiter. Und zwar ich mochte wen meine Anwendung in Einzelinstanz Offen ist die Datei auch Offenen können. Ich habe bereits Code geschrieben. Beim Öffnen der Anwendung Klappt es Ohne Probleme aber nicht bei der Einzelinstanz.

    Vielen Dank im Voraus

    VB.NET-Quellcode

    1. Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
    2. For Each d As String In My.Application.CommandLineArgs
    3. Dim FileName As New IO.FileInfo(d)
    4. If FileName.Exists = True Then
    5. Form1.OpenANewFile = d
    6. Form1.OpenANewFilesAndPlay()
    7. End If
    8. Next
    9. End Sub
    10. Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    11. For Each d As String In My.Application.CommandLineArgs
    12. Dim FileName As New IO.FileInfo(d)
    13. If FileName.Exists = True Then
    14. Form1.OpenANewFile = d
    15. Form1.OpenANewFilesAndPlay()
    16. End If
    17. Next
    18. End Sub


    *Topic verschoben*

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

    @Marvinware Startup nimmst Du nicht, nur StartupNextInstance.
    Den Start machst Du in Form1_Load().
    Ich nehme mal an, dass Form1 der Name der Klasse, nicht aber der Name der Instanz ist (siehe Dialoge: Instanziierung von Forms und Aufruf von Dialogen)
    Probier dies:

    VB.NET-Quellcode

    1. Partial Friend Class MyApplication
    2. Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    3. MessageBox.Show("StartupNextInstance")
    4. Dim frm = CType(Me.MainForm, Form1)
    5. Dim ll As New List(Of String)
    6. ll.AddRange(e.CommandLine)
    7. frm.OpenANewFilesAndPlay(ll)
    8. End Sub
    9. End Class

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim args = Environment.GetCommandLineArgs.Count
    4. MessageBox.Show(args.ToString, "Load")
    5. End Sub
    6. Friend Sub OpenANewFilesAndPlay(ll As List(Of String))
    7. MessageBox.Show(ll.Count.ToString)
    8. End Sub
    9. End Class
    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!
    Danke für die Antworten. Das Problem ist das die Software schon Fertig ist und sie neu in C# zu Programmieren zu aufwendig ist. Das Problem ist eben er soll ja keine weiteren Fenster beim Starten Öffnen was er ja auch Tuht. Er kann einfach nicht die geöffnete Datei Bei der Offenen Instanz Ergreifen. Wen zb eine MP3 Datei mit der Software Öffnen Klappt es ja. Und wen die Software auch Offen ist er Ergreift er die Datei beim Starten auch wen ich ne andere Ausführe. Das ding ist eben URL Protokolle und andere Ausführungen klappen ja nur die ergreifen der neuen MP3 Datei wen die Software an ist klappt nicht.

    VB.NET-Quellcode

    1. Namespace My
    2. ' Für MyApplication sind folgende Ereignisse verfügbar:
    3. '
    4. ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
    5. ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal beendet wird.
    6. ' UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
    7. ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist.
    8. ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
    9. Partial Friend Class MyApplication
    10. Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
    11. Try
    12. For Each d As String In My.Application.CommandLineArgs
    13. Try
    14. Dim FileName As New IO.FileInfo(d)
    15. If FileName.Exists = True Then
    16. Form1.OpenANewFileNotLoadPlaylist = 1
    17. Form1.OpenANewFile = d
    18. Form1.OpenANewFilesAndPlay()
    19. End If
    20. Catch ex As Exception
    21. End Try
    22. Next
    23. Dim IfNoCD As Integer = 0
    24. For Each PlayAudioCDCMD As String In e.CommandLine
    25. If PlayAudioCDCMD = "--started-from-audio-cd" Then
    26. If IfNoCD = 0 Then
    27. SideWindow.MyCDIsOpen = 1
    28. LoadeCDNofication()
    29. SideWindow.CDPlayNofiactionTimer.Enabled = True
    30. End If
    31. SideWindow.CDPlayerButtonsEnlabledTrue()
    32. End If
    33. Next
    34. For Each URLProtokoll As String In e.CommandLine
    35. Dim ProtokollName As String = "mw-djmaster:"
    36. Select Case URLProtokoll
    37. Case ProtokollName
    38. Case ProtokollName & "PlayDock1"
    39. Form1.Play1Start()
    40. Case ProtokollName & "PlayDock2"
    41. Form1.Play2Start()
    42. Case ProtokollName & "PauseDock1"
    43. Form1.PauseDock1()
    44. Case ProtokollName & "PauseDock2"
    45. Form1.PauseDock2()
    46. Case ProtokollName & "StopDock1"
    47. Form1.StopDock1()
    48. Case ProtokollName & "StopDock2"
    49. Form1.StopDock2()
    50. Case ProtokollName & "BackDock1"
    51. Form1.ZuruckEvant1()
    52. Case ProtokollName & "BackDock2"
    53. Form1.ZuruckEvant2()
    54. Case ProtokollName & "ForwadDock1"
    55. Form1.WeiterEvant1()
    56. Case ProtokollName & "ForwadDock2"
    57. Form1.WeiterEvant2()
    58. End Select
    59. Next
    60. Catch ex As Exception
    61. End Try
    62. End Sub
    63. Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    64. Try
    65. For Each d As String In My.Application.CommandLineArgs
    66. Try
    67. Dim FileName As New IO.FileInfo(d)
    68. If FileName.Exists = True Then
    69. Form1.OpenANewFile = d
    70. Form1.OpenANewFilesAndPlay()
    71. End If
    72. Catch ex As Exception
    73. End Try
    74. Next
    75. For Each PlayAudioCDCMD As String In e.CommandLine
    76. If PlayAudioCDCMD = "--started-from-audio-cd" Then
    77. SideWindow.LoadeCDFromAutostart()
    78. End If
    79. Next
    80. For Each URLProtokoll As String In e.CommandLine
    81. Dim ProtokollName As String = "mw-djmaster:"
    82. Select Case URLProtokoll
    83. Case ProtokollName
    84. Case ProtokollName & "PlayDock1"
    85. Form1.Play1Start()
    86. Case ProtokollName & "PlayDock2"
    87. Form1.Play2Start()
    88. Case ProtokollName & "PauseDock1"
    89. Form1.PauseDock1()
    90. Case ProtokollName & "PauseDock2"
    91. Form1.PauseDock2()
    92. Case ProtokollName & "StopDock1"
    93. Form1.StopDock1()
    94. Case ProtokollName & "StopDock2"
    95. Form1.StopDock2()
    96. Case ProtokollName & "BackDock1"
    97. Form1.ZuruckEvant1()
    98. Case ProtokollName & "BackDock2"
    99. Form1.ZuruckEvant2()
    100. Case ProtokollName & "ForwadDock1"
    101. Form1.WeiterEvant1()
    102. Case ProtokollName & "ForwadDock2"
    103. Form1.WeiterEvant2()
    104. End Select
    105. Next
    106. Catch ex As Exception
    107. End Try
    108. End Sub
    109. Private Sub LoadeCDNofication()
    110. Try
    111. NotifWindow.MyDocksInfo = 9
    112. If Form1.IfNotflyWindowDisable = False Then
    113. NotifWindow.Show()
    114. End If
    115. NotifWindow.MyTimeTimeStart()
    116. Catch ex As Exception
    117. End Try
    118. End Sub
    119. End Class
    120. End Namespace



    VB.NET-Quellcode

    1. Public Sub OpenANewFilesAndPlay()
    2. Try
    3. Dim extension As String = Path.GetExtension(OpenANewFile).ToLower
    4. Select Case extension
    5. Case ".vdpf"
    6. Case Else
    7. ListView1.Items.Clear()
    8. MP3New = TagLib.File.Create(OpenANewFile)
    9. Dim Eintrag = ListView1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(OpenANewFile))
    10. Eintrag.ImageIndex = ImageList1.Images.Count = 0
    11. Eintrag.SubItems.Add(MP3New.Tag.Track)
    12. Eintrag.SubItems.Add(OpenANewFile)
    13. ListView1.Items(0).Selected = True
    14. ListView1.Focus()
    15. Play1Start()
    16. End Select
    17. Catch ex As Exception
    18. End Try
    19. End Sub

    Marvinware schrieb:

    Das Problem ist das die Software schon Fertig ist und sie neu in C# zu Programmieren zu aufwendig ist.


    Eine Aufforderung mal zu versuchen so statisch auf ein Form in C# zuzugreifen, ist keine Aufforderung die App in C# neu zu schreiben. Hättest du es nur mal in einem Test-Projekt probiert, wäre das wie es sich eigentlich gehört mit einer Fehlermeldung quittiert worden. So macht man das einfach nicht.

    Aber ich weiß wo de Hund begraben liegt. Die Sache ist du startest die Anwendung via Studio, dann wird zwar StartUpNextINstance geworfen(beim 2. Start), aber der Dateiname mit dem du evtl. die Anwendung erneut "startest", ist dann nicht in den Args.

    Start mal die App(aus dem Debug/Release Ordner) von Hand anstatt im Studio, dann sollte auch beim "2.start" alles in den Args sein, was du brauchst.

    Das hier musst du dir mal anschauen, denn könntest du richtig debuggen, wäre dir sofort aufgefallen, das die Dateinamen nicht in den Args sind.
    https://www.vb-paradise.de/index.php/Thread/88276-Debuggen-Fehler-finden-und-beseitigen/

    PS. @Marvinware
    Sorry, jetzt hatte ich was falsch gemacht, ich hatte immer eine Datei auf die EXE gezogen, beim 1. und 2. Start. Weil ich dich in die Irre führte, was nicht meine Absicht war, nehme ich das Verhalten mit den "Starts" genau unter die Lupe, werde heute Nachmittag dann berichten. Den Thread mit dem Debuggen, solltest du dir in dieser Zeit anschauen, denn dann wäre es auf jeden aufgefallen das beim 2. Start die Args Identisch sind mit denen vom ersten.

    PPS @Marvinware
    Hab's nach einer Minute schon gefunden. Ich hab geschaut, was kommen für Typen(Typ der Argumente) mit der Funktion rein. Beim StartUpNext Instance ist das 2. ein StartupNextInstanceEventArgs, dann ein Blick in die Doku hat mir verraten, das dieser Typ eine Eigenschaft mit dem Namen CommandLine hat.

    learn.microsoft.com/de-de/dotn…s?view=windowsdesktop-6.0

    Das hier ist also die Lösung:

    VB.NET-Quellcode

    1. Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    2. For Each d As String In e.CommandLine
    3. Next
    4. End Sub



    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „BitBrösel“ ()

    Marvinware schrieb:

    VB.NET-Quellcode

    1. Form1.OpenANewFileNotLoadPlaylist = 1
    Was ganz genau ist Form1, Siehe Post #2?
    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!