【发布时间】:2010-11-16 06:45:27
【问题描述】:
我想创建一个程序或使用一个程序来从另一个应用程序中读取内存值。有谁知道会执行此操作的应用程序/库?
目标应用是this。我想从中读取汇率值。
我是一名经验丰富的 c# 程序员,但从未使用过 Win32/user32 api,我假设我必须处理这些问题才能完成此任务。
非常感谢任何能让我朝着正确方向前进的帮助。
更新: 我设法使用 Spy++ 来获取窗口句柄,所以我确信我可以通过某种方式获取这些值。
【问题讨论】:
我想创建一个程序或使用一个程序来从另一个应用程序中读取内存值。有谁知道会执行此操作的应用程序/库?
目标应用是this。我想从中读取汇率值。
我是一名经验丰富的 c# 程序员,但从未使用过 Win32/user32 api,我假设我必须处理这些问题才能完成此任务。
非常感谢任何能让我朝着正确方向前进的帮助。
更新: 我设法使用 Spy++ 来获取窗口句柄,所以我确信我可以通过某种方式获取这些值。
【问题讨论】:
您是否查看过AutoIT 或AutoHotKey? 这两个开源选项都具有从应用程序窗口读取文本(并向它们发送击键或鼠标点击)的详细记录能力。
AutoIT 非常易于使用且文档齐全。 从窗口读取文本的示例如下:
$text = WinGetText("title of window", "")
MsgBox(0, "Text read was:", $text)
这可以编译成可执行文件。
【讨论】:
通常,应用程序在对话框中以一致的庄园、相同的 ID、相同的顺序等方式创建控件,因此以编程方式查找控件相当简单。使用 Spy++ 找到控件的 ID,然后您可以在应用程序创建的窗口中搜索所需的控件。不熟悉有问题的应用程序我无法提供具体信息,但如果 Spy++ 显示了您想要的值,那么在您的代码中获取该值可能并不困难。
值显示在什么类型的控件中?一旦您拥有父窗口句柄和控件 ID,您就可以使用GetDlgItemText 获取值?要获取父窗口,请尝试使用EnumWindows。
【讨论】:
通过自动截图然后进行 ocr 处理可能更容易抓取他们的数据。如果那是你的目标。
可能相关的链接:
【讨论】:
这篇文章可能会有所帮助 - http://msdn.microsoft.com/en-us/magazine/cc163617.aspx,但我认为它不是通用的,您的任务最好直接访问外汇 API/Web 服务或尝试在网络上捕获所需的数据。
【讨论】:
可以截屏使用本机 Windows 控件创建的内容;如果是这种情况,您应该能够看到使用 Spy++ 的控件。但有时控件是“手动”实现的,没有办法将它们截屏(例如,一些 Java 图形工具包直接玩图形,所以每天所做的一切从外面看都是没有意义的,甚至某些 Office 菜单是实现的不使用菜单控件)。
Windows 可访问性 API 是屏幕抓取值的一种可能方式;检查 Windows 附带的屏幕阅读器“讲述人”是否能够朗读您的目标应用程序。
【讨论】: