首先,我不是刻意去學習Postmessage函數,也不願意花費很多經歷去研究API。但是為了完善自己的知識和體現域學式的學習方法,順便研究了一下這個函數。
網上有很多關於Postmessage發送消息無效的問題,但是沒有人回答。在此我膚淺的解釋一下問題的所在。
首先排除消息發送失敗和接受者沒有相應的可能。大多數問題都是發送鼠標單擊消息但是沒有效果,而且函數返回值正確,出現這種問題的原因是句柄沒找對。比如我們想操作一個窗體上的按鈕,那么句柄就直接寫這個按鈕的句柄,不要去寫窗體的句柄,即使你用了坐標去點擊,事實證明這個點擊消息是無法被按鈕層所接受的。只有具體到類,越具體越好,具體到某個類,然后再去發送消息。
其實我學習它主要是應用在網頁操作中。因為有些網頁采用的是Flash按鈕,很難用常規方法去模擬點擊,但是有了Postmessage就不一樣了!我們可以用按鈕在窗體中的絕對位置(不是絕對位置也可以,就是麻煩點)去點擊,簡單看一下Postmessage的調用:
PostMessage(hwnd, WM_LBUTTONDOWN, 0,mX + mY * 65536)。
詳細解釋一下每個參數:
Hwnd:實例句柄。在這是點擊網頁,一定要注意這個句柄是顯示網頁那個窗口的句柄(也就是選項卡實例的句柄),而不是整個瀏覽器的句柄!這個類在IE內核的瀏覽器中是:Internet Explorer_Server。
WM_LBUTTONDOWN:符號常量,代表常數&H201。表示鼠標左鍵按下。
0:不用管。。。。
mX + mY * 65536:mX就是相對於客戶區(就是整個類的實例的界面)頂點的橫坐標,也就是類的實例句柄的左上角的坐標為(0,0),mY當然是縱坐標。這個運算的意思是把橫縱坐標變成一個數,縱坐標放在高16位,橫坐標放在低16位(也可以用MAKELONG函數,MAKELONG(mY,mX))。把運算結果傳遞給函數就能夠識別這個坐標,根據坐標去點擊。注意:這里所說的坐標單位是像素!不是緹,緹與像素的轉換關系是一像素=15緹。可以用截屏工具獲得具體的坐標,截屏工具恰好就是以像素為單位的坐標。
有了這個函數,對於控制電腦來說是如虎添翼啊!在此我僅僅是簡單舉個例子!詳細參數去MSDN查。