SendMessage
Adam Boduch
// C++
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
// Delphi
function SendMessage(hWnd: DWORD; Msg: UINT; wParam, lParam: Integer): LRESULT; stdcall;
Funkcja SendMessage wysyła komunikat do okna określonego w parametrze hWnd. Funkcja czeka na obsłużenie komunikatu - dopiero po tym zwraca jego rezultat. Podobna funkcja - PostMessage - umieszcza komunikat w kolejce i natychmiast kończy swoje działanie.
Parametry:
hWnd
Określa uchwyt okna; uchwyt dowolnego okna można pobrać korzystając z funkcji FindWindow.
Msg
Określa komunikat jaki ma zostać wysłany.
wParam
Dodatkowe informacje wysyłane z komunikatem.
lParam
Dodatkowe informacje wysyłane z komunikatem.
Wartość zwracana:
Funkcja zwraca rezultat obsłużenia wysłanego komunikatu.
Uwagi:
Windows 95/98/Me: Wersja Unicode funkcji (SendMessageW
) jest wspierana przez Warstwę Unicode (Microsoft Layer for Unicode) - MSLU. Aby użyć funkcji w wersji Unicode, należy dokonać pewnych zmian w aplikacji wedle wskazówek nakreślonych w Microsoft Layer for Unicode on Windows 95/98/Me Systems (eng)
Zobacz też:
Ja bym tu jeszcze dopisał, że SendMessage() działa identycznie jak DispatchMessage(), z tym, że DispatchMessage() przyjmuje po prostu jako parametr strukturę MSG, a SendMessage() pojedyncze pole takiej struktury, można np. zamiast DispatchMessage() w pętli komunikatów, zrobić sobie SendMessage()
Z tego wniosek, że PostMessage tylko opóźnia wywołanie funkcji typu SendMessage(), bo tak czy jak zdarzenie z PostMessage() i tak zostanie wywołanie przez SendMessage() lub DispatchMessage()
Przecież to jest napisane...
Powinno być dopisane, że różnica między postmessage polega na tym, że komunikat z sendmessage odrazu jest wykonywany a z postmessage odkładany na koniec kolejki komunikatów.
Ciekawe gdzie możesz doczytać się w powyższym opisie, że sendmessage zostaje odrazu obsłużony, bez czekania w kolejce komunikatów?
Tutaj jest to opisane:
http://sinus.one.pl/~keywords/slownik.php?action=pokaz&id=58