Name der Startdatei

  • VB.NET
  • .NET 5–6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Koala2000.

    Name der Startdatei

    Hallo.

    Ich habe ein kleines Tool welches xml Dateien als .xmk Dateien speichert.
    Die Dateiendung .xmk habe ich bewusst gewählt damit die Dateien nicht mit bekannten xml Programmen geöffnet werden sondern mit meinem eigenem Tool.
    Im Windows habe ich die Endung registriert.

    Wenn ich jetzt auf eine xmk Datei klicke wird das Tool geöffnet, soweit funktioniert alles.

    Es soll aber nicht immer mit einer leeren Datei gestartet werden, sondern der Inhalt der xmk Datei soll mit geladen werden.
    Auf dem Desktop speichere ich z.B. eine Datei mit dem Namen "ErsteDatei.xmk"

    Wie kann ich den Namen der Datei abfragen, auf die geklickt wurde?

    Ich habe schon einige Befehle probiert die aber nicht das richtige Ergebnis bringen.

    VB.NET-Quellcode

    1. MsgBox(Application.UserAppDataPath)
    2. MsgBox(Application.StartupPath)
    3. MsgBox(Application.ExecutablePath)


    Diese Abfragen geben immer im Ergebnis: c:\Programme\... .exe

    Gruß, Koala

    CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Noch eine kleine Erweiterung.

    Wenn ich das Programm über eine Datei öffne wird das Tool mit der richtigen Datei geöffnet. Klicke ich nun auf eine weitere Datei wird das Tool erneut mit dem Inhalt der zweiten Datei geöffnet.
    Es soll sich aber kein weiteres Fenster öffnen, sondern die Form soll sich aktualisieren.

    Bisher:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. 'wenn Start direkt über Click auf eine Datei aufgerufen wurde
    3. Dim Args() As String
    4. Dim DirektStartDateiname As String = ""
    5. Args = Environment.GetCommandLineArgs
    6. For i = 0 To UBound(Args)
    7. If Strings.Right(Args(i), 4) = ".xmK" Then DirektStartDateiname = Args(i)
    8. Next
    9. If DirektStartDateiname <> "" Then Read_xmk(DirektStartDateiname)
    10. End Sub


    Wenn ich eine Einzelanwendung daraus mache kann ich kein zweites mal starten.
    Gibt es ein Event das reagiert wenn die Form erneut aufgerufen wird? bzw. bevor die Form erneut aufgerufen wird...

    Gruß Koala

    CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    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!
    Das sieht schon sehr viel versprechend aus.

    Aber wie genau erstelle ich das Anwenderereignis?
    Folgenden Code habe ich bereits vorgefunden:

    VB.NET-Quellcode

    1. Namespace My
    2. ' Für MyApplication sind folgende Ereignisse verfügbar:
    3. ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
    4. ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung mit einem Fehler beendet wird.
    5. ' UnhandledException: Wird bei einem Ausnahmefehler ausgelöst.
    6. ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn die Anwendung bereits aktiv ist.
    7. ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
    8. Partial Friend Class MyApplication
    9. End Class
    10. End Namespace


    CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Koala2000 schrieb:

    Aber wie genau erstelle ich das Anwenderereignis?
    Du wählst in der Mitte {MyApplication Ereignisse} aus und dann rechts StartupNextInstance, dann erstellt Dir der Designer den Rumpf.
    Du hättest ihn auch aus meinem Snippet kopieren können.
    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!
    Super, Vielen Dank :thumbup:
    Das habe ich jetzt hin bekommen.

    Den restlichen Code habe ich jetzt auch eingefügt.
    Wenn ich das richtig verstehe sollte das "Private Sub MyApplication_StartupNextInstance" jetzt reagieren wenn die Application ein weiteres mal gestartet wird, oder?
    Bisher kann ich aber noch keine Reaktion erkennen. Meine eingefügte MsgBox springt auch nicht auf.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim dt As DataTable
    3. Private cLvwSort As ListViewSort
    4. Public Pub_Zeile As Integer
    5. Public Pub_Spalte As Integer
    6. Public PrintFrom As String
    7. Private PrintListView As New PrintListView
    8. Public Event StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs)
    9. #Region "Form1"
    10. Private Sub MyApplication_StartupNextInstance(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    11. MsgBox("next Instance...")
    12. Dim ll As New List(Of String)
    13. ll.AddRange(e.CommandLine)
    14. My.Forms.Form1.xxx(ll)
    15. End Sub
    16. Public Sub xxx(ll As List(Of String))
    17. If ll.Count > 0 Then
    18. MessageBox.Show(ll(0)) ' oder das, was Du willst.
    19. End If
    20. End Sub


    CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    MyApplication_StartupNextInstance(...) muss in die MyApplication Klasse.
    Public Event StartupNextInstance(...) kann wech.
    @Koala2000 Ich gab Dir explizite Instruktionen sowie eine kopierbare Vorlage. X(
    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 Es gibt halt Leute wie mich, die verstehen das nicht ganz so schnell, und benötigen etwas mehr Hilfe. :)


    MyApplication_StartupNextInstance(...) muss in die MyApplication Klasse.Public Event StartupNextInstance(...) kann wech.​

    Dieser Hinweis hat mich auf den richtigen Weg gebracht. Jetzt funktioniert´s.

    Vielen Dank an euch. :thumbup:

    Gruß, Koala