Programm nochmal öffnen mit Parametern

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Programm nochmal öffnen mit Parametern

    Hey Leute ,
    ich habe ein Button womit ich mein Programm nochmal öffne.Ich möchte nun wenn ich mein Programm nochmal per Button geöffnet habe das eine Funktion ausgeführt wird z.B wie beim Firefox wenn man ein privates Fenster öffnet.Wie mache ich das?
    Hey,

    übergib dem Prozess einen entsprechenden Befehl über die CommandLine. Darauf kannst Du in Deinem Programm zugreifen und entsprechend eine Aktion ausführen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich habe eine Funktion namens testMod.
    Nun wenn ich diesen Code benutze passiert nichts also meine Form wird geöffnet aber die Funktion wird nicht ausgeführt.Was ist an diesem Code falsch?

    VB.NET-Quellcode

    1. Process.Start("test.exe", "testMod")

    Nichts ist daran falsch. Du musst natürlich in Deinem Programm prüfen, ob überhaupt ein Befehl übergeben wurde. Wenn ja => entsprechende Funktion ausführen. Weißt Du, wie Du an die CommandLineArgs gelangst?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Nein.Ich habe diesen Code dazu gefunden auf MSDN wenn ich ihn anpasse klappts dann?

    VB.NET-Quellcode

    1. Private Sub MyApplication_Startup( _
    2. ByVal sender As Object, _
    3. ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
    4. ) Handles Me.Startup
    5. For Each s As String In My.Application.CommandLineArgs
    6. If s.ToLower = "/batch" Then
    7. ' Stop the start form from loading.
    8. e.Cancel = True
    9. End If
    10. Next
    11. If e.Cancel Then
    12. ' Call the main routine for windowless operation.
    13. Dim c As New BatchApplication
    14. c.Main()
    15. End If
    16. End Sub
    17. Class BatchApplication
    18. Sub Main()
    19. ' Insert code to run without a graphical user interface.
    20. End Sub
    21. End Class

    Denke schon, dass es nach einer Anpassung klappt. Ich persönlich würde lieber im Konstruktor Deiner Start-Klasse prüfen oder im Load-Event. Weiß grad nicht, was ich von dem Konstrukt da oben halten soll. Möglichkeiten gibt´s hier wirklich viele. Im Zweifelsfall aus der Sub Main(). Bin mir grade unsicher, was ich Dir raten soll.

    Wenn ich die CommandLineArgs brauche, dann hole ich sie mir über:

    VB.NET-Quellcode

    1. Environment.GetCommandLineArgs()


    Mir sieht das da oben zu sehr nach einer Eigenbrödlerei von VB aus, darum würd ich es nicht so machen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

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

    Wie benutze ich deinen Code? Also ähnlich wie hier oder anders?

    VB.NET-Quellcode

    1. For Each s As String In My.Application.CommandLineArgs
    2. If s.ToLower = "/batch" Then
    3. ' Stop the start form from loading.
    4. e.Cancel = True
    5. End If
    Ich würde es so lösen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _pathExe As String = "WindowsApplication11.exe"
    3. Public Sub New()
    4. InitializeComponent()
    5. If Environment.GetCommandLineArgs().Length > 1 Then 'erst mal prüfen, ob überhaupt was übergeben wurde. Ein Eintrag ist immer vorhanden, nämlich der Pfad zur Anwendung.
    6. If Environment.GetCommandLineArgs()(1) = "doSmth" Then
    7. ExecOn2ndInstance()
    8. End If
    9. End If
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. Process.Start(_pathExe, "doSmth")
    13. End Sub
    14. Private Sub ExecOn2ndInstance()
    15. MessageBox.Show("2nd instance!")
    16. End Sub
    17. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Naja man "sollte" es so gut es geht vermeiden - die einzige Sache die der My-Namespace mehr kann, ist ganze Directories mit Unterordnern kopieren was IO.Directory nicht hergibt, aber Artentus hat mal ne Extension geschrieben, kann man auch mal reinschauen:
    CopyTo-Erweiterung für DirectoryInfo

    8-) faxe1008 8-)
    Vermeiden weshalb?Weil es langsam ist oder nicht platformunabhängig ist (Mono)?
    Ich benutze My.Settings auch bis die Grundfunktionen alle klappen danach werde ich die jeweiligen Funktionen in .ini Dateien speichern und auslesen.
    C# ist eben DIE .NET-Sprache. VB neigt dazu, manche Sachen sehr zu vereinfachen. Beispielsweise den abartig möglichen Aufruf von Forms und Dialogen, OPTION STRICT OFF und solche Dinge. Im My-Namespace steckt eben auch viel Kram, den C# nicht mitbringt. Man sollte sich an C# orientieren, dann ist man auf einem guten Weg. Abgesehen davon sollte auch der Verweis auf Microsoft.VisualBasic-Namespace aus allen Projekten entfernt werden. Leider sind es u. A. solche Unarten, wegen denen VB oft "belächelt" wird, wobei es dazu keinen Grund gibt, wenn man sich an bestimmte "Konventionen" hält. Trotzdem finde ich My.Settings eine gute Sache.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Lies doch mal den Thread ausm Link mal ganz, da ist wirklich fast alles aufgeführt. Aber um es kurz nochmal zu umreißen:
    - Es ist plattformabhängig (ich weiß ironisch das unter NET zu sagen), das kannste bei Mono vergessen
    - Es erleichtert dir den Umstieg auf C#
    - Die SystemInfo-Klasse kann um _einiges_ mehr

    8-) faxe1008 8-)
    Ahso ich hab zurzeit auch nur ein Webbrowser Projekt in VB. Ich wollte nächste Woche anfangen C++ zu lernen . C++ ähnelt doch C# oder ? Ich glaube man hat es dort nur mit dem Speichermanagment besser + etwas schnellere Ausführungszeiten.

    Mete1997 schrieb:

    Ich wollte nächste Woche anfangen C++ zu lernen
    Lern mal leber zunächst richtig VB.NET / C#, und wenn Du Dir die Prinzipien der OO zu Eigen gemacht hast, lern die nächste Sprache.
    So kommst Du schnell durcheinander und gibst vielleicht sogar auf.
    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!
    C# ähnelt C++ bis auf die Syntax ein bisschen generell gar nicht.
    Lerne erstmal richtig .NET, dann kann man weitersehen, bevor noch irgendnen Mist mit C++ rauskommt. ^^
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    microsoft.com/germany/msdn/akt…005DasEntwicklerbuch.aspx

    Oder auch die 2008er, 2010er-Version dieses Buches. Die 2005er ist für mich immer noch die Beste für die Grundlagen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o