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