如何取其它隐藏程序的label的文本?
一个程序隐藏了界面
有没办法实时取它界面上一个LABEL的文本?
问题点数:20、回复次数:7Top
1 楼coffee36(咖啡)回复于 2005-11-02 21:50:06 得分 5
用FINDWINDOW吧.具体用法查查SDK吧.Top
2 楼goingup(向我开火!)回复于 2005-11-02 22:31:13 得分 0
findwindow会用
倒是怎么查窗口里的控件
不是很了解Top
3 楼S.F.(chinasf.cnblogs.com)回复于 2005-11-03 00:20:44 得分 0
递归Top
4 楼2004v2004(980)回复于 2005-11-03 08:10:37 得分 0
label 能够作到吗 ?Top
5 楼linzhengqun(风。我回来了)回复于 2005-11-03 14:21:17 得分 0
Label做不到,因为它不是窗口。
基本上很难。如果这个程序是其他的程序。Top
6 楼kiboisme(蓝色光芒)(www.1284.net/)(软件开发机器人for delphi)回复于 2005-11-04 10:48:27 得分 5
试试屏幕取单词法。
或者跟踪那个程序,找到设置Label的入口地址(Call XXX),然后HOOK这个地址,HOOK下来后发消息给你的程序,告诉她新的Caption内容。Top
7 楼Idle_(阿呆)回复于 2005-11-04 19:28:56 得分 10
屏幕取词方法好像无法实现,要屏幕取词需要发送WM_PAINT让对方重画然后通过hook掉的画文本api才能够取得。而LZ要求的是一个隐藏的窗口所以此路不通。
如果这个label在运行时不会改变那么可以通过访问那个exe的资源文件直接获取label的内容。
如果会在运行时改变那么就相当麻烦了,我能想到的办法是:
用CreateRemoteThread注入对方进程,然后想办法找到那个窗口对应的Form,接下来就好办了。
根据分析delphi源代码,我发觉可以找到对方进程内hwnd对应的form指针:创建一个atom, 它的名字是'ControlOfxxxxxxxxxxxxxxxx', 其中xxxx..是16字节长的16进制数字字符串,每8个转成integer后分别对应对方进程的HInstance和ThreadID(这些都可以获取),然后用这个atom调用api GetProp, 它返回的handle就是个TForm, 只要强制类型转换成TForm后就可以访问它下面的所有Control了, 当然所有这一切工作都必须在对方进程空间内完成。
Top




