Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi PostMessage mit WM_CLOSE funktioniert nicht (https://www.delphipraxis.net/182336-postmessage-mit-wm_close-funktioniert-nicht.html)

devidespe 17. Okt 2014 15:02

PostMessage mit WM_CLOSE funktioniert nicht
 
Hallo,

bei einem bestimmten Ereignis, welches im OnActivate Ereignis bzw der FormActivation-Prozedur abgefragt wird, möchte ich meine Applikation schließen und die Weiternutzung verhindern. Das habe ich versuchsweise mit:

Delphi-Quellcode:
PostMessage(Handle, WM_CLOSE, 0, 0);


gelöst. Innerhalb von Delphi XE funzt das auch problemlos, starte ich die Applikation aber direkt außerhalb von Delphi, bleibt dieser Befehl wirkungslos. Was kann man da tun ?

himitsu 17. Okt 2014 15:18

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
Grundsatzfrage: Warum lässt du überhaupt das Fenster erst aufgehen und brichst es nicht schon vorher ab?

pelzig 17. Okt 2014 15:25

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
PostQuitMessage(0);

himitsu 17. Okt 2014 17:18

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
Zitat:

Zitat von pelzig (Beitrag 1276431)
PostQuitMessage(0);

VCL:
Delphi-Quellcode:
Application.Terminate;


Aber wie gesagt, man kann natürlich erst vollgas geben, und wirft danach den Anker raus, bzw. schießt mit einem Panzer den Motorblock weg,
anstatt man garnicht erst losfährt.

Der schöne Günther 17. Okt 2014 17:25

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
Deine Analogien werden auch immer wilder :wiejetzt:

devidespe 17. Okt 2014 17:29

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
Zitat:

Zitat von himitsu (Beitrag 1276428)
Grundsatzfrage: Warum lässt du überhaupt das Fenster erst aufgehen und brichst es nicht schon vorher ab?

Weil ich eine Funktion habe, die im festgelegten Intervall einen bestimmten Zustand überprüft, und wenn der eintritt, soll das Programm beendet werden. Gleichzeitig rufe ich diese Funktion in der FormActivate-Funktion auf, da der Zustand auch beim Programmstart einmalig geprüft werden soll.

Application.Terminate funktioniert übrigens nicht, das hab ich schon getestet.

himitsu 17. Okt 2014 17:32

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
So besser?
  • Man kann natürlich das Haus (Form) bauen, einrichten (Create), dem Eigentümer das Exposé schicken (OnShow) und während der Eigentümer grade die Eingangstür hindurch will (OnActivate), reißt man alles schnell wieder ab (Exit), weil der doch nicht da rein durfte und man ihm garkein Haus geben wollte.
  • Oder man hört auf, bevor es los geht.

PS: Wenn dein Programm im Hintergrund startet, garnicht erst den Fokus bekommt, dann würde die Form wohl nicht aktiviert (bekommt den Eigabefokus nicht) und würde schön sichtbar bleiben und man könnte alles stundenlang sehen, wenn man den Vordergrundprozess zur Seite schiebt.
Und solange dein Programme/Fenster dann den Fokus nicht bekommt, kann man per Messages alles damit machen.

EWeiss 17. Okt 2014 17:39

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
@himitsu
Macht immer wieder spaß deine Schnitzereien zu lesen :thumb:

gruss

Sir Rufo 17. Okt 2014 17:45

AW: PostMessage mit WM_CLOSE funktioniert nicht
 
Zitat:

Zitat von devidespe (Beitrag 1276451)
Gleichzeitig rufe ich diese Funktion in der FormActivate-Funktion auf, da der Zustand auch beim Programmstart einmalig geprüft werden soll.

Na dann prüfe das auch beim Programmstart
Delphi-Quellcode:
program MeineTolleAnwendung;

begin
  // hier ist der Start des Programms, hier prüfen

  if EinBesondererMoment then
    Exit;

  Application.Initialize;
  Application.CreateForm( TForm1, Form1 );
  Application.Run;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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