【问题标题】:Simulating input: key pressed, hold and release模拟输入:按键,按住和释放
【发布时间】:2016-02-20 23:26:39
【问题描述】:

我正在尝试模拟用户按下某个键,按住某个特定时间间隔,然后释放它。我尝试使用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");
}

标签: c# keypress sendkeys


【解决方案1】:

如果您希望接收程序在一段时间后只看到按键按下事件,然后是按键按下事件,您将需要与SendKeys 不同的 API。那个只发送整个击键,即按下和按下键。您可以通过 p/调用本机 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() 用法的讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2010-12-19
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多