在c#中屏幕抓取一个windows应用程序

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

查看ManagedSpy,提供源代码。 ( 链接 )

您可能需要查看WM_GETTEXT消息 。 这可以用来从其他窗口读取文本 – 这是Windows API的一个古老部分,如果你在C#中,你需要p / invoke它。

查看此页面以获取在C#中执行此操作的示例。

基本上,您首先使用FindControlEx()来获取所需窗口的句柄(通过标题)。

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

以下是来自Google Answers的Theta-ga优秀解释的精选部分:

要获取任何文本框或列表框控件的内容,我们只需要它的窗口句柄。 如果您已经获得了窗口句柄,请转到解释的第2部分。

第1部分:获得控制手柄

  • 要获取控件的句柄,我们首先获取它的父窗口的句柄。 我们可以使用Win32 FindControlEx()方法完成此操作。 此方法接受窗口标题(例如“计算器”)和/或其类名,并返回其句柄。
  • 一旦我们有父窗口句柄,我们就可以调用Win32 EnumChildWindows方法。 此方法接受一个回调方法,它使用它为指定父级找到的每个子控件的句柄调用它。 例如,如果我们使用Calculator窗口的句柄调用此方法,它将使用文本框控件的句柄调用回调方法,然后再使用Calculator窗口中每个按钮的句柄调用,依此类推。
  • 由于我们只对文本框控件的句柄感兴趣,因此我们可以在回调方法中检查窗口的类。 Win32方法GetClassName()可用于此目的。 此方法接受一个窗口句柄,并为我们提供包含类名的字符串。 所以文本框属于?编辑? class,“ListBox”类的列表框,依此类推。 一旦确定拥有正确控制的句柄,就可以阅读其内容。

第2部分:阅读控件的内容

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

“您可以使用System.Diagnostics.Process.GetProcessesByName(”ProcName“)并检索主窗口句柄,从那里您可以使用win32 API来获取用于显示所需文本的文本框的句柄。使用文本框的句柄,您可以获取或设置内容。我不是win32 API的高手,但通过一些研究,我已经能够完成类似的任务。希望这有助于“

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

将The Wheel编成一篇关于他如何从扑克申请中获取信息的文章。

检查: 解构扑克客户端1 。 这可能会有所帮助。

screenscraperstudio.com

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

我还没有购买它,所以我可能是错的,但它是唯一的方法(没有使用Spy ++消息传递你自己的其他躲到上面……)