Datei mit eigener Dateiendung öffnen in bereits gestartetem Programm

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von LordPhil.

    Datei mit eigener Dateiendung öffnen in bereits gestartetem Programm

    Hallo zusammen,

    ich habe ein Programm geschrieben dass Dateien mit eigener Dateiendung benutzt.
    Habe hierzu folgednes TUT verwendet:
    [VB.NET] Dateiendung registrieren

    Danke nochmal an den Autor ;) funktioniert super!

    Meine Anwendung soll eine Single-Instanz-Anwendung sein.
    Ist das Programm jetzt geschlossen und ich doppelklicke auf eine zu dem Programm zugehörige Datei dann startet sich das Programm und öffnet einen einen Dialog und zeigt den Inhalt dieser Datei. -> So soll es auch sein.

    Ist das Programm aber bereits gestartet und ich klicke drauf wird eine neue Instanz des Programm gestartet. -> Soll nicht sein da es eine Single-Instanz-Anwendung sein soll.
    Mache ich daraus eine Single-Instanz Anwendung und ich klicke auf die Datei passiert logischerweise nichts.

    Jetzt wäre meine Frage, ist es möglich wenn ich eine Single-Instanz-Anwendung habe die bereits gestartet ist und ich doppelklicke auf die zugehörige Datei mit registrierter Erweiterung, dass sich dann ein Dialog öffnet und den Inhalt anzeigt.
    Irgendwie stehe ich da grad auf dem Schlauch und weiss nicht weiter...

    Für Tipps wäre ich sehr dankbar :)
    Danke schonmal!

    Gruß
    Ja was soll es denn nun sein?
    Single-Anwendung:
    Projekt -> Eigenschaften -> Anwendung -> Einzelinszanzanwendung erstellen (VS 2010)
    Hier sorgt das System dafür, dass nur eine Instanz läuft.
    Wenn Du beim Laifen einer Instanz einen Doppelklick auf Deine Dateiendung bearbeiten willst, darfst Du keine Einzelanwendung haben.
    Da musst Du in der Form_Load() nachsehen, ob Deine Anwendung bereits gestartet wurde.
    Nein: normaler Start,
    Ja: Startparameter an die laufende Instanz übergeben, aktuelle Instanz beenden.
    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!
    1. LordPhil schrieb:

      Ist das Programm aber bereits gestartet und ich klicke drauf wird eine neue Instanz des Programm gestartet. -> Soll nicht sein da es eine Single-Instanz-Anwendung sein soll.

      Eventuell eine andere exe angeklickt ?! :D

    2. LordPhil schrieb:

      Mache ich daraus eine Single-Instanz Anwendung und ich klicke auf die Datei passiert logischerweise nichts.

      Achso. Vorher war sie gar keine Einzelinstanzanwendung :pinch: ! Warum logisch?

    3. LordPhil schrieb:

      Jetzt wäre meine Frage, ist es möglich wenn ich eine Single-Instanz-Anwendung habe die bereits gestartet ist und ich doppelklicke auf die zugehörige Datei mit registrierter Erweiterung, dass sich dann ein Dialog öffnet und den Inhalt anzeigt.

      Null kapiert 8| .

    ___________________________________________________________________________________________________________________________________
    = Bitte beschreibs genauer ;)

    Aber vielleicht sczhaust du dir die Anwendungsereignisse mal an. (MyProject -> Anwendung)
    Und das StartupNextInstance - Event

    (Hoffentlich wird man bei solchen Rechtschreibfehlern nicht verhaftet :S)

    RodFromGermany schrieb:

    Wenn Du beim Laifen einer Instanz einen Doppelklick auf Deine Dateiendung bearbeiten willst, darfst Du keine Einzelanwendung haben.
    Da musst Du in der Form_Load() nachsehen, ob Deine Anwendung bereits gestartet wurde.
    Nein: normaler Start,
    Ja: Startparameter an die laufende Instanz übergeben, aktuelle Instanz beenden.
    Hi ;)
    genau so in die Richtung hab ich auch gedacht.
    Nur hab ich bloss keine Ahnung wie ich das Anstellen soll.
    Überprüfen ob die Anwendung schon läuft und die aktuelle Instanz beenden ist ja kein Problem.
    (Guggen ob ein gleicher Prozess schon läuft und wenn ja beenden.)
    Nur wie übergebe ich was der Instanz die schon vorher gelaufen ist?
    Danke :)
    Sooooo jetzt hab ichs selbst auf die reihe bekommen :)
    juhuuu ;)

    Also so hab ichs jetzt gemacht:
    Single-Instanz-Anwendung angeklickt
    Applications Events:

    VB.NET-Quellcode

    1. Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    2. DirectCast(Me.MainForm, start).NextDocument(e)
    3. End Sub



    Und in der Main:

    VB.NET-Quellcode

    1. Public Sub NextDocument(ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs)
    2. Dim path As String = e.CommandLine.Item(0) & " " & e.CommandLine.Item(1) & " " & e.CommandLine.Item(2)'Pfad zusammenbauen und dann starten :) End Sub



    danke für euren Denkanstoß ;)
    hab da grad noch ne frage falls zufällig wer weiss ;)

    meine anwendung ist im tray und öffnet sich nach einem bestimmten event.
    sie soll in den vordergrund kommen und den focus bekommen.
    jetzt verhält sich das ganze nur so, dass sie zwar in den vordergrund kommt
    aber dann blinkend bleibt und nicht den fokus bekommt...
    im load event passiert folgendes:
    me.topmost=true
    me.activate()

    kennt wer dieses verhalten warum die form nicht den fokus bekommt?

    danke :)