Form-Owner einer anderen Anwendung zuweisen?

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von TRiViUM.

    Listing#2, Methode#1 ist ja Quatsch. Eine Methode, die nix tut, ausser mit demselben Parameter eine andere aufzurufen, kann man doch weglassen, und die andere gleich aufrufen.

    und weise den Rückgabewert erstmal einer Variablen zu.
    Von der Variablen kannst du dann die Id in einer Messagebox ausgeben, wenn dir das was bringt, oder whatever.

    TRiViUM schrieb:

    Nur was genau muss ich davon benutzen?

    TRiViUM schrieb:

    ob ich verstanden werde
    Kannst Du mal Deinen Plan beschreiben, ohne Quellcode zu verwenden? Nur den blanken Ablauf, wie er sein soll bzw. nicht sein darf.
    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!
    also wie ich das sehe, hängt er aktuell beim simplen Problem, den Prozess, den er mit System.Diagnostics.Process.Start("C:\Passwort.exe") erzeugt, an eine Variable zuzuweisen.
    Erst nachdem er das gelöst hat, kann man weitere Vorhaben diskutieren.

    Etwa wie ich sein Vorhaben verstund, schrieb ich ja bereits in post#4 - leider hat der TE meine Interpretation weder bestätigt noch korrigiert - aber ist ja auch egal, denn wenner den Prozess keiner Variablen zuweisen kann, dann gehts eh nicht weiter.
    @ErfinderDesRades Jou.
    @TRiViUM Wie Du mir einem anderen Programm kommunizieren kannst, gugst Du hier.
    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 schrieb:

    Kannst Du mal Deinen Plan beschreiben

    Klaro, ich habe 2 eigenständige Programme, die aus 2 unterschiedlichen Projekten stammen.
    Es existiert also keinerlei Zusammenhang.
    Ich starte das Programm1.
    Dieses Programm1 startet dann Programm2.Programm2 soll aber so aussehen, als wäre es ein Dialog von Programm1, sodass ich das Programm1 erst wieder schließen kann, wenn ich Programm2 geschlossen habe.

    ErfinderDesRades schrieb:

    hängt er aktuell beim simplen Problem

    Nun, daran scheitert es bestimmt nicht...

    VB.NET-Quellcode

    1. Dim p As Process = System.Diagnostics.Process.Start("C:\Programm2.exe")

    Nur wie es dann weitergeht, daran scheitert es...

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

    TRiViUM schrieb:

    als wäre es ein Dialog von Programm1
    Einfach so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim pr As Process
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. pr = New Process
    5. pr.StartInfo.FileName = "Notepad.exe"
    6. pr.Start()
    7. End Sub
    8. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    9. pr.CloseMainWindow()
    10. End Sub
    11. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    12. pr.CloseMainWindow()
    13. End Sub
    14. 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!
    @TE: hurrah! Nun kann es weitergehen! :thumbsup:

    Probier mal mit so Sachen wie:

    VB.NET-Quellcode

    1. p.WaitForExit()
    2. 'oder
    3. p.RedirectStandardOutput()
    ich guck dieweil auch nochmal nach, wie das genau ging.

    @Rod: Was du machst ist glaub bisserl falsch rum. Er will nicht mit dem HauptProgramm den Neben-Prozess schließen, sondern er will das Hauptprogramm warten lassen, bis der User das NebenProgramm schließt.
    Und er will vom NebenProg auch eine Antwort erhalten, wie es schließt.
    Halt wie eine Messagebox.

    @TE: Für die NebenProzess-Antwort brauchst du natürlich ein Proggi, was eine Ausgabe in die Konsole ausgibt, die man umleiten kann, sodass sie vom Main empfangen werden kann.
    Aber Notepad ist erst mal ein guter Anfang, um mit WaitForExit hinzubekommen, dass das MainProg solange wartet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Bin mir noch nicht so ganz sicher, ob ich richtig verstanden wurde.

    RodFromGermany schrieb:

    Einfach so:

    Jein. Das mit dem Dialog stimmt schon.
    Nur bei einer MessageBox kann man die "Owner-Form" erst wieder bedienen, sobald die Messagebox geschlossen wurde. (man hört auch ein Ton, wenn man versucht die "Owner-Form" anzuklicken, wenn die MSGbox noch nicht geschlossen wurde.)
    Und so soll es bei mir auch sein.

    ErfinderDesRades schrieb:

    Halt wie eine Messagebox

    Genau.
    Ich möchte, dass mein Programm2 optisch wie ShowDialog aufgerufen wird.

    Eine Antwort, wie es schließt, brauche ich noch nicht einmal.
    Nur, dass es geschlossen wurde.
    Der Code von @RodFromGermany ist soweit ja schon ganz okay bzw. dein WaitForExit(), nur kann ich nach dem Aufruf vom Notepad das Programm1 noch bedienen.
    Ich könnte zwar Enabled auf false setzen usw, aber das kommt dem Original-Dialog nicht sehr nahe...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TRiViUM“ ()

    Klaro:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim pr As Process = New Process
    4. pr.StartInfo.FileName = "Notepad.exe"
    5. pr.Start()
    6. pr.WaitForExit()
    7. End Sub
    8. End Class


    Das Programm1 ist dann (fast) nicht mehr bedienbar, solang Notepad geöffnet ist.
    Ich kann aber trotzdem auf den Button1 klicken (optisch sieht's so aus als wenn ich ihn nicht geklickt hätte).
    Und nachdem ich Notepad geschlossen habe, öffnet es sich erneut, weil ich vorher nochmal auf den Button1 geklickt habe.

    Gibt es also optisch keine möglichkeit, es genau so wie ein Dialog aussehen zu lassen?

    TRiViUM schrieb:

    wie ein Dialog aussehen zu lassen?
    Ja, gibt es, da müsstest Du die Werte, die bei der Registrierung des Fensters dieses Programms gesetzt wurden, überschreiben. Wenn ich mich nicht irre: API.SetWindowLong(). Gugst Du hier.
    ----

    TRiViUM schrieb:

    ShowDialog
    AHa.
    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!
    Habs momentan soweit:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim pr As Process = New Process
    4. pr.StartInfo.FileName = "Notepad.exe"
    5. pr.Start()
    6. Enabled = False
    7. pr.WaitForExit()
    8. Enabled = True
    9. Activate() '\
    10. BringToFront() ' > notwendig, da die Form sonst in den Hintergrund gerät
    11. Focus() '/
    12. End Sub
    13. End Class


    Aber den typische "Dialog-Style" kann ich nicht bekommen ?

    TRiViUM schrieb:

    "Dialog-Style"
    War doch gerade:

    RodFromGermany schrieb:

    API.SetWindowLong()
    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!