所以,讓我們與簽名啓動SendMessage,從Pinvoke.net:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
它TAKS窗口句柄, hWnd,消息ID,Msg和兩個通用參數wParam和lParam,它們根據消息ID改變測量。
什麼spy ++顯示你是發送到SendMessage的參數。正如你所看到的,它不會向你顯示wParam和lParam,而是hwnd,nHittest和wMouseMsg。這是因爲Spy ++知道wParam和lParam參數對於WM_SETCURSOR消息實際上意味着什麼,並且正在爲您解碼它們。
所以每一片什麼間諜++的解碼已經發送:
00220540
- 的窗口句柄接收消息 - 的hWnd參數。
S
- 表示它是通過 SendMessage()發送的,並未通過 發送到PostMessage()。請參閱http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
WM_SETCURSOR
- 消息ID - 消息參數 。
hwnd:0024052C
- 包含光標的窗口 的句柄 - wParam 參數。
nHittest:HTCLIENT
- 命中測試 代碼 - 參數lParam 的低位字。
wMouseMsg:WM_MOUSEMOVE
- 鼠標 消息 - lParam參數的高位字 。
你會去將消息發送到一個窗口的方法是:
enum WindowMessages {
WM_SETCURSOR = 0x0020,
WM_MOUSEMOVE = 0x0200,
....
}
enum HitTestCodes {
HTCLIENT = 1,
....
}
....
IntPtr hWnd = [get your window handle some how]
int lParam = ((int)WindowMessages.WM_MOUSEMOVE) << 16 + (int)HitTestCodes.HTCLIENT;
SendMessage(hWnd, (uint)WindowMessages.WM_SETCURSOR, hWnd, (IntPtr)lParam);
對於理解其他消息意味着你可以做什麼的Windows文檔中的訊息話題上Msdn.com搜索。
所以在回答完所有這些之後,我認爲這不會將密鑰發送到您想要控制的遊戲。 WM_SETCURSOR與鍵盤輸入沒有任何關係。
其中C#SendMessage函數?說明完整的.Net類。 – 2011-02-02 02:24:18
沒關係,我會發布我正在使用的內容,但如果有人發佈了不同的解決方案,我可以輕鬆地更改它。 – Ben 2011-02-02 02:27:14