我正在使用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来解决这个问题。