2014-09-01 63 views
1

我目前正在建立一個c#應用程序,它使用keybd_event將鍵擊發送給其他應用程序。然而,它並不像我預期的那樣工作。keybd_event功能保留鍵問題

我按下和釋放的方法是這樣的:

public void PressKey(string key) 
{ 
    var keyCode = Keycodes.StringToInt(key); 
    keybd_event((byte)keyCode, 0, 0x0001 | 0, 0); 
} 

public void ReleaseKey(string key) 
{ 
    var keyCode = Keycodes.StringToInt(key); 
    keybd_event((byte)keyCode, 0, 0x0001 | 0x0002, 0); 
} 

他們適當只要鍵入一個字母到另一個應用程序的工作。但是,當我嘗試持有鑰匙時,會發生奇怪的行爲。

例如,如果我寫:

PressKey("LeftShift"); 

我得到預期的結果。隨着應用程序的運行,移位一直處於按下狀態。

然而,當我試試這個:

PressKey("W"); 

我希望看到的輸入「W」的無限量。但是,我只能得到一個「W」。

所以我的問題在於,爲什麼keybd_event不把所有的按鈕都對待呢?或者我在我的方法中缺少某些東西?

+0

您正在發送按鍵以接受重複字符的應用程序?我的意思是,如果在應用程序處於活動狀態時按住「w」鍵,是否重複鍵? – ForeverZer0 2014-09-01 18:31:19

+0

是的,它確實重複。 – 2014-09-01 18:54:43

+0

按住鍵時看到的重複是由鍵盤控制器產生的。鍵盤內置一個小型微處理器。當你用軟件戳鑰匙時,你不再有一個,現在就由你來做。只需使用計時器即可完成。 – 2014-09-01 18:56:31

回答

0

在這個特定的項目中,我結束了使用第三方庫InputManager,它按預期工作。