Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi anderes Programm beenden (https://www.delphipraxis.net/109616-anderes-programm-beenden.html)

delphin06 4. Mär 2008 16:15


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ß

Apollonius 4. Mär 2008 16:26

Re: anderes Programm beenden
 
Zitat:

Ich wollt mal fragen ob jemand weiß wie man eine andere Anwendung beendet ohne diese zu terminieren.
Bitte was? Beenden, aber nicht terminieren?
Am einfachsten ist es, wenn du in deinem Hauptprogramm auf irgendeine Fensternachricht gesondert reagierst.

delphin06 4. Mär 2008 17:11

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!

sirius 4. Mär 2008 18:40

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).

delphin06 4. Mär 2008 19:07

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:
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;
Gruß


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...

DeddyH 4. Mär 2008 19:09

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.

sirius 4. Mär 2008 19:23

Re: anderes Programm beenden
 
Zitat:

Zitat von delphin06
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...

Mit WM_Quit beendest du eigentlich die MEssageschleife (sofern du über Postmessage sendest) und damit das Programm Bei deinem Konzept würde ich lieber eine eigene Message (WM_User+n mit n..natürlich Zahl) nehmen.


Ü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;

delphin06 5. Mär 2008 13:30

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 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz