PostMessage函數介紹

 

PostMessage函數介紹
PostMessage(H,WM_SHOWWINDOW,NULL,SW_PARENTCLOSING);
ShowWindow(H,SW_HIDE);

函數功能描述:將一個消息放到與指定窗口創建的線程相關的消息隊列中,不等線程處理消息就返回。消息隊列裏的消息通過調用GetMessage或PeekMessage函數而獲得。

.函數原型:
    BOOL PostMessage(
      HWND hWnd,      // 目標窗口句柄
      UINT Msg,       // 被張貼的消息
      WPARAM wParam,  // 第一個消息參數
      LPARAM lParam   // 第二個消息參數
    );

.參數:
    hWnd
        窗口過程接收消息的窗口句柄。可取有特定含義的兩個值:
        取值                  含義
        HWND_BROADCAST        消息被送到系統的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口。
                              消息不被送到子窗口。
        NULL                  函數的行爲和將參數dwThreadId設置爲當前線程的標識符的PostThreadMessage函數一樣。

    Msg
        指定被髮送的消息;
    wParam
        指定附加消息的特定信息;
    lParam
        指定附加消息的特定信息。


.返回值:
    如果調用函數成功,返回非零值。
    如果調用函數失敗,返回值是零。獲得更多的錯誤信息,請調用GetLastError函數。


.備註:
    需要以 HWND_BROADCAST 方式通信的應用程序應該使用 RegisterWindowMessage 函數來獲得應用程序間通信的獨特消息。
    如果發送一個低於WM_USER範圍的消息給異步消息函數(PostMessage.SendNotifyMessage或SendMesssgeCallback),消息參數不能包含指針,否則,操作將失敗。函數將在接收線程處理消息之前返回,發送者將在內存被使用之前釋放它。

PostMessage和SendMessage有什麼區別?
在控制別的應用程序的時候,經常需要等待直到某個功能結束,例如:
打開一個窗口-->等待直到窗口結束
這個時候就可以用到SendMessage
如果在打開這個窗口後仍然需要對該窗口的界面進行設置,比如Edit的value等等,比如:
打開一個窗口-->控制窗口的control的屬性
這個時候就需要PostMessage

使用一個鉤子程序截獲消息後,使用SendMessage把消息發送到主處理程序進行處理,但是在主處理程序還沒有完成任務的時候,被設置鉤子的程序進入了停止的狀態,不可以處理
WM_PAINT,
WM_MOVE,
.......等的基本信息,
必須要等SendMessage發送出的消息完成後,才能繼續運行,整個界面一片空白,把鉤子消息設置成PostMessage的發送消息形式後,問題解決!
我查了MSDN對這兩個API的定義,
PostMessage只是把消息放入隊列,不管其他程序是否處理都返回,然後繼續執行;
而SendMessage必須等待其他程序處理消息後才返回,繼續執行。
PostMessage的返回值表示PostMessage函數執行是否正確;
而SendMessage的返回值表示其他程序處理消息後的返回值。
使用這兩個發送消息函數的最重要的是要看你的程序

發佈了17 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章