2011-04-12 95 views
6

到目前爲止,我已經完成了所有的句柄捕獲和GUI設置。我很難理解如何執行實際的步驟。使用「SendMessage」發送應用程序擊鍵(vb.net)

我有這樣的代碼:

SendMessage(New IntPtr(CurrentHandle), WHAT,GOES,HERE?) 

我一直在尋找: http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx#system_defined

然而,這些都不是給多了「代碼示例」的方法,我需要學習如何去做。我只需要發送重要事件,如按「/」或「w」等。不,我不能使用sendkeys。

謝謝,如果你可以幫忙!

+0

你不能用的SendMessage()發送鍵擊,你無法控制的修改鍵的狀態。例如,按住Ctrl鍵。 SendInput是必需的。 – 2011-04-12 23:58:07

回答

8

要模擬按鍵,您需要模擬keydown和keyup事件,這將是您在Msg字段中指定的事件。 (keydown使用256,keyup使用257)。 wParam和lParam是消息特定的,因此對於keyup和keydown,wParam將是關鍵代碼(對於十六進制代碼爲See this page),並且lParam包含其他各種信息(see this page)。在vb.net中,你可以使用int32作爲lParam。例如,可以使用0代表keydown,使用65539代替keyup。

例:

SendMessage(New IntPtr(CurrentHandle), 256, KEYCODE, 0) - Keydown 
SendMessage(New IntPtr(CurrentHandle), 257, KEYCODE, 65539) - Keyup 
+2

看看這個網站:[鏈接](http://www.remkoweijnen.nl/blog/2009/03/30/sending-wm_keydown-or-wm_keyup/) – GregoryComer 2011-04-12 22:51:06

+0

哇,非常感謝。 (看看聲望)歡迎來到Stackoverflow!我希望你喜歡這個網站! – FreeSnow 2011-04-12 22:51:09

1

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

LRESULT WINAPI SendMessage(
    __in HWND hWnd, 
    __in UINT Msg, 
    __in WPARAM wParam, 
    __in LPARAM lParam 
); 

的hWnd - 是窗口的句柄發送消息。 消息 - 是要發送的消息類型。 WParam和lParam實質上是'信息'。具體用途取決於您發送的信息。

你需要使用SendMessage而不是SendKeys來模擬按鍵是什麼情況?我之前使用過SendMessage,但一直是鼠標移動。 .SendKeys()應該將你所說的任何按鍵發送到活動窗口。

Public Shared Sub ActivateWin() 
    Dim Win As Process = Process.GetProcessesByName("myWindow").First 
    AppActivate(Win.Id) 
End Sub 

我在SendKeys()之前立即使用了上述函數,它始終工作。

如果這樣不起作用,或者您想使用SendMessage來使用SendMessage; WM_KEYDOWN消息的文檔就是你需要的。 http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

您將操縱位來創建正確的lParam值。

+0

這一切都必須在後臺運行,因此將應用程序設置爲活動狀態將會破壞我程序的用途。客戶應該被允許在這個過程中做事。另外,對於特定的應用程序,由於某種原因,它不會從sendkeys接收輸入。 – FreeSnow 2011-04-12 22:45:51

+0

您的鏈接並不能真正幫助我。我不知道用什麼作爲我提供的功能的輸入。你能否給我一個發送普通字符的例子? (比如一個')? – FreeSnow 2011-04-12 22:46:57

相關問題