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 SendMessage vs. PostMessage (https://www.delphipraxis.net/26840-sendmessage-vs-postmessage.html)

DerAndereMicha 30. Jul 2004 08:51


SendMessage vs. PostMessage
 
hab ein kleines Problem, was ich auch schon bei Spotlight.de beschrieben habe:

habe zwei Programme die sich gegenseitig Messages über SendMessage(h, WM_COPYDATA, 0, LongInt(@cd)) senden.Nun wartet ja SendMessage bekanntlich solang bis die Empfangs-
bestätigung des Empfängers eintrifft. Unter bestimmten Umständen wird aber auf der
anderen Seite ein Fenster modal geöffnet und erst beim Schließen von diesem kommt die Empfangsbestätigung, was dazu führt, daß das Sender-Programm in dieser Zeit "eingefroren"
ist. Wenn ich PostMessage verwende kommt die Message aber nie an. An was kann das liegen?

Bernhard Geyer 30. Jul 2004 09:13

Re: SendMessage vs. PostMessage
 
Zitat:

Zitat von DerAndereMicha
hab ein kleines Problem, was ich auch schon bei Spotlight.de beschrieben habe:

habe zwei Programme die sich gegenseitig Messages über SendMessage(h, WM_COPYDATA, 0, LongInt(@cd)) senden.Nun wartet ja SendMessage bekanntlich solang bis die Empfangs-
bestätigung des Empfängers eintrifft. Unter bestimmten Umständen wird aber auf der
anderen Seite ein Fenster modal geöffnet und erst beim Schließen von diesem kommt die Empfangsbestätigung, was dazu führt, daß das Sender-Programm in dieser Zeit "eingefroren" ist.

Dazu könntest Du in deinem Zielprogramm nochmal sich selbst ein Event schicken (oder einen Timer starten), so das die Funktion sofort zurückkommt

Zitat:

Zitat von DerAndereMicha
Wenn ich PostMessage verwende kommt die Message aber nie an. An was kann das liegen?

Diverse Desktop-"Enhancements" verschlucken WM_COPYDATA-Events, so das diese einfach nicht durchkommen. Also wenn möglich auf einen User-Message umstellen.

roderich 30. Jul 2004 09:26

Re: SendMessage vs. PostMessage
 
WM_COPYDATA funktioniert nur mit SendMessage, nicht mit PostMessage !

wie Bernhard erwähnt hat, sollte man beim Erhalt von WM_COPYDATA die Daten in eine eigene Struktur umkopieren, dann sich selbst benachrichtigen (z.B. per PostMessage) und "möglichst schnell" die Prozedur zurückkehren lassen.

Roderich

DerAndereMicha 30. Jul 2004 12:05

Danke
 
Danke für die Infos


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