SendMessage函數 將指定的消息發到窗口。它調用特定窗口的窗口處理函數,並且不會立即返回,直到窗口處理函數處理了這個消息。
PostMessage函數 將一個消息放入與創建這個窗口的消息隊列相關的線程中,並立刻返回不等待線程處理消息。
SendMessage是發送消息,然后等待處理完成返回,但發送消息的方法為直接調用消息處理函數(即WndProc函數),按照函數調用規則,肯定會等消息處理函數返回之后,SendMessage才返回。而PostMessage卻沒有發送消息,PostMessage是將消息放入消息隊列中,然后立刻返回,至於消息何時被處理,PostMessage完全不知道,此時只有消息循環知道被PostMessage的消息何時被處理了。
例句:
向按鈕(Button)發送單擊:
SendMessage:
SendMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);
PostMessage:
PostMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
PostMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);