SendMessage將指定的訊息發送到一個視窗或多個視窗。SendMessage為這個指定的訊息調用視窗處理常式,直到視窗處理完這個程式後才會返回。和SendMessage函數相比,PostMessage函數發送一個訊息到線程訊息對列中,並立即返回。
函數原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
參數:
hWnd:其視窗程序將接收訊息的視窗的控制代碼。如果此參數為HWND_BROADCAST,則訊息將被發送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但訊息不被發送到子視窗。
Msg:指定被發送的訊息。
wParam:指定附加的訊息指定資訊。
IParam:指定附加的訊息指定資訊。
傳回值:傳回值指定訊息處理的結果,依賴於所發送的訊息。
備忘:需要用HWND_BROADCAST通訊的應用程式應當使用函數RegisterWindowMessage來為應用程式間的通訊取得一個唯一的訊息。
如果指定的視窗是由調用線程建立的,則視窗程序立即作為子程式調用。如果指定的視窗是由不同線程建立的,則系統切換到該線程並調用恰當的視窗程序。線程間的訊息只有線上程執行訊息檢索代碼時才被處理。發送線程被阻塞直到接收線程處理完訊息為止。
Windows CE:Windows CE不支援Windows案頭平台支援的所有訊息。使用SendMesssge之前,要檢查發送的訊息是否被支援。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;標頭檔:winuser.h;輸入庫:user32.lib;Unicode:在Windows NT環境下以Unicode和ANSI方式實現。
PostMessage:
函數功能:該函數將一個訊息放入(寄送)到與指定視窗建立的線程相聯絡訊息佇列裡,不等待線程處理訊息就返回。訊息佇列裡的訊息通過調用GetMessage和PeekMessage取得。
函數原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
參數
hWnd:其視窗程序接收訊息的視窗的控制代碼。可取有特定含義的兩個值:
HWND.BROADCAST:訊息被寄送到系統的所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗。訊息不被寄送到子視窗。
NULL:此函數的操作和調用參數dwThread設定為當前線程的標識符PostThreadMessage函數一樣。
Msg:指定被寄送的訊息。
wParam:指定附加的訊息特定的資訊。
IParam:指定附加的訊息特定的資訊。
傳回值:如果函數調用成功,返回非零值:如果函數調用失敗,傳回值是零。若想獲得更多的錯誤資訊,請調用GetLastError函數。
備忘:需要以 HWND_BROADCAST方式通訊的應用程式應當用函數 RegisterwindwosMessage來獲得應用程式間通訊的獨特的訊息。
如果發送一個低於WM_USER範圍的訊息給非同步訊息函數(PostMessage.SendNotifyMessage,SendMesssgeCallback),訊息參數不能包含指標。否則,操作將會失敗。函數將再接收線程處理訊息之前返回,寄件者將在記憶體被使用之前釋放。