C# 在指定的时间内模拟按键保持

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

我目前正在尝试模拟按住一个键一段特定的时间。代码在自己的线程中运行,因此不会中断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.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);