Fenter schließen

Peter86

Erfahrenes Mitglied
Hallo,
Ich Starte/Zeige über folgende methode ein Fenster, welches in einem Panel angezeigt wird, siehe methode. Ist es möglich das ich dieses Fenster über mein Programm, welches dieses auch gestartet hat zu schließen? Wichtig ist das das Fenster normal geschlossen wird, als wenn ich auf das X klicken würde, und nicht gekillt wird! Denn das fenster ruft beim schließen wichtige sachen wie abspeichern der daten auf. Hab schon gegooglet doch leider für mich nichts brauchbares gefunden.

Ich hoffe ihr könnt mir bei meinem anliegen helfen. ;)

Danke,
Peter
 
Zuletzt bearbeitet:
Hi

Ich hab mir den Thread nicht weiter angeschaut. Aber du solltest trotzdem eine Referenz des Fensters auf .NET Seite haben.
Diese (also die Klasse Form) bietet dir einen Methode namens Close.
 
Ich Starte das Programm so:
Code:
            hProcess.StartInfo.FileName = Path.Combine(directory, filename)
            hProcess.StartInfo.WorkingDirectory = directory
            hProcess.start()
            ProcID = hProcess.Id

bei
Code:
hProcess.Close()
passierte nichts jedoch schloss sich das fenster bei
Code:
hProcess.MainWindowClose()
aber auch nur wenn ich es im gleichen Sub mache.

Ich hab jetzt einen Button zum schließen erstellt,
und versuche folgendermaßen das programm nun zu schließen:
Code:
        Dim proc As Process = Process.GetProcessById(ProcID)
        proc.CloseMainWindow()

proc.CloseMainWindow()
und
proc.Close()
führen zu keinem ergebniss, wiederrum kill funkioniert, womit ich aber nichts anfangen kann.

Irgeneinen vorschlag?

Peter

EDIT: Mir is aufgefallen, das wenn ich beim Starten hProcess.WaitForInputIdle auskommentiere, es auch nicht mehr geschlossen wird.
Benutze ich nun beim Schließen auch WaitFor... kommt eine meldung
Zugriff verweigert, was wahrscheinlich auch der Grund sein wird warum es sich nicht schließt! Wie erlang ich nun zugriff?

So sieht mein Programm z.z. aus
Code:
    Function Start_App(ByVal dir As String, ByRef filename As String)
        Dim hProcess As New System.Diagnostics.Process

        hProcess.StartInfo.FileName = Path.Combine(dir, filename)
        hProcess.StartInfo.WorkingDirectory = dir
        hProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
        hProcess.Start()
        Return hProcess.Id
    End Function

Button1
Code:
ProcID = Start_App(Dir, Name)

Button2
Code:
            Dim proc As Process = Process.GetProcessById(ProcId)
            proc.WaitForInputIdle()
            proc.CloseMainWindow()
            proc.Close()
 
Zuletzt bearbeitet:
ok, was ich aus deinen tests entnehmen konnte ist, das das schließen funktionierte, wenn du die gleiche Instanz von Process gehalten hast. Mit dem du auch den Prozess gestartet hast.
Deshalb wäre jetzt meine Idee, eine private globale Variable als hProcess zu definieren, damit denn Prozess starten und auch zum schließen zu verwenden.

Sprich nicht die Id merken und darüber Prozess neu anfordern.

Hoffe is verständlich ;)
 
ok, was ich aus deinen tests entnehmen konnte ist, das das schließen funktionierte, wenn du die gleiche Instanz von Process gehalten hast. Mit dem du auch den Prozess gestartet hast.
Deshalb wäre jetzt meine Idee, eine private globale Variable als hProcess zu definieren, damit denn Prozess starten und auch zum schließen zu verwenden.

Sprich nicht die Id merken und darüber Prozess neu anfordern.

Hoffe is verständlich ;)

Danke, das funktioniert. :)
Nur öffnent sich danach ein DialogFenster welches mich fragt, ob ich das Fenster wirklich schließen will. Kann ich das irgentwie ansprechen und auf den Button klicken? Ich hab irgentwo was über ne Api namens Sendmessage gelesen, geht das damit?

Peter
 

Neue Beiträge

Zurück