我试图模拟用户按下某个键,按住某个键一段特定的时间间隔,然后释放它。我尝试使用来实现这个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");
}
如果您希望接收程序仅看到按键按下事件,然后在一段时间后看到按键松开事件,则您将需要与以下不同的 APISendKeys
。那个只发送整个击键,即按下键和松开键。您可以通过 p/调用本机 Windows 来执行您想要的操作SendInput()
功能。
我没用过,但你可能会发现Windows 输入模拟器 https://inputsimulator.codeplex.com/是一个有用的托管代码包装器,可满足您所需的 API。
假设你弄清楚how要结束适当的关键事件,定时执行很简单:
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 上的一些相关问题:
将密钥发送到 WPF 浏览器控件 https://stackoverflow.com/q/1329481
C# p/Invoke 如何使用 DirectX 游戏的 SendInput 模拟 keyPRESS 事件 https://stackoverflow.com/q/17781021
两者都没有具体解决您的问题,但它们都包含一些关于使用的讨论SendInput()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)