我需要用到屏幕取词功能,在网上查了一下这方面的资料,主要就是用HOOK API技术实现,
我修改了一下别人的代码用到自己的程序中,但有如下几个疑问还解决不了:
(1)因为我取词的对象窗口可能是不同的应用程序,为了保证任何情况下取词成功,应该HOOK哪些API?(我目前知道的是4个:TextOutA,TextOutW,ExtTextOutA,ExtTextOutW)
(2)因为我要取的是指定位置的词,因此挂上API钩子后便调用InvalidateRect来刷新指定区域,但我在notepad中试验的时候,发现每次取出的都是我指定的这个Rect所在那一整行的词,而不是仅仅Rect中的词,最后我还是不知道怎么得到指定Rect中的词!也就是我只让某个Rect重绘,但实际上重绘的是一整行,不知道怎么回事?(这是在notepad中试验的结果,在word中也不正常)  谢谢高手指教!

解决方案 »

  1.   

    1、看金山词霸hook了哪些函数,用来hook的那个动态链接库里面有
    2、如果一整行,那就分割字符串
      

  2.   

    1)对于屏幕DC是够了,但内存DC要复杂一些2)可以计算出鼠标指向的字符,然后分析出词来,还可以考虑中文分词的问题
      

  3.   

    我也遇到了与楼主类似的问题,虽然我用的方法不是Hook掉TextOutA()这几个API,而是使用了IAccessible接口,但总之我也是得到了鼠标所在区域的一长串字符,然后不知道该怎么准确计算出鼠标所在位置到底是哪一个单词,网上搜了N多文章都对此一笔带过,真的这么容易么?我觉得情况挺复杂啊,尤其是当这一长串字符里还有换行空行等等时。