【问题标题】:My app won't recognize keystrokes sent from SendKeys or SendInput, but does from the Keyboard我的应用无法识别从 SendKeys 或 SendInput 发送的击键,但可以识别来自键盘的击键
【发布时间】:2011-11-14 04:47:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不知道这是否能解决你的问题,但我从来没有失败过:AutoIt
  • @Marco。谢谢你的建议。明天我们实际上将尝试使用 AutoHotKey,尽管我真的希望我能找出问题所在。
  • 您使用的是 Vista 吗? “SendKeys 类已针对 .NET Framework 3.0 进行了更新,以使其能够在 Windows Vista 上运行的应用程序中使用。Windows Vista 增强的安全性(称为用户帐户控制或 UAC)阻止了以前的实现按预期工作。“
  • 它是 WinXP,我们使用的是 .NET 3.5。同样,我们可以控制机器上的其他应用程序,但不能控制这个。

标签: c# keyboard sendkeys sendinput


【解决方案1】:

问题不在于 SendKeys。

我尝试了 SendKeys.Send、SendKeys.SendWait、SendInput 和 keybd_event。

我后来意识到从激活应用程序到发送击键的时间太短了。我正在等待 200 毫秒,但只需将其增加到 500 毫秒,我就解决了我的问题。

由于嵌入式视频播放器,该应用程序需要很长时间才能绘制。再给它 300 毫秒,让它为我发送的击键做好准备。

【讨论】:

  • FWIW,你还有一个竞争条件。
  • 同意。它将帮助我们完成 12 小时后开始的贸易展,但最终我们将集成到应用程序本身中。
  • 使用 Process.WaitForInputIdle()
猜你喜欢
  • 2021-05-11
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
相关资源
最近更新 更多