在控制別的應(yīng)用程序的時(shí)候,經(jīng)常需要等待直到某個(gè)功能結(jié)束,例如:
打開(kāi)一個(gè)窗口-->等待直到窗口結(jié)束
這個(gè)時(shí)候就可以用到SendMessage
如果在打開(kāi)這個(gè)窗口后仍然需要對(duì)該窗口的界面進(jìn)行設(shè)置,比如Edit的value等等,比如:
打開(kāi)一個(gè)窗口-->控制窗口的control的屬性
這個(gè)時(shí)候就需要PostMessage
使用一個(gè)鉤子程序截獲消息后,使用SendMessage把消息發(fā)送到主處理程序進(jìn)行處理,但是在主處理程序還沒(méi)有完成任務(wù)的時(shí)候,被設(shè)置鉤子的程序進(jìn)入了停止的狀態(tài),不可以處理
WM_PAINT,
WM_MOVE,
.......等的基本信息,
必須要等SendMessage發(fā)送出的消息完成后,才能繼續(xù)運(yùn)行,整個(gè)界面一片空白,把鉤子消息設(shè)置成PostMessage的發(fā)送消息形式后,問(wèn)題解決!
我查了MSDN對(duì)這兩個(gè)API的定義,
PostMessage只是把消息放入隊(duì)列,不管其他程序是否處理都返回,然后繼續(xù)執(zhí)行;
而SendMessage必須等待其他程序處理消息后才返回,繼續(xù)執(zhí)行。
PostMessage的返回值表示PostMessage函數(shù)執(zhí)行是否正確;
而SendMessage的返回值表示其他程序處理消息后的返回值。
使用這兩個(gè)發(fā)送消息函數(shù)的最重要的是要看你的程序是否要對(duì)消息的滯后性關(guān)注否,PostMessage會(huì)造成消息的滯后性,而SendMessage則不會(huì),但如果SendMessage消息處理失敗,則會(huì)造成程序停止!
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/kaguo/archive/2004/09/13/103005.aspx