一个程序隐藏了界面
有没办法实时取它界面上一个LABEL的文本?

解决方案 »

  1.   

    用FINDWINDOW吧.具体用法查查SDK吧.
      

  2.   

    findwindow会用
    倒是怎么查窗口里的控件
    不是很了解
      

  3.   

    label  能够作到吗 ?
      

  4.   

    Label做不到,因为它不是窗口。基本上很难。如果这个程序是其他的程序。
      

  5.   

    试试屏幕取单词法。或者跟踪那个程序,找到设置Label的入口地址(Call XXX),然后HOOK这个地址,HOOK下来后发消息给你的程序,告诉她新的Caption内容。
      

  6.   

    屏幕取词方法好像无法实现,要屏幕取词需要发送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了, 当然所有这一切工作都必须在对方进程空间内完成。