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不把所有的按鈕都對待呢?或者我在我的方法中缺少某些東西?
您正在發送按鍵以接受重複字符的應用程序?我的意思是,如果在應用程序處於活動狀態時按住「w」鍵,是否重複鍵? – ForeverZer0 2014-09-01 18:31:19
是的,它確實重複。 – 2014-09-01 18:54:43
按住鍵時看到的重複是由鍵盤控制器產生的。鍵盤內置一個小型微處理器。當你用軟件戳鑰匙時,你不再有一個,現在就由你來做。只需使用計時器即可完成。 – 2014-09-01 18:56:31