试问高手:如何读取屏幕某处显示的一段字?   没办法,只有霸王硬上弓。假设某软件在屏幕某处有一个窗口,如何用另一个软件读取该窗口显示的文字。先谢了。

解决方案 »

  1.   

    CDC dc;
    dc.CreateDC(NULL);
    //Get the Screen DC then you can use this DC get the graphy you wanted on the screen.
      

  2.   


    这是屏幕截词的技术, 不过实现起来麻烦一些, 以我的经验, 通常你需要做到以下几点:1) 使用HOOK技术, 完成对其它进程的注入动作。
    2)修改各进程中的引入表的跳转地址,使其跳转到我们的过程上来(这你需要了解PE格式)
    3)枚举出各进程中所装入的模块, 并在各模块中修改相应的API函数的跳转指令, 使其转到我们的过程上来(这你需要了解进程)
    4)另外一个原则是,当你准备取哪的词时,就使该区域强行重绘一次(诸如:InvalidateRect函数)。
    5)如此以来,有了上面的基础,我们可以对文字输出的API进行了很周全的拦截,(如: TextOutA, DrawTextA...), 在我们的拦截过程中对传入的参数(字符串)进行处理之后,再把控制权还给系统(内部再调用相应的API)。到此为至你已经完成了对屏幕上取词的过程,但更复杂的情况往往在实现时出现,所以以上的几点只是取词的要点部分,其余的零星小事还需要你来完成。:)
      

  3.   

    抓图,转换成黑白位图,再做模式识别,不是做不了,只是效果不怎么好,清华紫光的OCR(是不是这样写的?)就是这么做的!
      

  4.   

    DisplayWorld(没齿骆驼) 这是屏幕截词的技术金山词霸就是如此的
      

  5.   

    HDC hdc=::getdc(0)//得到整个屏幕的DC。
    drawtext(hdc,0,0,100,100,Txtstr);//在屏幕上矩形(0,0,100,100)处显示字串Txtstr内容
      

  6.   

    屏幕截词技术,金山词霸就是如此HDC hdc=::getdc(0)//得到整个屏幕的DC。
    drawtext(hdc,0,0,100,100,Txtstr);//在屏幕上矩形(0,0,100,100)处显示字串Txtstr内容
    ??
      

  7.   

    i think u can try this
    enum all process( child process ) and select current process (API enumwindows enumchildwindow )
    readprocessmemory