2010-04-24 84 views
2

如果没有其他理由说,学术练习能够读取写入Windows应用程序表单的文本,该程序看起来是用非.NET语言编写的,但用.NET术语来说,我认为你会将该程序描述为具有带有标签的表单,并且我想从该标签中读取文本。从Windows窗体中读取文本

我相信我可以看到正在用User32!TextOut(和其他区域中的User32!DrawString)函数写入屏幕的文本。但是,如果我不必钩住该函数来获取我正在查找的信息,而是直接从表单直接读取它,那就太好了。

因此,给定一个窗口的句柄,是否可以使用类似的API或其他聪明的方法读取已经写入该窗口的文本,并使用类似TextOut和DrawString的函数?

或者我正在做这个错误的方式吗?我是否应该勾住这个函数,并在每次调用中寻找文本并祈祷?

谢谢!

回答

0

如果文本存储在标准方法上的控制,你可以使用SendMessage函数

Win32.SendMessage(controlHandle, Win32.WM_GETTEXTLENGTH, 0, null); 

如果控制是考虑到安全性写的,文字是几乎可以肯定不是存储在可以是一个格式通过Windows API查询。

我曾经使用一个名为Snadboy Revelation的程序从程序中抓取忘记的密码(只是显示为*****)。启示录使用相同的技术。但是,大多数现代软件隐藏了密码和类似字段的文本,所以这些日子没有太多用处。

UPDATE:

找到source code为Windows间谍应用程序。

+0

这听起来很棒!我会给它一个! :)只是要确定:我可以通过在controlHandle上使用'DuplicateHandle'或类似的方法从另一个应用程序执行此操作,对吧? – omghai2u 2010-04-24 05:34:38

+0

@ omghai2u:你可以用另一个进程的窗口句柄来做到这一点。添加了一个指向Windows Spy应用程序源代码的链接,该应用程序将具有一个实现。 – 2010-04-24 06:19:41