2012-12-27 70 views
0

我有一個非常基本的問題,對於一個遊戲(Dota 2)我想寫一個小宏來打開控制檯,寫入「setinfo name」......... .................「」,然後關閉它,控制檯熱鍵被設置爲「#」。爲此,我寫了一個偵聽被按下的鍵「F」的應用程序,然後發送如何將鑰匙發送到應用程序

1) '#' (open the console) 
2) "messag ebla bla b...." 
3) '#' (close the console) 

一切正常,只是它不會打開控制檯(但如果該控制檯已經打開,它會寫#messagej.j ....#當我按f想要的那樣)

我發送密鑰的代碼。

SendKeys.Send("#"); 
SendKeys.Send("my message for consol"); 
SendKeys.Send("#"); 

有人知道爲什麼熱鍵不工作通過發送密鑰?我認爲它是模擬用戶何時按下F或Q.

+0

關於問題標題中的標籤有一些爭議。目前我們覺得標籤不應該是標題的一部分。我編輯了你的標題。 – rene

+0

使用AutoHotKey代替 –

回答

0

首先您應該嘗試在按鍵之間添加「軟件」延遲。

string MSG = "#yourmessage#"; 
foreach (object c_loopVariable in MSG) { 
    c = c_loopVariable; 
    Sendkeys.Send(c); 
    sleep(20); 

} 

其他的事情要考慮 - 的SendKeys不會在硬件層模擬按鍵 - 這是在Windows API級別,和DirectX的DirectInput的,女巫大多數遊戲使用的用戶輸入處理進行水平進一步。所以你可能無法做到這一點。

您應該查看更多keybd_event。我用這個運氣好些 - 因爲我明白它比sendkeys更深層次。

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

不管怎麼說,我希望你不會在一個偉大的遊戲中使用了一段垃圾郵件! :)

+0

添加延遲不會改變任何內容。 'keybd_event'是如何實現SendKeys的。或者可能相當於'SendInput'。 –

+0

我試圖用autohotkeys sendinput方法發送輸入,它的工作原理,但我不可能將autohotkey嵌入到c#中...有人知道autohotkey用於輸入注入的方法嗎? –

+0

您可以使用C#中的AHK –

相關問題