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

2024-02-10

我试图模拟用户按下某个键,按住某个键一段特定的时间间隔,然后释放它。我尝试使用来实现这个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(使用前将#替换为@)

模拟输入:按键按下、按住和释放 的相关文章

随机推荐

  • 从主线程终止辅助线程(可可)

    我正在 cocoa 框架的帮助下开发一个用 Objective C 编写的小型应用程序 但遇到了多线程问题 如果有人可以帮助我提供一些关于如何从主线程终止辅助 工作 线程的指导 我将非常感激 IBAction startWorking id
  • Discord js / 检查用户是否在特定语音频道中

    我希望我的机器人使用 const voiceChannel message member voice channel const voiceChannelID message member voice channelID if voiceC
  • 列出从文件输入中选择的文件

    我想列出从文件输入中选择的文件 div class fileUpload myButton span Upload span div
  • VS2012 nmake 使用 v110_xp 工具集?

    有没有办法使用v110 xp使用 nmake 编译时的工具集 而不是默认的 v110 我正在尝试为 VisualStudio2012 编译 Qt5 库 并且我也需要它在 Windows XP 计算机上工作 我已经成功地使用 VS2012 和
  • 调用函数而不等待它

    你好 我想知道是否有一种方法可以调用函数 方法 最好是Python或Java 并继续执行而不等待它 Example def a b call a function b return something def b something tha
  • 在运行时替换 QWidget 对象

    在我的应用程序中 我必须用自定义的 QLineEdit 替换所有 QLineEdit 元素 为此 有不同的解决方案 修改从 pyuic4 生成的 py 文件 并将所有 QLineEdit 对象替换为我的一个 LineEdit 这个解决方案并
  • Google Spreadsheet API v4 使用“ApiKey”在电子表格中“添加行”

    我正在尝试使用 Google Spreadsheet API v4 直接使用 ApiKey 在电子表格中 添加行 而不使用 OAuth 2 0 如果我使用 OAuth 2 0 它成功 添加行 但我的要求是使用 ApiKey 参考了这个网址
  • django-auth-ldap 身份验证失败

    我正在尝试使用Django Auth Ldap https pythonhosted org django auth ldap 在我的项目 Django 1 6 Python 2 7 中 但它不起作用 我的活动目录模式是 我已经通过安装 l
  • 将 Catalyst 应用程序部署到生产服务器的最佳实践是什么?

    将 Catalyst 应用程序部署到生产服务器的好方法是什么 目前 我只是在存储库的根目录中有一个 FastCGI 调度脚本 当我想要更新服务器代码时 我将分支推送到服务器 这很简单 但并不完美 如果代码在服务器计算机上的测试失败 例如由于
  • 在 cookie 中设置 Django REST Framework JWT

    我在用djangorestframework jwt https github com GetBlimp django rest framework jwt对用户进行身份验证 我已经覆盖了内置的JSONWebTokenAPIView也在响应
  • 如何使用数据表和服务器端处理进行自定义过滤

    我在用数据表 http datatables net在我的 Web 应用程序中显示表格数据 并将其配置为使用服务器端处理 http datatables net usage server side 即通过 AJAX 查询服务器以获取过滤后的
  • 如果 .Create() 无法实例化,它应该返回空对象、null 还是抛出异常?

    我希望能够使用这种代码实例化应用程序中的任何对象 SmartForm smartForm SmartForm Create id 23 Customer customer Customer Create id 222 我现在正在讨论如果该对
  • 如何让 tcpdump 写入文件并标准输出适当的数据? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我希望有tcpdump将原始数据包数据写入文件中 并在捕获数据包时将数据包分析显示到标准输出中 通过分析 我的意思是它通常显示的行 w
  • 如何消除特定页面的顺风预战

    里面有一个选项tailwind config cjs关闭预检 但我不想在整个项目中关闭它们 我需要为某些特定页面启用它们 有没有办法做到这一点 关闭预检 tailwind config cjs corePlugins preflight f
  • Pymongo $in 查询不起作用

    在 Pymongo 中看到一些奇怪的行为 in询问 查找满足以下查询的记录 speciesCollection find SPCOMNAME in paddlefish lake sturgeon 查询没有返回任何记录 如果我将其更改为 f
  • 如何使用javascript在IE中的表单中设置文本区域值

    如果是 Firefox 我可以使用它在表单 提交问题 中设置文本区域 selectedtext 值 但在 IE 中失败 document submitquestion selectedtext value txt 这应该有效
  • 通过 Excel 的 eDrawings API

    我正在尝试通过 Excel 使用 edrawings VBA api 我已经下载了 edrawings SDK 似乎 api 仅通过用户表单运行 我通过 Excel 为 SolidWorks 制作了一些 VBA 宏 但与 SolidWork
  • AWS S3 存储桶“404 未找到”

    目前我正在托管一个捆绑包Angular 2应用程序在AWS S3 bucket 所以它只包含 html and js files 绝对路径http example com 确实有效 但如果我切换到任何链接 例如http example co
  • 无法关闭 TCP_NODELAY

    我正在使用 Boost asio 发送 TCP 消息 我设置了 NO DELAY 选项 因为这是一个 实时 控制系统 我看到使用 Wireshark 在消息中设置了 PSH 标志 我对它的表现很满意 它正在按预期工作 出于兴趣 我决定关闭
  • 模拟输入:按键按下、按住和释放

    我试图模拟用户按下某个键 按住某个键一段特定的时间间隔 然后释放它 我尝试使用来实现这个SendKeys Send 但我不知道如何控制按键的持续时间 我不想一遍又一遍地发送相同的密钥 我想要一个按键按下和一个按键弹起事件 例如 我有这样的代