【问题标题】:How to send keystrokes to an application in C++如何将击键发送到 C++ 中的应用程序
【发布时间】:2010-10-10 05:40:51
【问题描述】:

我正在尝试制作一个程序来使用 Adob​​e Acrobat Reader 打开 Acrobat 文件并将它们自动保存在文本文件中。 我希望我的程序做的是:

  • 打开pdf
  • 发送 Alt + Tab //移动到 acrobat 选项卡
  • 发送Alt + F //打开文件
  • send Down Down Down Down (4次) //选择'save as text'选项
  • 发送回车 //保存

我使用的是 Windows 操作系统。 有人可以帮我解决这个问题吗?

我的精细目标是自动将大约 2500 个 pdf 文件的标题和作者保存在数据库中,您建议的更好方法是什么?这就是我想出的。

【问题讨论】:

  • 有比打开 Acrobat Reader 更好(阅读:更快)的选项,您选择此解决方案有什么原因吗?
  • 我建议改用 OLE 自动化,从 VBScript 或 JScript 等脚本语言(它们与 Windows 捆绑)。或者,如果您要发送击键,但这是脆弱,那么从脚本语言来说也更容易。 Windows WScript 系列自动化对象在某处提供击键发送功能。是的,无论如何它涉及谷歌搜索或阅读文档。 :-) Adob​​e 的自动化 API 由 Adob​​e 记录,Windows 的 WScript 对象和朋友记录在 MSDN 库中。
  • 我同意其他人的说法,即这是一个坏主意。有更好的方法来做到这一点......
  • 我的目标是自动将大约 2500 个 pdf 文件的标题和作者保存在数据库中,您建议的更好方法是什么?

标签: c++ windows acrobat keystroke


【解决方案1】:

试试AutoIt。从它的网站:

“AutoIt 是一种免费的 Windows 自动化语言。它可用于编写大多数基于 Windows 的简单任务的脚本。”

【讨论】:

  • 但仍然有问题,我可以通过提供 Run("notepad.exe") 来自动运行记事本,就像我试图获得 Run("acroRD32.exe") 但它不起作用,知道为什么吗?
  • 它可能不在您的路径中。您是否尝试将完整的路径放在那里?例如:Run("C:/Program Files/Adobe/acroRD32.exe")
【解决方案2】:

当您执行这些操作时,您将需要使用 Spy++ 并观察传递到窗口的消息(请注意,使用 Acrobat 打开 PDF 和抓取窗口句柄是不同的操作)。从那里,查看:

http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx

如@Alf 所述,如果您不习惯 Win32 消息传递并且脆弱,那么它会很困难。我建议您尝试另一种方法,但如果您使用 Google 搜索“win32 sendmessage”或“win32 sendkeys”,应该可以帮助您入门。

【讨论】:

    【解决方案3】:

    几件事,

    1) 模拟击键以与另一个应用程序交互是一个非常非常糟糕的想法。你最好找到能做同样事情的 API。

    如果您还没有改变主意,请继续阅读...

    2) 保存,为什么不用Ctrl+S保存,Ctrl+O打开。我相信您也会找到其他人的直接快捷方式。

    这里有一个Project 可能会有所帮助。

    【讨论】:

      【解决方案4】:

      您可以使用 SendMessage API 向窗口发送鼠标和键盘消息,或者您可以使用模拟实际硬件事件的 sendinput。我会同意另一个人,使用 AutoIT

      【讨论】:

        猜你喜欢
        • 2012-06-17
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 2016-11-17
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        相关资源
        最近更新 更多