屏幕抓取c中的Windows应用程序#

问题描述:

我需要从Windows应用程序中抓取数据以在另一个程序中运行查询。有谁知道在.NET中做这件事的好起点吗?屏幕抓取c中的Windows应用程序#

检出ManagedSpy,提供源代码。 (link

+0

很好的链接!看起来ManagedSpyLib可能用于监视其他托管应用程序 - 它是否适用于非托管应用程序?在那种情况下,他可能想看看Spy ++。 – HanClinto 2008-12-17 16:44:31

“你也许能够使用System.Diagnostics.Process.GetProcessesByName(” PROCNAME“)和 检索主窗口办理,从那里你可以使用WIN32 API来 获得文本框的手柄用于显示你想要的文字 用文本框的句柄可以得到或设置内容我是 没有win32 API的专家,但有一点研究我已经能够 完成类似的任务 Hope这有助于“

取自这里:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1657.aspx

你可能想看看WM_GETTEXT message。这可能是used to read text from other windows--它是Windows API的一个陈旧部分,如果你使用C#,则需要为它调用p /。

查看this page了解如何在C#中执行此操作的示例。

基本上,你首先FindControlEx()来获得你想要的窗口的句柄(通过标题)。

其次,您使用EnumChildWindows()递归枚举该窗口上的控件,以查找窗口的所有子控件以及所有这些子项的子项,直到获得目标窗体的完整映射。

下面是来自谷歌的答案的Theta-ga's excellent explanation选定部分:

要在任何文本框或列表框控件的内容,我们需要的是它的窗口句柄。如果你已经获得窗口句柄,然后移动到解释的第2部分。

第1部分:获取控制手柄

  • 要获得一个控件的句柄,我们首先得到它的父窗口句柄?我们可以通过使用Win32 FindControlEx()方法来做到这一点。该方法接受窗口标题(如'计算器')和/或其类名称,并返回其句柄。
  • 一旦我们有了父窗口句柄,我们可以调用Win32 EnumChildWindows方法。这个方法需要一个回调方法,它调用它为指定的父对象找到的每个子控件的句柄。例如,如果我们使用Calculator窗口的句柄调用此方法,它将使用文本框控件的句柄调用回调方法,然后再次使用Calculator窗口中每个按钮的句柄,依此类推。
  • 由于我们只关注文本框控件的句柄,所以我们可以在回调方法中检查窗口的类。 Win32方法GetClassName()可用于此。这个方法需要一个窗口句柄,并为我们提供一个包含类名称的字符串。所以一个文本框属于?编辑?类,ListBox类的列表框等等。一旦你确定你有正确的控制手柄,你可以阅读它的内容。

第2部分:读取控制的内容

  • 可以通过使用Win32的SendMessage()函数,并用它来传递一个控制的内容读将WM_GETTEXT消息发送给目标控件。这会给你控件的文本内容。此方法可用于文本框,按钮或静态控件。
  • 但是,如果您尝试读取列表框的内容,上述方法将失败。要获取列表框的内容,我们需要首先使用SendMessage()和LB_GETCOUNT消息来获取列表项的数量。然后,我们需要为列表中的每个项目调用带有LB_GETTEXT消息的SendMessage()。
+0

感谢这个有用的信息。快速的问题,如果我有矩形坐标(即x,y,宽度,高度) - 我有兴趣从那个矩形抓取文本,不一定是像文本框/区域一样的窗体控件。你知道这是可能的吗? – zenocon 2017-11-14 20:29:37

编码轮一些文章关于他是如何能够从扑克申请获取信息。

检查:deconstructing-the-poker-client-1。这可能会有所帮助。

screenscraperstudio.com

它创建了 “你刮对话” 的VB代码。

我还没有购买它,所以我可能是错的,但它的唯一途径(短期使用间谍++消息其它躲避上面滚动自己的...)