一个外部程序,可能是用VC或者PB等工具编写的,总之不是delphi,如果要获取程序中的一些数据,那些数据有些是label的caption,有些是在TStringGrid等表格中的,请问用delphi有没有办法获取到?我试过用API和注入等方法,但是因为是不同的开发语音,都失败了,网络截获的方式,我也不懂,所以请教大家,看有没有别的方式可以获取的。APIHOOK的方式,不知道对于这些不同开发平台的程序是否有用?

解决方案 »

  1.   

    你得首先弄清楚这些控件的工作原理,label的caption应该可以通过句柄查到,表格里面的东西一般是读内存,API HOOK好像不是很顶用
      

  2.   

    不同的东西是不一样的,如果是取上面的问题,如果是用api的textout输出的,用api是可以hook到得,其他文字,可以参考鼠标取词,道理也是api钩子
      

  3.   


    以前从伴水老师那边找到过一个delphi的例子,获取外部程序中StringGrid表格中的内容,这个程序可以通过注入那个外部程序,从来获得StringGrid的实例,然后得到单元格的内容,但是这个程序只能针对delphi的StringGrid,对于VC或者PB中的就不起作用了,不知道有什么办法能修改。外部程序中的label应该也只能先取得实例,然后才能获得caption属性,至于读内存,也没接触过,不过这应该是条思路,不知道gyk120能否提供一些方向?比如哪些资料适合学这方面的内容?谢谢了
      

  4.   


    鼠标取词似乎不方便,因为有时候会需要连续的获取一些内容,这样会受操作者的影响。hook textout倒是条思路,谢谢BDMH老师
      

  5.   

    如果是delphi的组件,那就hook得到这个组件,参考
    http://topic.csdn.net/u/20110111/06/084ce131-aeef-40f2-a777-18393426c7a0.html?95604
      

  6.   


    谢谢bdmh老师,就是因为所取的不是delphi的组件,所以才想提这个问题的
      

  7.   


    再请教一下,假设一个我需要读取的数值,在内存里,我怎么得到它的地址?我在别的一个帖子上看到有人是用ce来找地址的,这个ce是不是用来动态修改游戏数据的那个ce?另外,这个地址一旦找到,是不是就是固定的?下次运行那个外部程序时,同样也可以用这个地址找到我所需数据的位置吧?