【问题标题】:c# virtual keyboard p/ invoke shift wont "release" keyc#虚拟键盘p/invoke shift不会“释放”键
【发布时间】:2012-02-17 20:46:58
【问题描述】:

我当前的代码是:

[DllImport("user32.dll", SetLastError = true)] 
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);  

public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag 
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 
public const int VK_RMENU = 0xA5;

keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_Q, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_Q, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

我根据需要得到大写的 Q,但问题是,“Shift”粘住了。

之后的所有字母都是大写的。获得小写字母的唯一方法是更改​​为大写锁定。我该如何解决这个问题?

提前致谢

【问题讨论】:

  • 这些人从哪里得到使用keybd_event 函数编写新代码的想法?一段时间以来,首选的方法是使用SendInput function
  • 另外,谁告诉你KEYEVENTF_EXTENDEDKEY 是“关键标志”? the documentation 不是这么说的……
  • 谢谢。顺便说一句,我不得不使用 keybd_event 进行一些不寻常的韩语网页编码。它强制韩语输入,直到按下右 alt 键。它迫使我使用 keybd_event 来模拟那个按键

标签: c# pinvoke shift virtual-keyboard


【解决方案1】:

我相信 Cody Gray 为您解决了您的问题。只需将您的 P/Invoke 调用替换为:

keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_Q, 0, 0, 0);
keybd_event(VK_Q, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

【讨论】:

  • 我确实从 Cody Gray 的评论中弄清楚了。不过还是谢谢
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
相关资源
最近更新 更多