![]() |
anderes Programm beenden
Hallo
Ich wollt mal fragen ob jemand weiß wie man eine andere Anwendung beendet ohne diese zu terminieren. Ich hab Ein Hauptprogramm und eine extra Anwendung für die Optionseinstellungen. Wenn man jetzt die Optionen verändert hat, soll (wenn das Hauptprogramm läuft) das Hauptprogramm beendet werden und anschließend neu gestartet werden, damit es auch wirklich die neuen Einstellungen benutzt. Das Problem ist nur, dass das Hauptprogramm nicht so einfach beendet werden kann sondern nur über ein Popupmenü in der TNA. Ein normales Schließen sorgt nur dafür das es in die TNA geschickt wird. Könnte man vieleicht irgendwie auf dieses Popupmenü zugreifen von der Options-Anwendung? naja Notfalls könnt ich vor aufrufen der Optionen canclose auf true setzten. Aber vieleicht gibt da ja ne elegante Lösung über das Popupmenü. (Popupmenü -> beenden) Gruß |
Re: anderes Programm beenden
Zitat:
Am einfachsten ist es, wenn du in deinem Hauptprogramm auf irgendeine Fensternachricht gesondert reagierst. |
Re: anderes Programm beenden
Wie lege ich denn in meinem Programm eine eigene Fensternachricht fest? Das wäre nämlich ne sehr gute möglichkeit!
|
Re: anderes Programm beenden
Wenn es dein eigenes Programm ist, dann sende doch eine WM-Quit-Nachricht an das Application-Window (welches das am weitesten übergeordnete sein sollte).
|
Re: anderes Programm beenden
Danke euch beiden funktioniert genau so wie ich mir das Vorgestellt habe!
Für Leute die sowas nochmal brauchen: Im Hauptprogramm:
Delphi-Quellcode:
...
public { Public-Deklarationen } procedure WndProc(var Msg: TMessage); override; ... procedure TForm1.WndProc(var Msg: TMessage); begin if Msg.Msg = WM_QUIT then begin //Irgendwelche Aktionen durchführen end; inherited; end; Und im Programm mit dem man Beenden will (Findwindow am besten mit XSpy o.ä.) :
Delphi-Quellcode:
Gruß
procedure TForm1.Button1Click(Sender: TObject);
var wnd: HWND; begin wnd := FindWindow('namederform', 'namedesprogramms'); if wnd <> 0 then begin Sendmessage(wnd,WM_QUIT,0,0); end; end; P.S. Wenn ich ich WM_Quit nur an diese Form sende, dann gibt es doch keine Konflikte mit anderen Programmen oder? Also nich das irgendein anderes Programm dadurch beednet wird... |
Re: anderes Programm beenden
Das kann höchstens passieren, wenn es ein anderes Fenster mit den Kriterien für FindWindow gibt, das dann vor Deinem gefunden wird.
|
Re: anderes Programm beenden
Zitat:
Übrigesn musst du nicht die wndProc-Methode überschreiben, du kannst auch eine Methode definieren:
Delphi-Quellcode:
procedure xyz(var msg:TMessage); message WM_User+n;
|
Re: anderes Programm beenden
Ja gut OK...mach ich dann mit eigener Message...aber es kann eigentlich nicht vorkommen, dass ein Window mit den selben Kriterien gefunden wird. Also das ist absolut unwahrscheinlich in meinem Fall!
Wieder was gelernt ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz