C# 在指定的时间内模拟按键保持
我目前正在尝试模拟按住一个键一段特定的时间。代码在自己的线程中运行,因此不会中断UI。但是C# 在指定的时间内模拟按键保持,c#,.net,wpf,C#,.net,Wpf,我目前正在尝试模拟按住一个键一段特定的时间。代码在自己的线程中运行,因此不会中断UI。但是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.T
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);
这应该模拟按住键,但它所做的只是按下键,睡眠(它什么都不做),然后释放它。如果您想在指定的毫秒数内重复发送按键下击,这可能会起作用,但是你不知道它被按下了多少次——你只知道它被按下的持续时间是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();
}
}
我打算把我的程序作为一个游戏的宏。不管这个键被画了多少次,我只需要不断按下这个键,否则我可能会在服务器上被静音(甚至被踢)。是否发送了很多按键事件,如按住按键?或者如果它被反复触发,它真的会发送一个keyup事件吗?我刚刚尝试了你的方法,但它不起作用。它在代码中循环,但其行为与
Sleep
函数相同。奇怪…哦,对不起,我犯了一个错误,似乎起作用了。不过,我希望这能算作是比赛中的一次暂停。谢谢你的帮助这是什么游戏?我只是想知道他们为什么不阻止模拟输入Hitomi,你能用吗?我正试着做同样的事情。我需要在鼠标左键单击时模拟按住控件。我无法计算CTRL键
DoFor(new Action(() =>
{
keybd_event(VK_W, 0, KEYEVENTF_EXTENDEDKEY, 0);
}), 2000);
DoFor(new Action(() =>
{
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0);
}), 50);