问题标签 [sendinput]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7028 浏览

delphi - 如何在 Delphi 中使用 SendInput?

Mouse_Event在 Delphi 2009 中使用了该函数,但 Delphi 文档说该函数已被取代并改为使用SendInput

DelphiSendInput文档定义了语法和参数,但没有示例,也不清楚如何使用该函数。我在网上环顾四周,找不到任何好的 Delphi 示例。

具体来说,我正在尝试先向下然后向上模拟鼠标左键。目前我这样做Mouse_Event如下:

我将如何使用SendInput


跟进:

我最终按照@David 的建议保留了我的代码。

但我给了@opc0de 答案,因为他确实回答了我的问题。但是,我不能保证它是正确的,因为我从未尝试过。

0 投票
4 回答
14971 浏览

c# - C# InputSimulator 包装器 - 如何使用它?

我想模拟外部程序的键盘点击。我尝试过 SendMessage、PostMessage、SendKeys,但它们不会将密钥发送到一个特定的程序。所以我想尝试 SendInput 并且我已经为SendInput下载了一个很好的包装器- http://inputsimulator.codeplex.com/

我已将程序集添加到我的项目中,但我还不能开始使用任何功能...

我必须做什么?我应该添加什么“使用”?

0 投票
3 回答
4311 浏览

.net - SendInput 和 64 位

下面是我用来通过 SendInput API 模拟按键的一些代码的摘录。如果我将应用程序设置为针对 x86 CPU 进行编译,这可以正常工作,但不适用于 x64 CPU 编译。

我猜这与 x64 使用双倍大小指针这一事实有关,但我试图将其更改为此[FieldOffset(4)][FieldOffset(8)]没有奏效。

这可能与它正在导入 32 位版本的 user32.dll 的事实有关吗?

0 投票
1 回答
769 浏览

macos - 如何将 unicode 字符发送到活动应用程序?

我需要 Windows API 中的 SendInput 之类的东西。

看到这个方法,不知道有没有把unicode字符转换成虚拟键码的方法。

0 投票
2 回答
4249 浏览

c# - 将密钥“MediaPlayPause”发送到应用程序而不设置焦点

我正在创建一个程序,它将媒体键输入(例如MediaPlayPauseMediaNextTrack等)发送到我拥有的应用程序IntPtr。有点像虚拟遥控器。

所以在研究之后我发现了这个,它几乎告诉我如何解决我的问题。

但是,链接中提到的方法存在三个问题。

  1. 我无法将应用程序设置为前台窗口,因为我需要让我的应用程序获得焦点。
  2. 他们使用需要聚焦目标窗口的SendKeys函数,这与问题 1 背道而驰。
  3. 据我所知,SendKeys无法发送键盘按钮,例如键盘播放/暂停按钮。

最后,我对必须使用什么(SendInput?,SendMessage?)感到困惑。

任何帮助,将不胜感激。


编辑

使用我收到的答案,我将下面的示例代码组合在一起。
理论上,它应该找到记事本并将字母“L”插入其中。

但是,记事本上什么也没有,应用程序也没有崩溃。我遗漏了一个明显的错误吗?

0 投票
1 回答
1379 浏览

c# - 我的应用无法识别从 SendKeys 或 SendInput 发送的击键,但可以识别来自键盘的击键

我有一个本地开发的应用程序(Master),它定义了一堆热键。我需要使用另一个外部应用程序(控制)使应用程序自动化。我无法重建 Master 应用程序,它运行,已经安装并且不能被弄乱。

如果我使用键盘,在 Master 上使用热键就像是一种魅力。

所以,我想我可以使用 SendKeys.SendWait 或 SendKeys.Send 来发送命令。虽然我的代码适用于其他应用程序(例如记事本),但它不适用于我的自定义应用程序 Master。这可能有多种原因 - Master 年龄较大,混合了 .NET、C++...一些低级视频控件...谁知道幕后的内容。

我需要得到更高层次的东西。我需要能够发送击键,就好像它们来自键盘本身一样。我不希望计算机能够区分发送按键的物理键盘和发送按键的应用程序。

我可以使用什么,它会有什么不同?

0 投票
2 回答
899 浏览

delphi - 无法使用 SendInput(Edit1.Text) 复制俄语(西里尔文或 Unicode)符号

如何添加 Unicode?关于如何使用复制俄语(西里尔语)符号的任何建议SendInput(Edit1.Text);

0 投票
1 回答
462 浏览

c++ - 你能解释一下 C++ 函数的每一行都在做什么吗?它发送击键,但我对如何

我正在编写一个程序来将击键发送到另一个窗口,并且一切正常,但我必须上网并找到一个函数来完成击键部分本身。它有效,但我不知道它实际上在做什么。有人可以评论这个函数的每一行来解释它在做什么吗?

这是一个调用它的例子:

这会发送击键“c”。

此功能仅适用于大写字母,并且似乎仅适用于特定的十六进制代码。例如,要发送回车(回车键),调用如下:

但是,如果我尝试使用其中任何一个调用发送问号(十六进制 0x3F),则不会发生任何事情:

谁能明白为什么这些不起作用?

另外,有人可以解释第二个参数 BOOL bExtended 的用途吗?在 TRUE 和 FALSE 之间切换似乎对其发送的击键没有影响。

0 投票
2 回答
1199 浏览

c# - 击键模拟失败,Windows 桌面被锁定

我有一个使用Windows Input Simulator的应用程序。我用它来模拟父应用程序的 Ctrl-S 击键。当 Windows 桌面被锁定时,会引发异常

例外: CONTROL 的按键按下模拟不成功。在 WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode keyCode) 在 WindowsInput.InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode modifierKeyCode, VirtualKeyCode keyCode)

这是我的代码:

有任何想法吗?

0 投票
1 回答
361 浏览

winapi - Windows API 无法为某些应用程序(即 Mozilla Firefox)创建“输入消息”/事件

我试图在 Windows 7 环境中模拟用户点击和鼠标移动,特别是在 Mozilla Firefox 中。我从各种教程、论坛帖子和 MSDN 文档中共同提出的解决方案适用于 99% 的 Windows 应用程序,但不适用于 Firefox 8.0。

根据我的初步研究,在 Windows 中模拟键盘和鼠标输入的最准确(低级)方法是使用 User32.dll Windows 库中的SendInput 函数。为了测试这一点,我编写了一个简短的 C# 程序来循环并调用 SendInput,它每 5 秒创建一次编程鼠标单击,无论鼠标光标在屏幕上的哪个位置。

运行后,该程序几乎可以完美模拟我将焦点切换到的每个应用程序窗口的鼠标单击,甚至包括 Windows 界面本身(开始按钮、任务栏、Windows 资源管理器等),但是当我带上光标时不会发生编程鼠标单击进入 Mozilla Firefox 窗口。

为了更好地了解幕后发生的事情,我启动了 Microsoft Spy++ 并开始检查哪些消息实际上被传递到了 Firefox 窗口的消息队列。果然,Firefox 窗口不会收到任何消息,即使我的光标在它有焦点时会位于它的正上方。当我手动单击鼠标时,Firefox Spy++ 侦听器会发疯并显示我在观察其他应用程序对我的仿真程序的正确响应时看到的完整“nHittest:HTCLIENT wMouseMsg:WM_LBUTTONDOWN”。

谁能解释一下 Mozilla Firefox 是如何/为什么是唯一一个根本不从 SendInput 函数接收任何消息的应用程序之一,或许还有关于如何克服这个问题的建议?

源代码 (为清楚起见删除了导入/外部引用):