如果WM_COPY失敗,有幾個途徑,你可以嘗試...
假一按鍵就可以發送WM_KEYDOWN和WM_KEYUP消息。
但是,您在郵件中發送了什麼?如果您發送「c」,則這些消息中沒有辦法通知應用程序ctrl也被按下。
您可能能夠發送字符0x03(這是ctrl + c實際生成的字符代碼),但不能保證接收應用程序會將其解釋爲「ctrl + c」操作。
爲什麼它不起作用?接收應用程序可能會...
- 忽略WM_KEYDOWN和WM_KEYUP和使用其他手段來讀取鍵盤(如GetAsyncKeyState,看是否有鍵被按下)
- 手柄WM_KEYDOWN和/或WM_KEYUP消息,但看「c」,然後使用GetAsyncKeyState()或類似函數檢測消息處理時ctrl是否關閉。
- 如果消息沒有輸入焦點,或者更糟糕,它可能仍會忽略消息,就像通過輸入焦點窗口接收消息一樣。
所以 - 嘗試一下,但它可能無法正常工作。
或者,如果SendInput有效,那麼您可以將輸入焦點強制爲正確的控件SendInput,然後將輸入焦點恢復到其以前的位置。
另一種方法(可能是最好的一種)是,如果它是一個已知的對話框並且它包含一個靜態文本字段,那麼您可能只能找到該子控件和GetText(發送WM_GETTEXT消息),並且避免使用剪貼板。 (或者如果您需要剪貼板上的文本,請像這樣獲取,然後自己將其放在剪貼板上)。這將避免欺騙應用程序提供文本,並回退到標準的Windows行爲。
我,我試圖WM_COPY問題提及。不幸的是,它不適合我的需求。我需要能夠執行擊鍵,但通過SendMessage調用。 – gtaborga 2010-04-01 21:17:35
@gtaborga:這是正確的答案。你只是不要把它發送到正確的窗口。 – 2010-04-01 21:37:39