【问题标题】:Controlling different apps (Adobe Reader,Word,Windows Media Player,Powerpoint,etc) from C++ code从 C++ 代码控制不同的应用程序(Adobe Reader、Word、Windows Media Player、Powerpoint 等)
【发布时间】:2011-10-13 10:38:09
【问题描述】:

我即将完成我的最终学位项目。我正在创建一个系统,它从 Microsoft Kinect 读取手势,然后执行一些操作。所以现在我想包括一些与一些著名应用程序的交互。

例如,我想“告诉”Adobe Reader(具有焦点)转到下一页或“告诉”Windows Media Player 停止播放音乐。

最好的方法是什么? 我试图向应用程序的窗口处理程序发送击键,但它不起作用。然后我意识到在一个窗口处理程序中还有其他几个窗口处理程序,但我无法访问它们。

提前致谢!

【问题讨论】:

  • 既然应用程序有焦点,为什么不模拟击键呢? MEDIA_PLAY、MEDIA_PAUSE、KEY_UP 和 DOWN 之类的?
  • @RedX:这些键只会在媒体播放器的上下文中有所帮助,我认为 OP 想要一个更通用的解决方案。
  • @Chris,我的意思是 ARROW_UP 和 DOWN 作为最后两个。例如,它们可用于滚动文档。
  • @RedX:很公平。请参阅我的回答,了解为什么该解决方案不是那么理想。
  • @Chris 我在第一次发表评论之前确实阅读了您的帖子。模拟输入是恕我直言的最佳选择。我只是根据重点应用程序定义手势。媒体播放器上的闭合拳头之类的东西会停止,并在对话框按钮(或任何其他窗口)上输入。您可以像现在许多远程控制应用程序一样使用配置文件。

标签: c++ controls send signals


【解决方案1】:

对于这样的问题,通常只有几个“可接受”的解决方案:

模拟用户输入

以编程方式发送击键和鼠标点击

  • 优点:与您能想到的大多数 GUI 程序兼容
  • 缺点:Kludgy,不擅长处理任何类型的意外行为(即错误对话框)。必须提前知道您希望与哪些窗口进行通信。对话框从一个版本更改为下一个版本,因此您的程序经常停止使用新版本。

程序 API

使用程序本身理解的调用(播放、停止等)直接与程序通信。

  • 优点:与模拟输入相比,编程体验更轻松、更清晰、错误更少
  • 缺点:很少有应用程序真正公开 API。对于那些这样做的人,您仅限于 API 支持的功能(可能不包括程序能够提供的所有功能)。

脚本

某些程序允许使用脚本语言(例如 VBScript)

  • 优点:与 API 相同的优点
  • 缺点:必须以某种方式以编程方式让程序打开脚本,这可能会也可能不会容易,具体取决于程序。

至于那些节目,我不能具体评论。我不知道他们是否公开了任何类型的 API。我想其中一些可能(例如媒体播放器,我认为其中有一些)。不要引用我的话。我希望这会有所帮助。

【讨论】:

  • 谢谢克里斯!我想为一些最著名的应用程序(如 Windows Media Player、PowerPoint 和 Adob​​e Reader)找到第二个解决方案 (API),但我找不到它们。在模拟用户输入时,这是我第一次尝试,但它实际上比我最初想象的要复杂。现在我正在考虑如何将热键发送到窗口。有人有线索吗?谢谢:)
【解决方案2】:

查看自动热键

http://www.autohotkey.com/

它是一个工具,您可以创建控制鼠标/键盘的脚本。

建议将手势链接到自动热键脚本。这样,您的程序可以非常可配置,并且您可以非常轻松地测试脚本。

【讨论】:

    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2010-10-17
    • 2014-06-05
    相关资源
    最近更新 更多