【发布时间】:2013-11-27 11:51:15
【问题描述】:
我需要模拟一些键,这里是代码:
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
private const int KEYEVENTF_EXTENDEDKEY = 1;
private const int KEYEVENTF_KEYUP = 2;
public static void KeyDown(Keys vKey)
{
keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
}
public static void KeyUp(Keys vKey)
{
keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
KeyboardSend.KeyDown(Keys.Z);
KeyboardSend.KeyUp(Keys.Z);
但在一个特定的应用程序中,“KeyUp”方法不起作用并且在我按下键盘上的键之前一直被按下。
我做错了什么?
【问题讨论】:
-
考虑在您的 KeyDown() 和 KeyUp() 调用之间放置一个小的 延迟:
System.Threading.Thread.Sleep(100); -
我已经试过了:(
-
你试过
SendKeys.SendWait("z");吗? ...你为什么在这里使用KEYEVENTF_EXTENDEDKEY? -
我需要按下键并在需要时将其向上。
-
Z 虽然不是扩展键。请参阅here:扩展键由键盘右侧的 ALT 和 CTRL 键组成; INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和数字键盘左侧集群中的箭头键;数字锁定键; BREAK (CTRL+PAUSE) 键;打印 SCRN 键;以及数字键盘中的除 (/) 和 ENTER 键。