我正在尝试模拟按住键一段时间。代码在自己的线程中运行,因此它不会中断UI。但是Sleep
函数仍然在中断保持序列。我实际上想要暂时使用Sleep
,必须按住键。有什么办法吗?
int delay = 2000;
keybd_event(VK_W, 0, KEYEVENTF_EXTENDEDKEY, 0);
System.Threading.Thread.Sleep(delay);
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0);
System.Threading.Thread.Sleep(50);
这应该模拟按住键W
,但它只是按下它,睡觉(它没有做任何事情),然后释放它。
答案 0 :(得分:-1)
如果你想重复发送按键笔划达到指定的毫秒数,这可能会有效,但你不知道实际被按下了多少次 - 你只知道它在2000年被按下了以某种未知离散率的毫秒数。
public void DoFor(Action action, int numMilliseconds)
{
DateTime start = DateTime.Now;
while (DateTime.Now.Subtract(start).TotalMilliseconds < numMilliseconds)
{
// Not sure - is this relevant on another thread?
Application.DoEvents();
// Not sure if this is relevant either since you're on another thread
Thread.Sleep(1);
// Do your action
action();
}
}
你可以这样称呼它:
DoFor(new Action(() =>
{
keybd_event(VK_W, 0, KEYEVENTF_EXTENDEDKEY, 0);
}), 2000);
DoFor(new Action(() =>
{
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0);
}), 50);