WinAPI

SendMessage

  • 2010-10-31 18:27
  • 4 komentarze
  • 1591 odsłon
  • Oceń ten tekst jako pierwszy
// 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 komentarze

crayze 2008-06-29 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()

Morris 2006-08-13 20:35

Przecież to jest napisane...

Twardy 2006-08-13 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.

Twardy 2006-08-14 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