“屏幕取词”技术问题?!

mdk89 2002-12-20 02:37:22
请问金山词霸的“屏幕取词”是怎样实现的?!

他是用API函数实现的吗?!

是的话那又是怎样实现的呢?!

请朋友们赐教,谢谢先!

...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
classfactory 2002-12-21
  • 打赏
  • 举报
回复
金山是这么实现的:

IHook.dll - 设置鼠标hook及参数
ITextOut.dll - 输出API捕捉函数,包括:
xeCreateFont
xeDrawText
xeDrawTextW
xeExtTextOut
xeExtTextOutW
xeGetACP
xeGetTextExtentPoint32
xeGetTextExtentPoint32W
xeGetTextSize
xeGetTextSizeW
xeSetACP
xeTextOut
xeTextOutW

你用些工具监视一下金山词霸就明白了。不过我是用VC,不会delphi。
jiangshi99 2002-12-21
  • 打赏
  • 举报
回复
关注!
  • 打赏
  • 举报
回复
楼主我可以告诉你,,在中国没有几个人能做出像样的取词程序的,,,说的明白些没有几个人能有那样的技术,,,我在家中的机器中有过一位高手和许多delphibbs讨论这项技术的文档,,,我看到过了,,,写的基本思路是对,,但要是真正实现起来是很技术的,,不是那样简单的,,,
goodloop 2002-12-21
  • 打赏
  • 举报
回复
http://member.netease.com/~inetsoft/downloads/sourcecode/windows/freedic/index.htm
kmask 2002-12-21
  • 打赏
  • 举报
回复
转:

“ 屏幕抓字”的实现

1 用SetWindowsHookEx()安装鼠标钩子MouseProc;
2 在屏幕上移动鼠标时,系统就会调用鼠标钩子MouseProc;
3 进入MouseProc,获得鼠标的坐标(x,y),
设置对TextOut()、ExtTextOut()等的跟踪程序,
用invalidateRect()告诉系统该点(x,y)“失效”;

系统发出WM_PAINT消息,指示该点(x,y)处的应用程序重绘“失效”的区域。
5 负责绘制该点()的应用程序在受到 WM_PAINT 消息后, 就有机会调用

TextOut()、 ExtTextOut()等函数。
6 调用的函数被拦截进入跟踪程序:设置好了的跟踪程序截获了该次调用,


应用程序的堆栈中取出 该点(x,y)“文字”的指针;
7 从应用程序的数据段中将“文字”指针的内容取出,即完成了一次“屏幕


字”;
8 退出跟踪程序,返回到鼠标钩子MouseProc;
9 在MouseProc中解除对TextOut() ExtTextOut()的跟踪;
10 退出MouseProc鼠标钩子程序,控制权交给系统。
11 在屏幕上移动鼠标,开始下一次“屏幕抓字”,返回步骤2。



没试过
Eastunfail 2002-12-20
  • 打赏
  • 举报
回复
以前有这类问题。
记得是HOOK了TextOut系列API

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧