【问题标题】:Controlling Firefox from C++从 C++ 控制 Firefox
【发布时间】:2014-06-22 06:26:43
【问题描述】:

我在 Windows 7 上运行 Mozilla Firefox,并希望能够从 C++ 程序向其发送简单命令(新选项卡、最小化、关闭选项卡)。

当两个进程是同一个用户程序的一部分时,进程间通信的常见问题似乎由Boost.Interprocess 回答。

但是实际控制一个完全独立的应用程序 (Mozilla) 的 GUI 窗口呢?

【问题讨论】:

  • 实际上,使用 IE 会容易得多。
  • @chris,我猜是这样,是操作系统的一个集成部分。但是,我不打算离开 Mozilla。事实上,与操作系统无关的解决方案将是最好的解决方案。
  • 非常感谢@LukePeterson 的精彩编辑。

标签: c++ windows interprocess


【解决方案1】:

您可以使用 Spy++ 调试每个操作将产生哪些消息,然后在您的程序中复制这些 messages

【讨论】:

  • 新标签之类的东西很随意不发这样的消息。
【解决方案2】:

【讨论】:

  • 看来我需要购买该产品。作为一个爱好项目,我舍不得花钱。
【解决方案3】:

通过用户界面控制任何 Windows 程序的一般方法是向其发送 Windows 消息。还有一些相当具体的 Windows API 允许您将特定类型的输入直接发送到键盘、鼠标或其他输入设备。

假设要求简单,您应该能够通过向 Firefox 发送消息 WM_[SYS]KEY[DOWN|UP]、WM_[L|R]BUTTON[DOWN|UP] 或类似消息的某种组合来控制 Firefox。您可能还需要使用 FindWindow 和其他工具来查找发送消息的位置。并且大量使用 Spy++ 来确定要发送什么以及发送到哪里。

实际上,我会从 AutoHotKey 开始。它可以做所有这些事情,然后做一些事情,它有一个庞大的社区。它是 GPL,因此您可以了解它是如何工作的,并且有人在那里寻求帮助。

【讨论】:

  • 其实一般的答案是使用 UI 自动化。
  • 可能是,如果这是一个 C# 问题。我不认为 OP 打算编写托管 C++。
  • 有(令人困惑的)两件事都称为 UI 自动化。有一个称为 UI 自动化的核心 OS 功能,它是基于 COM 的(因此可以从 C++ 调用)。还有一个围绕 UI 自动化的 C# 包装器,也称为 UI 自动化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2014-05-09
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多