Text an laufende Anwendung senden

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Snickbrack.

    Text an laufende Anwendung senden

    Hi,

    ihr helft mir bisher immer richtig gut weiter :) Danke dafür erstmal!

    Ich habe dieses Mal folgendes Anliegen.

    Ich möchte an meine laufende VB Net Anwendung (beinhaltet eine Textbox und einen Button) von extern einen Text an die Textbox senden.
    Das laufende Programm heißt Test.exe.

    Jetzt möchte ich per Kommandozeile oder Batch oder ähnlich, den Text "1234" an die laufende Anwendung in die Textbox senden. Ich habe dazu leider nichts passendes gefunden und hoffe daher sehr auf Eure Hilfe.

    Danke :)
    @Sub7evenHH Dazu gibt es zwei möglichkeiten:
    SendKeys():
    docs.microsoft.com/de-de/dotne…N&view=netframework-4.7.2
    oder Fernsteuerung:
    Andere Programme fernsteuern
    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!
    Solange das Testprogramm nicht von Dir ist, kannst Du nicht befehligen, dass es mal einfach irgendwelche Daten irgendwo hinschickt, es sei denn, dass das Programm das vorsieht, was z.B. passen würde, wenn es von Dir selbst ist. Ansonsten könntest Du versuchen, die Daten aus dem anderen Programm auszulesen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das Testprogramm ist von mir. Dies soll nun Daten erhalten sobald ich eine Batch ausführe. Sobald ich dann

    Befehl.batch ausführe
    Inhalt:
    Test.exe Textbox1="Testwert1"
    Test.exe Button1_click

    soll der Wert der Textbox1 auf "Testwert1" gesetzt werden und Button1_click event ausfgeführt.

    Das Testprogramm ist von mir und ich kann dort Änderungen vornehmen.
    Ach jetze. Ich dachte, dass Du Dir Daten aus nem laufenden Fremdprogramm in Dein Programm reinholen willst.
    Dann musst Du Deine Anwendung Single-Instance machen und an passender Stelle die CommandLine auswerten, will heißen: die Befehle interpretieren:
    In die Application.Designer.VB kommt dann als Ansatzpunkt:

    VB.NET-Quellcode

    1. Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    2. Dim CommandLineArguments = Environment.GetCommandLineArgs
    3. End Sub

    Dein Vorhaben kommt mir aber n bisken Pfeil-Rücken-Brust-Auge vor. Was soll das werden, wenn's fertig ist, falls ich fragen darf?
    Bilder
    • SingleInstance.png

      25,6 kB, 795×461, 98 mal angesehen
    • ApplicationDesignerVB.png

      7,89 kB, 296×170, 94 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke erstmal :)

    Ich möchte per CMD verschiedene Variablen in mein laufendes eigenes Programm übergeben.

    Wenn ich jetzt das Programm das erste mal starte (Test.exe "1234 ABC") und folgendes im Code steht:

    VB.NET-Quellcode

    1. Private Sub Start_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim args = Environment.GetCommandLineArgs()
    3. If args.Length > 1 Then TextBox1.Text = args(1)
    4. end sub


    steht auch wirklich 1234 ABC in der Textbox1.
    Leider aktualisiert er die Textbox2 nicht sobald ich nun nochmal die Batch ausführe mit einem anderen Text "zzz". Es bleibt 1234 ABC drin stehen.

    füge ich die Codezeile

    VB.NET-Quellcode

    1. Private Sub Start_StartupNextInstance(ByVal sender As Object, ByVal e As Start) Handles Start_StartupNextInstance()
    2. Dim CommandLineArguments = Environment.GetCommandLineArgs
    3. Dim args = Environment.GetCommandLineArgs()
    4. If args.Length > 1 Then TextBox1.Text = args(1)
    5. End Sub


    hinzu, ändert es nichts. Unter den Projekteigenschaften habe ich Einzelinstanzanwendung ausgewählt.
    :?:
    Das ist nicht, was ich schrieb. Dein 2. CodeListing ergibt keinen Sinn. Wo hast Du das reingeschrieben? ByVal e As Start? Was ist start denn für ein Typ? Handles Start_StartupNextInstance()? Das ist syntaktisch falsch. Zeig mal bitte den Screenshot, wo jener Code bei Dir steht. Bzw. angeblich stehen soll. Der Compiler müsste da nämlich mehrfach rebellieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Zurück zu Post#6, in dem steht: In die Application.Designer.VB kommt dann als Ansatzpunkt
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ups.. Sorry. Ja habe ich jetzt so gemacht. Es kommen keine Fehler mehr. Wie übergebe ich jetzt die einzelnen Argumente an eine Textbox?

    Edit:
    Ich habe es jetzt mit

    VB.NET-Quellcode

    1. ​ Start.TextBox1.Text = CommandLineArgs(0)

    gemacht. Starte ich die exe nun mit Test.exe 1234
    bleibt die textbox leer. führe ich nun nochmal test.exe 1234 aus, wird der text 1234 in der textbox angezeigt. führe ich jetzt Test.exe 5555 aus, bleibt der text auf 1234 und ändert sich nicht mehr.

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

    Und wo steht dieser Code? Welche Datei, welche Prozedur?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Der Code steht in ApplicationEvents.vb

    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 CommandLineArguments = Environment.GetCommandLineArgs
    5. Start.TextBox1.Clear()
    6. Start.TextBox1.Text = CommandLineArgs(1)
    7. End Sub
    8. End Class
    9. End Namespace
    Ah ok, mein Fehler. Environment.GetCommandLineArgs gibt die Parameter der laufenden Instanz wieder. In e stehen die Daten der Folgeinstanz. Also musst Du das hier in Zeile#7 nutzen.

    VB.NET-Quellcode

    1. Start.TextBox1.Text = e.CommandLine(0)

    Jetzt sollte es klappen.

    ##########

    ABER: Der Code Start.TextBox1.Text ist fast ein Fall für @RodFromGermany und seinen Thread Dialoge richtig instanziieren. Warum nur fast? Weil ein Zugriff auf die laufende Form nicht wie dort beschrieben geht. Hier musst Du m.E. (am besten) das hier verwenden:

    VB.NET-Quellcode

    1. DirectCast(Me.MainForm, Start).TextBox1.Text = e.CommandLine(0)

    Falls jemand einen besseren Vorschlag hat: immer her damit! Event-Raising hab ich nicht hinbekomen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Du bist der HAMMER!

    DANKE DANKE DANKE :) Jetzt funktioniert es :)

    So sieht nun der Code aus.

    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 CommandLineArguments = Environment.GetCommandLineArgs
    5. Start.TextBox3.Text = Now
    6. Start.TextBox2.Text = e.CommandLine(0)
    7. End Sub
    8. End Class
    9. End Namespace