【问题标题】:How can you read values from an open application in Windows?如何从 Windows 中打开的应用程序中读取值?
【发布时间】:2010-11-16 06:45:27
【问题描述】:

我想创建一个程序或使用一个程序来从另一个应用程序中读取内存值。有谁知道会执行此操作的应用程序/库?

目标应用是this。我想从中读取汇率值。

我是一名经验丰富的 c# 程序员,但从未使用过 Win32/user32 api,我假设我必须处理这些问题才能完成此任务。

非常感谢任何能让我朝着正确方向前进的帮助。

更新: 我设法使用 Spy++ 来获取窗口句柄,所以我确信我可以通过某种方式获取这些值。

【问题讨论】:

    标签: c# windows winapi spy++


    【解决方案1】:

    您是否查看过AutoITAutoHotKey? 这两个开源选项都具有从应用程序窗口读取文本(并向它们发送击键或鼠标点击)的详细记录能力。

    AutoIT 非常易于使用且文档齐全。 从窗口读取文本的示例如下:

    $text = WinGetText("title of window", "")
    MsgBox(0, "Text read was:", $text)
    

    这可以编译成可执行文件。

    【讨论】:

      【解决方案2】:

      通常,应用程序在对话框中以一致的庄园、相同的 ID、相同的顺序等方式创建控件,因此以编程方式查找控件相当简单。使用 Spy++ 找到控件的 ID,然后您可以在应用程序创建的窗口中搜索所需的控件。不熟悉有问题的应用程序我无法提供具体信息,但如果 Spy++ 显示了您想要的值,那么在您的代码中获取该值可能并不困难。

      值显示在什么类型的控件中?一旦您拥有父窗口句柄和控件 ID,您就可以使用GetDlgItemText 获取值?要获取父窗口,请尝试使用EnumWindows

      【讨论】:

      • 我无法达到所需的值,但我能够找到所有不同汇率所在的容器的句柄。容器中显示的唯一控件是用于选择值(手数)的组合框。
      • 使用 Spy++ 时,所有控件是否都显示在同一个父级下?
      • 我看到的唯一控件是用于选择手数大小的组合框,它们显示在我要读取的数字旁边,但数字控件未显示在 spy++ 中。关于如何到达这些地方有什么建议吗?
      • 在 Spy++ 中,您可以右键单击一个窗口并选择“突出显示”,它会闪烁选定的窗口。如果您一次突出显示组合框的所有同级,它们中的任何一个是否都会闪烁一个包含所需文本的矩形?
      【解决方案3】:

      通过自动截图然后进行 ocr 处理可能更容易抓取他们的数据。如果那是你的目标。

      可能相关的链接:

      【讨论】:

      • 虽然这个解决方案有点味道,但它可能是最简单的解决方案,并且有一个好的 OCR 库。
      【解决方案4】:

      这篇文章可能会有所帮助 - http://msdn.microsoft.com/en-us/magazine/cc163617.aspx,但我认为它不是通用的,您的任务最好直接访问外汇 API/Web 服务或尝试在网络上捕获所需的数据。

      【讨论】:

        【解决方案5】:

        可以截屏使用本机 Windows 控件创建的内容;如果是这种情况,您应该能够看到使用 Spy++ 的控件。但有时控件是“手动”实现的,没有办法将它们截屏(例如,一些 Java 图形工具包直接玩图形,所以每天所做的一切从外面看都是没有意义的,甚至某些 Office 菜单是实现的不使用菜单控件)。

        Windows 可访问性 API 是屏幕抓取值的一种可能方式;检查 Windows 附带的屏幕阅读器“讲述人”是否能够朗读您的目标应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-03
          • 2016-11-11
          • 1970-01-01
          • 2018-08-26
          • 2014-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多