2011-02-02 24 views
2

嘿傢伙,我想發送消息給遊戲(自動化文本命令),問題是,我不知道如何使用從間諜++的信息寫一個C#sendmessage功能。
我能夠使用間諜++獲得 00220540 S WM_SETCURSOR hwnd:0024052C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
任何人都可以提供這意味着什麼細分,以及如何將消息發送到c#遊戲?發送消息取自間諜++

編輯: 我發現我看着錯誤的過程。我沒有看javaw.exe,而是看着實際的遊戲。 這裏是按T代碼:

<00919> 0038062A WM_INPUT nInputCode:RIM_INPUT hRawInput:189E0973 
<00920> 0024052 P WM_KEYUP nVirtKey:'T' cRepeat:1 ScanCode:14fExtended:0fAltDown:0fRepeat:1fUp:1 

感謝,
最大

+0

其中C#SendMessage函數?說明完整的.Net類。 – 2011-02-02 02:24:18

+0

沒關係,我會發布我正在使用的內容,但如果有人發佈了不同的解決方案,我可以輕鬆地更改它。 – Ben 2011-02-02 02:27:14

回答

6

所以,讓我們與簽名啓動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消息實際上意味着什麼,並且正在爲您解碼它們。

所以每一片什麼間諜++的解碼已經發送:

  1. 00220540 - 的窗口句柄接收消息 - 的hWnd參數。
  2. S - 表示它是通過 SendMessage()發送的,並未通過 發送到PostMessage()。請參閱http://msdn.microsoft.com/en-us/library/aa265147(v=vs.60).aspx
  3. WM_SETCURSOR - 消息ID - 消息參數 。
  4. hwnd:0024052C - 包含光標的窗口 的句柄 - wParam 參數。
  5. nHittest:HTCLIENT - 命中測試 代碼 - 參數lParam 的低位字。
  6. 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與鍵盤輸入沒有任何關係。