模拟特殊键按下键盘事件

时间:2016-11-10 20:19:31

标签: c#

我正在使用keybd_event函数,我遇到了模拟某些键的问题。目前,问题是CONTROL按钮。

以下是我用于模拟按键事件和按键事件的一些代码:

switch (record.keyMsg)
{
    //Key down event
    case "WM_KEYDOWN":
        keybd_event((byte)record.keyCode, 0, KEYEVENTF_KEYDOWN, 0);
        Debug.WriteLine("Key down.");
        break;
    //Key up event
    case "WM_KEYUP":
        keybd_event((byte)record.keyCode, 0, KEYEVENTF_KEYUP, 0);
        Debug.WriteLine("Key up.");
        break;
}

现在,当程序模拟CONTROL按钮时,按钮似乎“卡住”了。我访问了这个网站:http://javascript.info/tutorial/keyboard-events,看看到底发生了什么样的事件。

当我通常按下该网站上事件观察者的CONTROL按钮时,这是输出:

keydown    keyCode=17    which=17    charCode=0    char= +ctrl
keyup      keyCode=17    which=17    charCode=0    char=

但是当我的代码模拟CONTROL按钮时,这是输出:

keydown    keyCode=17    which=17    charCode=0    char= +ctrl
keyup      keyCode=17    which=17    charCode=0    char= +ctrl

此外,SHIFT键也会出现同样的问题。使用前面提到的相同站点,当我手动键入SHIFT键时,这是输出:

keydown    keyCode=16    which=16    charCode=0    char= +shift
keyup      keyCode=16    which=16    charCode=0    char=

然而,当程序模拟这个时,这是输出:

keydown    keyCode=16    which=16    charCode=0    char= +shift

此时甚至没有执行keyup事件。

有谁知道如何解决这个问题?我认为密钥“卡住”的罪魁祸首是keyup事件,但我不知道我应该如何解决这个问题。任何人都有任何提示或线索?

编辑:详细说明我所说的“卡住:当代码模拟CONTROL按钮,然后我尝试将内容输入记事本时,计算机认为CONTROL键仍然存在当我输入s时,它会提示保存在记事本等中。为了解决这个问题,我只需按左ctrl和右ctrl来解决这个问题。

0 个答案:

没有答案