Dateityp mit meiner Anwendung öffnen währen sie schon gestartet ist

  • VB.NET
  • .NET (FX) 4.0

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Panoaria.

    Dateityp mit meiner Anwendung öffnen währen sie schon gestartet ist

    Hallo un Moin moin,
    weiß jemand wie ich mein Programm mit einem Dateityp den ich in der registry hinzugefügt habe in meiner Anwendung öffnen kann während sie bereits läuft?
    Also das ich eigene Dateitypen mit meiner Anwendung starten kann funktioniert ja gut, hier der Code:

    VB.NET-Quellcode

    1. Dim v As Array
    2. Dim commandlineargs As String = Environment.CommandLine
    3. v = Split(commandlineargs, """ ")
    4. mypath = v(1)
    5. If mypath.Remove(0, mypath.LastIndexOf(".")) = ".wc" Then
    6. MsgBox(mypath)
    7. End If


    Dies funktioniert aber nicht wenn die Anwendung bereits läuft. Hat da jemand eine Idee wie es funktioniert?

    Also um das Problem genauer zu erklären.

    Ich habe z.b. eine datei xy.ptp, dieser Dateityp ist bereits in der Registry eingetragen das es mit meinem Programm geöffnet werden soll.
    In meinem From_Load ereignis habe ich auch bereits den Code eingefügt das der den Pfad der Datei ausliest:

    VB.NET-Quellcode

    1. If My.Application.CommandLineArgs.Count > 0 Then
    2. Dim v As Array
    3. Dim commandlineargs As String = Environment.CommandLine
    4. v = Split(commandlineargs, """ ")
    5. mypath = v(1)
    6. TextBox1.Text = mypath
    7. End If


    Die funktioniert auch wenn mein Programm geschlossen ist. Aber während es Läuft funktioniert es leider nicht und ich habe bis jetzt keine Lösung dafür gefunden, habe auch schon mehrere Möglichkeiten getestet. Vorab mein Programm ist auch so eingestellt das es nur einmals geöffnet werden kanne in den Projekt Eigenschaften ist "Einzelinstanzanwendung erstellen" aktiviert.

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

    CommandLineArgs ist die falsche Anlaufstelle, das klappt nur, wenn die Anwendung noch nicht läuft.

    Programm in den Projekteigenschaften als Einzelinstanzanwendung deklarieren - gut, hast du ja.
    + in der Datei "ApplicationEvents.vb" folgendes Event handeln.

    VB.NET-Quellcode

    1. Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    2. Dim Pfad_des_gelinkten_Objects as String = e.CommandLine.Item(0).ToString
    3. Messagebox.Show(Pfad_des_gelinkten_Objects)
    4. 'hier dein schöner handler
    5. End Sub

    Dann mach es halt so:

    VB.NET-Quellcode

    1. Namespace My
    2. Partial Friend Class MyApplication
    3. Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    4. Dim Pfad_des_gelinkten_Objects as String = e.CommandLine.Item(0).ToString
    5. Messagebox.Show(Pfad_des_gelinkten_Objects)
    6. 'hier dein schöner handler
    7. End Sub
    8. End Class
    9. End Namespace

    Isaalalmani schrieb:

    während sie bereits läuft?
    Setzt zunächst zwingend voraus, dass Dein Programm eine Single Instance-Applikation ist.
    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 Jou.

    Isaalalmani schrieb:

    Vorab mein Programm ist auch so eingestellt das es nur einmals geöffnet werden kanne in den Projekt Eigenschaften ist "Einzelinstanzanwendung erstellen" aktiviert.

    OMA schrieb:

    Programm in den Projekteigenschaften als Einzelinstanzanwendung deklarieren - gut, hast du ja.
    Auch wenn das schon etwas älter ist, soweit bin ich jetzt auch, doch wie starte ich von der Sub MyApplication_StartupNextInstance denn Code in meiner Main?

    In meiner Main soll nach dem Ereignis folgende Sub gestartet werden:

    VB.NET-Quellcode

    1. Private Sub DateiEinlesen(aktdatei As String)
    2. Dim zeile() As String = IO.File.ReadAllLines(aktdatei)
    3. Dim letztezeile As Integer = zeile.Length - 1
    4. Dim aktzeile As Integer = 0
    5. CText.Dateiinhalt = Nothing
    6. CText.Dateiname = aktdatei
    7. RichTextBox1.Clear()
    8. For aktzeile = 0 To letztezeile - 1 Step 1
    9. CText.Dateiinhalt = CText.Dateiinhalt & zeile(aktzeile) & vbCrLf
    10. Next
    11. CText.Dateiinhalt = CText.Dateiinhalt & zeile(letztezeile) & vbCr
    12. RichTextBox1.Text = CText.Dateiinhalt
    13. ' Rekonstruktionsbutton aktivieren
    14. RecoButton.Enabled = True
    15. ' Werkzeugnummernbutton aktivieren
    16. ToolnumberButton.Enabled = True
    17. ' Checkbox aktivieren
    18. DoubleWkzCB.Enabled = True
    19. kplGliederungButton.Enabled = True
    20. Me.Text = "Fileworks " & CText.Dateiname
    21. End Sub


    Irgendwie muss das ja über eine Variablenzuweisung hinaus gehen. Vielen Dank im Vorraus
    @Panoaria Willkommen im Forum.
    Gar nicht.
    Du musst in Deiner Form eine zu erstellende Public Prozedur aufrufen, der Du den Dateinamen übergibst.
    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!
    @Panoaria Dieser Code tut es:
    MyApplication

    VB.NET-Quellcode

    1. Partial Friend Class MyApplication
    2. Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    3. Dim frm = CType(Application.OpenForms(0), Form1) ' Instanz Deiner Form holen
    4. frm.NewData(e.CommandLine(0)) ' Datei reinreichen
    5. End Sub
    6. End Class
    Form1

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub NewData(file As String)
    3. MessageBox.Show(file)
    4. End Sub
    5. 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!
    Vielen Dank, das funzt. Das löst glaube ich auch n paar andere Probleme.

    ich hab nur kurz noch gesichert, das ich keinen Fehler kriege, wenn jemand die exe nochmal startet.

    VB.NET-Quellcode

    1. If e.CommandLine.Count > 0 Then
    2. Dim frm = CType(Application.OpenForms(0), Form1) ' Instanz Deiner Form holen
    3. frm.NewData(e.CommandLine(0)) ' Datei reinreichen
    4. End If

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