【发布时间】:2014-07-12 17:43:31
【问题描述】:
我正在使用 keybd_event 来模拟 C# 中的按键事件。在此示例中,我尝试发送 Windows+D 组合以返回桌面。 以下代码嵌入在按钮点击函数中:
Robot.PressKey(Keys.LWin);
Robot.PressKey(Keys.D);
Thread.Sleep(50);
Robot.ReleaseKey(Keys.D);
Robot.ReleaseKey(Keys.LWin);
Thread.Sleep(1000);
public void PressKey(Keys key)
{
keybd_event((byte)key, 0, 1, 0);
}
public void ReleaseKey(Keys key)
{
keybd_event((byte)key, 0, 1|2, 0);
}
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
我的期望:我返回桌面并等待 1 秒钟。 会发生什么:1 秒后我返回桌面。
如果我在 Thread.Sleep(1000) 之后继续执行更多函数调用,它将永远不会返回到桌面。 我究竟做错了什么?谢谢 ;)
编辑:我也尝试使用 SendInput (从http://damiproductions.darkbb.com/t504-c-sending-keys-with-the-sendinput-api 粘贴复制),同样的问题。我还用秒表和循环替换了 Thread.Sleep()。我最后一次尝试是在一个新线程中启动它。这对以太没有帮助。
【问题讨论】:
-
Never Sleep() 在事件中。
-
那么,有没有更好的方法让返回桌面后等待1秒呢?我试过带循环的秒表,但它对我没有任何改变
-
不,也不要循环(长时间)。你现在知道正确的问题,谷歌它。在这里被问了数百次。
标签: c# keyboard-hook