2013-04-24 94 views
1

所以我有這個遊戲,叫做AirMech。它不會將鼠標按鈕識別爲控件(尚未),所以我嘗試使用AutoHotkey規避它,直到它實現爲止。發送命令,AutoHotkey沒有錯?

#IfWinActive, AirMech 
    XButton1::Send c 

沒有工作。所以我試過SendGameSendPlay和其他一切,都沒有工作。我搜索了它,發現有些遊戲根本不能識別任何發送命令。

放棄之前,我只是想一個簡單的映射:

#IfWinActive, AirMech 
    XButton1::c 

它實際工作。

是否預期發送命令有效,但後者是否有效?如果我想觸發其他操作(例如,'c'和一個MsgBox)?

+1

感謝您展示另一種避免遊戲中發送問題的方法。這不會解決大多數問題,因爲它們會在中間暫停一系列指令並且必須使用發送(播放)。 – 2013-04-25 05:03:19

回答

1

AutoHotkey能夠以各種不同的方式發送擊鍵(SendRaw/SendInput/SendPlay/SendEvent)。我不太確定簡單的 :: 映射的用途,但它必須是其中之一。我的猜測是SendRaw,SendInput,SendPlay或SendEvent中的一個將與密鑰 :: 密鑰一樣工作。

另外#IfWinActive有時不能像你期望的那樣工作,尤其是在全屏遊戲中。所以我通常在沒有#IfWinActive的情況下測試我的AHK腳本以確保它們正常工作。一旦它起作用,我會引入條件。


UPDATE

http://www.autohotkey.com/docs/misc/Remap.htm

當腳本被啓動,每個重映射被轉換爲對 熱鍵。例如,包含一個腳本:: B實際上包含 以下兩個快捷鍵來代替:

*a:: 
SetKeyDelay -1 ; If the destination key is a mouse button, SetMouseDelay is used instead. 
Send {Blind}{b DownTemp} ; DownTemp is like Down except that other Send commands in the script won't assume "b" should stay down during their Send. 
return 

*a up:: 
SetKeyDelay -1 ; See note below for why press-duration is not specified with either of these SetKeyDelays. If the destination key is a mouse button, SetMouseDelay is used instead. 
Send {Blind}{b Up} 
return 

我的筆記:

我懷疑a::b是工作,但a::Send b的原因不是因爲a :: b如何分解按鈕,並將處理程序按鈕分成兩個單獨的映射。遊戲的gameloop可能會輪詢「keydown」狀態的遊戲鍵,如果AHK正在合成重複節點,則不會始終保持這種狀態。重新映射a_down-> b_down和a_up-> b_up可能使得AHK更精確地模擬按下按鍵的動作,這對於以特定方式測試按鍵狀態的程序(GetAsyncKeyState?)可能很重要。

映射中的星號表示「即使多餘的修飾符被按下,也會觸發熱鍵」。

+0

按照你的建議,我只是給了它所有五個發送命令的嘗試,並沒有任何'#IfWinActive',只是爲了確保。無濟於事:顯然,沒有一個與key :: key完全相同。也許是一個關鍵的延遲事件(編輯:根據上面的@RobertIlbrink,它發送暫停之間,所以必須解釋爲什麼) – Jeto 2013-04-25 06:51:08

+0

請參閱http://www.autohotkey.com/docs/misc/Remap.htm - 我粘貼了一個有趣的從該頁面引用我的答案。基本上a :: b被翻譯成兩個單獨的詳細映射。整個頁面可能會是一個有趣的閱讀。 – 2013-04-25 16:41:48