模拟输入:按键按下、保持和释放

New*_*ieS 5 c# keypress sendkeys

我试图模拟用户按下一个键,按住它某个特定的时间间隔,然后释放它。我曾尝试使用 来实现这一点SendKeys.Send(),但我无法弄清楚如何控制按键被按下的持续时间。

我不想一遍又一遍地发送相同的密钥;我想要一个按键按下和一个按键按下事件。

例如,我有这样的代码:

//when i press this button, will sent keyboard key "A", i want to hold it until i release

private void start_btn_Click(object sender, EventArgs e)
{
    testSent();
}

//how should i hold it for a timer???
private void testSent()
{
    SendKeys.Send("A");
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*iho 2

如果您希望接收程序仅看到按键按下事件,然后在一段时间后看到按键按下事件,则您将需要一个与SendKeys. 那个只发送整个击键,即按下键和松开键。您也许可以通过 p/调用本机 WindowsSendInput()函数来执行您想要的操作。

我没有使用过它,但您可能会发现Windows 输入模拟器是您所需 API 的有用托管代码包装器。

假设您弄清楚如何结束适当的关键事件,那么定时执行它是微不足道的:

private static readonly TimeSpan _keyDownInterval = ...; // initialize as desired

private async void start_btn_Click(object sender, EventArgs e)
{
    SendKeyDown();
    await Task.Delay(_keyDownInterval);
    SendKeyUp();
}

// These two are implemented using whatever mechanism you prefer,
// e.g. p/invoke `SendInput()`, using the Windows Input Simulator library, or whatever.
private void SendKeyDown() { ... }
private void SendKeyUp() { ... }
Run Code Online (Sandbox Code Playgroud)


以下是 Stack Overflow 上的一些相关问题:
将密钥发送到 WPF 浏览器控件
C# p/Invoke 如何使用 SendInput for DirectX 游戏模拟 keyPRESS 事件

两者都没有具体解决您的问题,但它们都包含一些关于SendInput().