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ż:

4 komentarzy

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

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
  TranslateMessage(&msg);
  SendMessage(msg.hwnd,msg.message,msg.wParam,msg.lParam);//działa tak samo jak DispatchMessage
}

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[...]ik.php?action=pokaz&id=58