2014-09-01 58 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,它按预期工作。