模拟输入:按下,按住并释放按键

时间:2015-11-19 00:55:04

标签: 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");
}

1 个答案:

答案 0 :(得分:1)

如果您希望接收程序在某段时间后只看到关键事件后跟一个关键事件,则需要使用与SendKeys不同的API。那个只发送整个击键,即按键和键盘。您可以通过调用本机Windows SendInput()函数来执行您想要的操作。

我没有使用它,但您可能会发现Windows Input Simulator是您需要的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() { ... }


以下是Stack Overflow的一些相关问题:
Send keys to WPF Browser control
C# p/Invoke How to simulate a keyPRESS event using SendInput for DirectX games

既没有专门解决您的问题,也包括对SendInput()用法的一些讨论。