SendMessage

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

Informacje
Ostatnia modyfikacja 12-08-2006 23:46 Ostatni autor Morris
Ilość wyświetleń 11438 Wersja 4
Komentarz
crayze dnia 29-06-2008 15:48
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()
Twardy dnia 14-08-2006 09:38
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
Morris dnia 13-08-2006 20:35
Przecież to jest napisane...
Twardy dnia 13-08-2006 17:12
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.

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0261 sek. (zapytań SQL: 10)