Discussion:
TAppliction.OnMessage
(zu alt für eine Antwort)
Michael Schuricht
2015-12-15 13:01:53 UTC
Permalink
Hallo NG,
wie kann ich Botschaften abfangen, die von einer anderen Anwendung mit
SendMessage an die TApplication Instanz geschickt werden.
Laut OH (was meine Tests bestätigen) kann über
TApplicationsEvents.OnMessage nur auf Nachrichten reagiert werden,
die in die Warteschlange eingefügt werden (PostMessage).

Bin für jede Info dankbar.

Gruß Michael
Hans-Peter Diettrich
2015-12-15 13:16:44 UTC
Permalink
Post by Michael Schuricht
Hallo NG,
wie kann ich Botschaften abfangen, die von einer anderen Anwendung mit
SendMessage an die TApplication Instanz geschickt werden.
Laut OH (was meine Tests bestätigen) kann über
TApplicationsEvents.OnMessage nur auf Nachrichten reagiert werden,
die in die Warteschlange eingefügt werden (PostMessage).
Wie genau werden die Messages abgeschickt? SendMessage sendet an ein
HWND, vielleicht fängt das die Message ab?

DoDi
Michael Schuricht
2015-12-16 07:11:41 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Michael Schuricht
Hallo NG,
wie kann ich Botschaften abfangen, die von einer anderen Anwendung mit
SendMessage an die TApplication Instanz geschickt werden.
Laut OH (was meine Tests bestätigen) kann über
TApplicationsEvents.OnMessage nur auf Nachrichten reagiert werden,
die in die Warteschlange eingefügt werden (PostMessage).
Wie genau werden die Messages abgeschickt?
Danke für Deine Antwort.
Du meinst sicherlich Sendmessage oder Postmessage, das weiß ich nicht,
kommt von einer fremden Anwendung.
Post by Hans-Peter Diettrich
SendMessage sendet an ein
HWND, vielleicht fängt das die Message ab?
Auch Postmessage sendet letztendlich an ein HWND, nur eben erst in die
Warteschlange.
Der Vorschlag von Peter funktioniert.
Post by Hans-Peter Diettrich
DoDi
Gruß Michael
Hans-Peter Diettrich
2015-12-16 12:25:33 UTC
Permalink
Post by Michael Schuricht
Post by Hans-Peter Diettrich
SendMessage sendet an ein
HWND, vielleicht fängt das die Message ab?
Auch Postmessage sendet letztendlich an ein HWND, nur eben erst in die
Warteschlange.
Ich nehme an, daß zumindest bei externen Messages beides über die
Warteschlange läuft. Der Unterschied liegt nur beim Aufrufer, der bei
SendMessage auf das Ergebnis wartet.
Post by Michael Schuricht
Der Vorschlag von Peter funktioniert.
Das ist ja das Wichtigste :-)

DoDi
Michael Schuricht
2015-12-16 15:31:44 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Michael Schuricht
Post by Hans-Peter Diettrich
SendMessage sendet an ein
HWND, vielleicht fängt das die Message ab?
Auch Postmessage sendet letztendlich an ein HWND, nur eben erst in die
Warteschlange.
Ich nehme an, daß zumindest bei externen Messages beides über die
Warteschlange läuft. Der Unterschied liegt nur beim Aufrufer, der bei
SendMessage auf das Ergebnis wartet.
Nein, eben nicht. Das hab ich ja getestet.
Folgendes Vorgehen:
"Externes" Programm erzeugen, mit GetWindow() das Handle von der Instanz
der Klasse TApplication holen, dann einmal mit SendMessage() und zum anderen
mit PostMessage eine Nachricht an die eigene Applikation schicken.

bei PostMessage: kann die Nachricht mit einer Instanz von
TApplicationEvents.OnMessage empfangen;
bei SendMessage: in TApplicationEvents.OnMessage kommt nichts an->Methode
von Peter.

Gruß Michael
Post by Hans-Peter Diettrich
Post by Michael Schuricht
Der Vorschlag von Peter funktioniert.
Das ist ja das Wichtigste :-)
DoDi
Peter Below
2015-12-15 18:10:30 UTC
Permalink
Post by Michael Schuricht
Hallo NG,
wie kann ich Botschaften abfangen, die von einer anderen Anwendung mit
SendMessage an die TApplication Instanz geschickt werden.
Laut OH (was meine Tests bestätigen) kann über
TApplicationsEvents.OnMessage nur auf Nachrichten reagiert werden,
die in die Warteschlange eingefügt werden (PostMessage).
Sieh Dir mal Application.HookMainWindow an. Damit kann man eine eigene
Methode in die Meldungsverarbeitung des Application-Windows einhängen.
Unbedingt darauf achten, das dieser Hook entfernt wird, wenn das
Objekt, das die Methode implementiert, zerstört wird! Sonst gib's beim
Schließen der Anwendung eventuel AVs...
--
Peter Below
TeamB
Michael Schuricht
2015-12-16 07:11:41 UTC
Permalink
Post by Peter Below
Post by Michael Schuricht
Hallo NG,
wie kann ich Botschaften abfangen, die von einer anderen Anwendung mit
SendMessage an die TApplication Instanz geschickt werden.
Laut OH (was meine Tests bestätigen) kann über
TApplicationsEvents.OnMessage nur auf Nachrichten reagiert werden,
die in die Warteschlange eingefügt werden (PostMessage).
Sieh Dir mal Application.HookMainWindow an. Damit kann man eine eigene
Methode in die Meldungsverarbeitung des Application-Windows einhängen.
Unbedingt darauf achten, das dieser Hook entfernt wird, wenn das
Objekt, das die Methode implementiert, zerstört wird! Sonst gib's beim
Schließen der Anwendung eventuel AVs...
Hallo Peter,
Danke, das funktioniert.

Gruß Michael
Loading...