2011-06-27 26 views
1

我已經看到像20個問題(這裏@ stackOverflow)但由於某種原因,我沒有得到他們接近的大部分答案。其他人說他們理解,但我沒有看到任何工作代碼在我的情況。PostMessage中lParam(低/高鍵)的工作值是什麼? (Win Functions)

我嘗試發送鍵遊戲(前臺窗口)有點像一個宏,我見過怎麼lParam的在:PostMessage的(處理,WM_KEYDOWN,(UINT)鍵,0) ;實際上有所不同;根據網絡中的人(他們說,但不顯示代碼/示例)。第一次使用贏得功能,所以我有點失落如何使它與一些遊戲工作;讓我們說「傳奇聯盟」,或者「Team Fortress 2」。

我得到它是一個額外的參數發送作爲解釋消息的方式。但是我如何使它與大多數遊戲一起工作?每款遊戲的工作方式都不同

在此先感謝,併爲我的贏得功能noobie主義感到遺憾。

真誠,

阿曼多·萊昂

+1

請仔細閱讀本,然後再繼續人:http://blogs.msdn.com/b/oldnewthing/archive /2005/05/30/423202.aspx –

+1

PostMessage無法正常工作,無法控制鍵盤的狀態(Shift,Alt,Ctrl鍵)。使用SendInput()代替。 –

回答

1

你最好的賭注是documentation for WM_KEYDOWN

+0

感謝您的文檔(+1),但即使我將lParam作爲0,即使它們會將它發送到聊天框,它也不適用於遊戲。這是什麼原因?應該是lParam的問題嗎? O遊戲阻止外部應用程序的任何交互? – Armando

1

對於按鍵,您可以在此鏈接看到lParam包含的內容:http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx。如果你簡單地傳遞wParam和lParam爲0,它可能適用於僅使用虛擬鍵碼(包含在wParam中)的遊戲,但不適用於使用掃描碼(使用lParam傳遞)的遊戲。

你可以做的是編寫一個實用程序,打印出關鍵的wParam和lParam(以及你想發送給遊戲的任何其他事件(wm_char,wm_keyup等))。然後你可以使用它來獲得你想要的任何組合的wParam和lParam,然後如果你將它傳遞給任何遊戲,它應該工作。傳遞所有正確的值只是確保它在所有情況下都能正常工作的方法。

1

您不能用PostMessage()虛假輸入。相反,您需要使用SendInput()

0

我知道這是一箇舊線程,但我不能讓別人說「你不能用PostMessage()僞造輸入」。 當我們搜索「如何更改lparam postmessage」時,此線程顯示在谷歌上。假設我需要將一個Enter鍵發送給另一個程序:我將使用Spy ++並按鍵上的物理鍵,我需要檢查我需要的常量以及我需要的lParam值是什麼。 (對於constand你也可以在這裏查詢http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
檢查keydown,而不是keyup。

所以,如果我需要一個有cRepeat Enter鍵:1掃描碼:29 fExtended:0 AltDown:0 fRepeat:0 FUP:0,

我不得不改變的lParam的32位,我有在這裏瞭解陣列http://msdn.microsoft.com/en-us/library/ms646280%28v=vs.85%29.aspx

位是這樣的:31 ....(陣列中0〜15位等)0000 0000 0000 0001

我需要29(在六),用於掃描碼,從而:3 2 1 0

我需要1 cRepeat所以0010 1001(位16到23)

剩下的就是在零

我現在只是重新組合LPARAM(二進制)我需要:0010 1001 0000 0000 0000 0001

而且我把它轉換爲十六進制:290001

因此,現在在我的程序中,如果我使用: PostMessage(hWnd,WM_KEYDOWN,VK_RETURN,0x290001);

我希望它會幫助誰到這裏來,像我一樣:)

勒布,

相關問題