金山词霸”屏幕取词技术揭密(讨论稿)

金山词霸”屏幕取词技术揭密(讨论稿)

这篇文章最早是发在北极星论坛的一系列帖子,那时候闻怡洋(好像他也是MVP)也在那里混
原始的帖子我已经没有了,但不知道是谁帮我收集整理了下来(非常感谢),我用google找到了
?
这是我进金山之前写的,应该不算泄露公司技术秘密吧 吐舌笑脸
而且这些现在看来似乎已经有些过时了
?
那时讨论的只是Win31和Win9x下的取词实现
?
我到了金山之后不是负责取词模块,而是做UI,因为有个家伙比我更擅长做这种东西
他用SoftIce调试汇编代码非常熟练,做逆向工程方面有过人的天分。
?
?
“亦东” 是我那时的笔名
?
?
“金山词霸”屏幕取词技术揭密(讨论稿)
?
主题  屏幕取词技术系列讲座(一)
作者   亦东
很多人对这个问题感兴趣。
原因是这项技术让人感觉很神奇,也很有商业价值。
现在词典市场金山词霸占了绝对优势,所以再做字典也没什么前途了。我就是这么认为的,所以我虽然掌握了这项技术,却没去做字典软件。只做了一个和词霸相似的软件自己用,本来想拿出来做共享软件,但我的词库是“偷”来的,而且词汇不多,所以也就算了,词库太小,只能取词有什么用呢?而且词霸有共享版的。
但既然很多人想了解这项技术,我也不会保留。我准备分多次讲述这项技术的所有细节。
大约每周一两次。想知道的人就常常来看看吧!
一.基础知识
首先想编这种程序需要一些基础知识。
会用Vc++,包括16/32位。
精通Windows API特别是GDI,KERNEL部分。
懂汇编语言,会用softice调试程序,因为这种程序最好用softice调试。
二.基本原理
在Window 3.x时代,windows系统提供的字符输出函数只有很少的几个。
TextOut
ExtTextOut
DrawText
......
其中DrawText最终是用ExtTextOut实现的。
所以Windows的所有字符输出都是由调用TextOut和ExtTextOut实现的。因此,如果你可以修改这两个函数的入口,让程序先调用你自己的一个函数再调用系统的字符输出,你就可以得到Windows所有输出的字符了。
到了Windows95时代,原理基本没变,但是95比3.x要复杂。开始的时候,一些在windows3.x下编写的取词软件仍然可以是使用。但是后来出了个IE4,结果很多词典软件就因为不支持IE4而被淘汰了,但同时也给一些软件创造了机会,如金山词霸。其实IE4的问题并不复杂,只不过它的输出的是unicode字符,是用TextOutW和ExtTextOutW输出的。知道了这一点,只要也截取就可以了。不过实现方法复杂一点,以后会有详细讲解。现在又出了个IE5,结果词霸也不好用了,微软真是 #^@#$%$*&^&#@#@..........
我研究后找到了一种解决办法,但还有些问题,有时会取错,正在继续研究,希望大家共同探讨。
另外还有WindowsNT,原理也是一样,只是实现方法和95下完全不同。
三.技术要点
要实现取词,主要要解决以下技术问题。
1.截取API入口,获得API的参数。
2.安全地潜入Windows内部,良好地兼容Windows的各个版本
3.计算鼠标所在的单词和字母。
4.如果你在Window95下,做32位程序,还涉及Windows32/16混合编程的技术。
今天先到这里吧!最好准备一份softice for 95/98和金山词霸,让我们先来分析一下别人是怎么做的。
欢迎与我联系
E-Mail:yeedong@163.net
主题  屏幕取词技术系列讲座(二)
作者   亦东
很抱歉让大家久等了!
我看了一些人的回帖,发现很多人对取词的原理还是不太清楚。
首先我来解释一下hook问题。词霸中的确用到了hook,而且他用了两种hook其中一种是Windows标准hook,通过SetWindowHook安装一个回调函数,它安装了一个鼠标hook,是为了可以及时响应鼠标的消息用的和取词没太大关系。
另一种钩子是API钩子,这才是取词的核心技术所在。他在TextOut等函数的开头写了一个jmp语句,跳转到自己的代码里。
你用softice看不到这个跳转语句是因为它只在取词的一瞬间才存在,平时是没有的。
你可以在TextOut开头设一个读写断点
bpm textout
再取词,就会找到词霸用来写钩子的代码了。
/**********************************
所以我在次强调,想学这种技术一定要懂汇编语言和熟练使用softice.
**********************************/
至于从cjktl95中dump出来的未公开函数是和Windows32/16混合编程有关的,以后我会提到他们。
我先来讲述取词的过程,
0 判断鼠标是否在一个地方停留了一段时间
1 取得鼠标当前位置
2 以鼠标位置为中心生成一个矩形
3 挂上API钩子
4 让这个矩形产生重画消息
5 在钩子里等输出字符
6 计算鼠标在哪个单词上面,把这个单词保存下来
7 如果得到单词则摘掉API钩子,在一段时间后,无论是否得到单词都摘掉API钩子
8 用单词查词库,显示解释框。
很多步骤实现起来都有一些难度,所以在中国可以做一个完善的取词词典的人屈指可数。
其中0,1,2,7,8比较简单就不提了。
先说如何挂钩子:
所谓钩子其实就是在WindowsAPI入口写一个JMP XXXX:XXXX语句,跳转到自己的代码里。
步骤如下:
1.取得Windows API入口,用GetProcAddress实现
2.保存API入口的前五个字节,因为JMP是0xEA,地址是4个字节
3.写入跳转语句
这步最复杂
Windows的代码段本来是不可以写的,但是Microsoft给自己留了个后门。
有一个未公开函数是AllocCsToDsAlias,
UINT WINAPI ALLOCCSTODSALIAS(UINT);
你可以取到这个函数的入口,把API的代码段的选择符(要是不知道什么是选择符,就先去学学保护模式编程吧)传给他,他会返回一个可写的数据段选择符。这个选择符用完要释放的。用新选择符和API入口的偏移量合成一个指针就可以写windows的代码段了。
这就是取词技术的最核心的东东,不止取词,连外挂中文平台全屏汉化都是使用的这种技术。现在知道为什么这么简单的几句话却很少知道了吧?因为太多的产品使用他,太多的公司靠他赚钱了。
这些公司和产品有:中文之星,四通利方,南极星,金山词霸,实达铭泰的东方快车,roboword,译典通,即时汉化专家等等等等。。。。还有至少20多家小公司。他们的具体实现虽然不同,但大致原理是相同的。
我这些都是随手写的,也没有提纲之类的东西,以后如果有机会我会整理一下,大家先凑合着看吧!xixi...
?
主题  关于屏幕取词的讨论(三)
作者   亦东

让大家久等,很抱歉,前些时候工作忙硬盘又坏了,太不幸了。
这回来点真格的。
咱们以截取TextOut为例。
下面是代码:
//截取TextOut
typedef UINT (WINAPI* ALLOCCSTODSALIAS)(UINT);
ALLOCCSTODSALIAS AllocCsToDsAlias;
BYTE NewValue[5];//保存新的入口代码
BYTE OldValue[5];//API原来的入口代码
unsigned char * Address=NULL;//可写的API入口地址
UINT DsSelector=NULL;//指向API入口的可写的选择符
WORD OffSetEntry=NULL;//API的偏移量
BOOL bHookAlready = FALSE; //是否挂钩子的标志
BOOL InitHook()
{
HMODULE hKernel,hGdi;
hKernel = GetModuleHandle("Kernel");
if(hKernel==NULL)
return FALSE;
AllocCsToDsAlias = (ALLOCCSTODSALIAS)GetProcAddress(hKernel,"AllocCsToDsAlias");//这是未公开的API所以要这样取地址
if(AllocCsToDsAlias==NULL)
return FALSE;
hGdi = GetModuleHandle("Gdi");
if(hmGdi==NULL)
return FALSE;
FARPROC Entry = GetProcAddress(hGdi,"TextOut");
if(Entry==NULL)
return FALSE;
OffSetEntry = (WORD)(FP_OFF(Entry));//取得API代码段的选择符
DsSelector = AllocCsToDsAlias(FP_SEG(Entry));//分配一个等同的可写的选择符
Address = (unsigned char*)MK_FP(DsSelector,OffSetEntry);//合成地址
NewValue[0]=0xEA;
*((DWORD*)(NewValue+1)) = (DWORD)MyTextOut;
OldValue[0]=Address[0];
*((DWORD*)(OldValue+1)) = *((DWORD*)(Address+1));
}
BOOL ClearHook()
{
if(bHookAlready)
HookOff();
FreeSelector(DsSelector);
}
BOOL HookOn()
{
if(!bHookAlready){
for(int i=0;i<5;i++){
Address[i]=NewValue[i];
}
bHookAlready=TRUE;
}
}
BOOL HookOff()
{
if(bHookAlready){
for(int i=0;i<5;i++){
Address[i]=OldValue[i];
}
bHookAlready=FALSE;
}
}
//钩子函数,一定要和API有相同的参数和声明
BOOL WINAPI MyTextOut(HDC hdc,int nXStart,int nYStart,LPCSTR lpszString,UINT cbString)
{
BOOL ret;
HookOff();
ret = TextOut(hdc,nXStart,nYStart,lpszString,cbString);//调原来的TextOut
HookOn();
return ret;
}
上面的代码是一个最简单的挂API钩子的例子,我要提醒大家的是,这段代码是我凭记忆写的,我以前的代码丢了,我没有编译测试过
因为我没有VC++1.52.所以代码可能会有错。
建议使用Borland c++,按16位编译。
如果用VC++1.52,则要改个选项
在VC++1.52的Option里,有个内存模式的设置,选大模式,和"DS!=SS DS Load on Function entry.",切记,否则会系统崩溃。
有什么不明白的可以给我写信
yeedong@163.net

发表于 2004年6月23日 19:11

href="http://blog.joycode.com/yaodong/Services/Pingback.aspx" rel="pingback" />

评论

 

nice

# 回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-6-24 15:12 rivershan

你就是亦东啊。。。。
差不多这个好像就是最古老的介绍取词的文章了~
老兄多大年龄了?

# 回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-6-24 15:17 yaodong

唉~~,已经而立之年了

# 回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-6-25 15:18 阿赖.COM

厉害!

# 回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-6-25 23:56 ceocio

强啊

# 回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-7-1 10:05 kcahcn

我看过很多次。不错。
你应该是那种喜欢挑战的人吧?
给你一个我觉得比较麻烦一点的东西
屏幕取词对LTR语言不怎么麻烦但是对RTL(像Arabic,Hebro...)就不一样了。有很多问题在内。
有兴趣的话去试试看或者告诉你们“金山”的人试试对RTL语言实现屏幕取词。
好像还没有软件能那样做。我只知道阿拉伯语还没有这样的软件,至于其它RTL语言我就不太清楚。。
Best regards,
CIONO1

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-7-21 12:17 新手

牛啊!
不知有没有现成的库 DLL 可以直接调用, 自己花力气写太麻烦.
如果那位有现成的 CODE (FOR WIN-XP,2K, IE6), 不知可否 传给我.
当然, 你不会白传的. (VMC_888@YAHOO.COM)

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-11-22 12:09 kety

很有启发性, 我这两天在研究直接通过程序向金山词库查词的方法. 可以基础太差了, 没办法做下去, 看了你的文章似乎又懂了一些. 但又不太懂, 我看似乎是normgrab.dll这个东东是查词的关键, 用软件查看就只有InitHookDll 和 CleanupHookDll这两个入口, 但弄不懂怎样用啊. 请指教

# 关于屏幕取词的问题(转) 2004-11-26 16:00 RaoX

Ping Back来自:blog.csdn.net

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-12-24 14:07 RED17

估计实际过程可能是内核为TEXTOUT的物理地址所在的页面构造一个新的可写的页表项,从程序的角度讲也就是获得了一个新的线形地址,可以从新的可写的页表访问同一个物理地址

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-12-26 1:25 ??

金山词霸的词库加密吗??

是什么格式的??

谢谢

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-1-16 13:33 cqhydz

取自水木清华bbs,希望大家有用。
kingsoft的词库引擎
ksengine.dll
kingsoft的语音引擎
ksvoice.dll
这两个文件和辞典文件在词霸的安装包里找找就有了:)

利用regsvr32注册
即可使用两个com组件

web辞典就不需要语音引擎了
http://cai.wk211.com/test/word.aspx?q=nice

winform的demo见附件
--
附件下载地址
http://www.smth.org/bbscon.php?ftype=0&bid=288&id=43499&ap=496

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-2-3 13:44 passer

给api下钩子只能算是小技巧而已。不知作者能否解释一下钩子的原理,以及为什么全局挂钩只能实现为dll形式?另外词霸的取词速度尚可,不知实现上有什么技巧?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-2-10 19:33 gudu

在没有弄懂之前,我也觉得很复杂,有一天我忽然钝悟,才发觉原来如此简单,真的是大道自然啊。
我现在的取词功能已经接近金山词霸了,只是不能取pdf,其它方面和金山词霸没什么区别。
我现在把这个取词功能运用到了我的一个软件中。
如果我的软件销量不好,我就准备把取词程序公开。
我的email:linsen633@sohu.com

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-2-10 19:44 gudu

如果我公布,你看了代码后会觉得太简单了。

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-3-18 16:01 王强

能不能用VB实现屏幕取词

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-5-4 9:24 yuanzi gudu

正在做一个使用取词的小软件,能否告知一二,谢谢。主要是应用

# 金山词霸”屏幕取词技术揭密(讨论稿) 2005-6-20 0:37 土星站了一晚

Ping Back来自:blog.csdn.net

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-8-6 16:54 sun201201

我有一个DLL
但好像不能取"金山词霸"的取词框
不知能否告知为什么?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-8-18 11:43 abc

请问如何取到词霸即时翻译的提示框内的词呢?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-9-3 23:05 king

我能取到

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-9-26 14:43 我我

想问一下各位高手,为什么windows xp sp2和金山词霸屏幕取词有冲突呢,windows总是报错,应该怎样解决?谢谢

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-9-27 22:52 sun

请问如何取到词霸即时翻译的提示框内的词???有谁能知道??
联系方式:sun201201@126.com

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-10-2 12:58 sun201201

我做的取词怎么与金山词霸相冲突呢???
没打开金山词霸的时候运行完好
打开金山词霸,取第一次词完全可以,当取第二次的时候
就出现错误了
为什么啊?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-10-6 20:30 jiang

我的系统是xp的,但为什么不能用金山词霸的屏幕取词功能--一打开金山词霸的屏幕取词功能,屏幕只要鼠标有移动就立即刷屏。请教!十万火急....
有谁知道的发我Email:jxz919@163.com

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-10-8 13:10 guest

能不能用VB实现屏幕取词 ?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-10-15 20:59 nana

我的系统是xp的,但为什么不能用金山词霸的屏幕取词功能--一打开金山词霸的屏幕取词功能,屏幕只要鼠标有移动就立即刷屏。请教!十万火急....


我说:你一定装了正版的金山独霸吧。
我也和你一样,用不料盗版的金山词霸。
我决定改用瑞星。

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-11-1 11:37 xiaoguo ge

My 2005 version have the same problem with WinXP SP2.
Basicly JSCB kills the target window when it is doing api hooking. It even kills windows desktop and shell, but not IE

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-11-24 14:19 AMY

我们公司新买的电脑也出了这个问题,本来是我去负责买的,他们都 以为是电脑的配置有问题(因为不懂)现在才知道为什么不停地刷屏

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-12-8 20:15 yicanbao

我的系统是xp的,但为什么不能用金山词霸的屏幕取词功能--一打开金山词霸的屏幕取词功能,屏幕只要鼠标有移动就立即刷屏。请教!十万火急...

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-12-13 9:30 这么巧

http://support.kingsoft.com/c_1/XdictGrb.dll


金山的补丁

# cdc103941 2005-12-27 1:00 马军

中国大学生服务网 e卡通vip金钻卡 e卡通会员 卡号cdc103941 查密码

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2005-12-27 1:05 马军

想不起

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-1-16 1:41 beginner

词霸2005,2006还用API Hook吗?
安装文件里有Cjktl16.dll,Cjktl32.dll,Cjktl95.dll来实现API hook,就是通常我们知道的哪些方法。
不过好像没什么用...删除它们都不会影响取词???
XdictGrb.dll 还没弄清楚为了什么
Normgrab.dll里的InitHookDLL
有这么一段
push eax ; lpVersionInformation
call ds:GetVersionExA
test eax, eax
jz loc_10002144
mov eax, [ebp+VersionInformation.dwPlatformId]
dec eax
jz short loc_100020C4 ; win95?? why?
dec eax
jnz loc_10002144
push 1
pop eax
jmp loc_10002146
loc_100020C4:
call sub_10002BE2 ; 这里就取 cjktlxx.dll 的函数 xeInit,xeEnableHook ...等等
===
看来还要再研究研究...
xdict.exe 需要unpack..还没找到合适的
希望有人帮忙

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-2-15 19:28 来看看

RE:我用的是瑞星正版,金山词霸是OEM版(盗版金山词霸2003也用过),XP是盗版,但是安装之后,只要一打开金山词霸,也是立即刷屏,系统就死机了!请教是怎么回事?

是否前面有位大侠的金山补丁装上就没事了呢?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-2-15 20:05 来看看

OK,名位刷屏的兄弟姐妹们,使用前面一位大侠的补丁替换金山词霸目录中同名文件,即可解决问题,不信试试看吧!
谢谢那位“这么巧”大侠了!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-2-28 18:07 龙卷风

可以用了 太感谢了

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-10 14:22 在水一方

OK,名位刷屏的兄弟姐妹们,使用前面一位大侠的补丁替换金山词霸目录中同名文件,即可解决问题,谢谢那位“这么巧”大侠了! 真的是高手啊!!!!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-12 21:57 timewq

真的可以啊!金山词霸2006覆盖了原来的xdictgrb.dll文件后,内存溢出的现象也消失了,“这么巧”你真牛!谢谢啊!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-12 23:00 spring

试了一下,是比以前好多了,但有时还是内存溢出啊!谁有破解版的Powerword 2006 SP1,我下载的一个咋不叫装?有没有个彻底的解决办法?
email:wangliwl_2004@126.com

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-13 1:31 shine

刚刚使用了前面一高手的替换文件,可还是无法用到屏幕取词功能

究竟怎么回事?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-24 20:15 liliang

发水木清华BBS内哥们你的办法好使又简单,我的可以用了,真心谢谢你了!:)

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-3-31 22:42 wo

感谢那位这么巧大虾的指点,本机真的再不刷屏了,hoho 再次感谢!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-4-10 11:28 ReadMe

好高深啊

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-4-10 19:04 周蚊王

同谢“这么巧”,我的也不刷屏了,谢啦!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-4-27 0:42 ZKJ

谢谢 “这么巧”先生,你给我解决了屏幕取词的问题,真是太感谢了! 不能打开取词模块的网友,请下载“这么巧”先生的DLL,覆盖原目录下的DLL文件就OK啦!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-5-12 12:35 hsbx

我的下载了那个补丁,还是不行啊。正版win xp home editon sp2 ntfs分区 瑞星杀毒软件 和 金山词霸2003

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-5-21 23:55 Tiantian

我的下载了那个补丁,也还是不行啊.我用的是正版win xp Media Center Edition, Version 2002, SP2,正版金山词霸2005专业版;Dell XPS DXP051 Intel Pentium D.我也试了在系统的数据执行保护中添加explorer.exe和rundll32.exe,还是刷屏,将鼠标取词改成中键取词后,不刷屏了,但是一按鼠标中间,打开的程序就会自动关闭。大侠们,请指教指教啊,先谢过了!我的邮箱littlemisstian@yahoo.com

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-6-6 20:52 anky

我的是金山2003的出现一个情况就是打开金山词霸程序不能查词,就像没有词库一样,还有他只能在word里面取词不能在其他程序里面取词,这是怎么回事啊

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-6-7 8:11

为什么我一开屏幕取词就死机呀

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-6-14 17:37 rider

问一个显得比较弱的问题
截取到了TextOut()函数输出的内容后,要怎么计算鼠标在哪个单词上呢?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-6-22 3:46 xixi

在win98下怎么用XdictGrb.dll

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-6-29 14:07 哪个你奶奶的

cqhydz 的网址什么也不是的!
http://cai.wk211.com/test/word.aspx?q=nice

# 金山词霸”屏幕取词技术揭密--转贴 2006-7-10 20:32 amandaken

金山词霸”屏幕取词技术揭密(讨论稿)

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-21 14:42 做了个取词不好用

做了一个屏幕取词软件,怎么在有些地方不能取词呢,很奇怪啊,哪位大侠提示一下,什么情况的词取不下来!谢谢了!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-21 15:00 做了个取词不好用

TPanel是个什么东西,为什么在这个上面取词功能不好用呢???好心人帮助一下!hyhmen@sina.com.cn

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-25 8:57 freewings

我是xp环境,但我建立了受限帐户,在超级用户下屏幕取词很正常,受限用户却刷屏,打了那个补丁也没效果。
而且只能把兼容性设为windows 2000,才能有词库。

在超级用户下可以屏幕取词,在受限用户下却不行,怎么解决?

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-27 20:26 Ayu

咱们以截取TextOut为例。
下面是代码:
//截取TextOut


这个例子的代码好像不怎么全,有没有信更全面一点的代码啊
特别的生成jmp跳转这部分

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-27 20:32 Ayu

有没有人在wince下做过屏幕取词啊!!!!!!!!!11

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-7-31 2:50 柯南、新一好帅~~~

太感谢那位这么巧大虾的指点,thank you very much!
好人啊!!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-8-4 21:30 LIU

好办法,顶!
解决了困扰我很久的问题

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-8-4 21:31 LIU

不胜感激啊

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-8-29 20:00

谢谢大侠解决取词刷屏问题,哈哈

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-9-27 19:01 联邦

谢谢,我的也可以用了,太感谢了

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-9-28 20:51 kcahcn

"屏幕取词对LTR语言不怎么麻烦但是对RTL(像Arabic,Hebro...)就不一样了。"
RTL语言的问题解决了!
ADOBE 取词也解决了只是要有“Adobe Integration Key License Application (IKLA)“才能用在Adobe reader
---
Babylon的软件也不错。支持很多语言

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-10-15 12:13 beyond0535

谢谢
这么巧大侠,使用金山词霸再也不刷屏了,不胜感激!

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-10-31 14:13 Gamema

我谢谢你!~这么巧!~
我的救命恩人!~

# re: 金山词霸”屏幕取词技术揭密(讨论稿) 2006-11-4 11:38 nzwhappy

太谢谢这么巧大侠了!我不小心下载了你的补丁,真的可以啦!!!感谢这些网络高手! 

#  回复: 金山词霸”屏幕取词技术揭密(讨论稿) 2004-6-24 10:28 heihei
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现在Java中调用金山词霸屏幕取词的功能,可以通过以下步骤进行操作: 1. 下载及安装金山词霸软件:首先需要在计算机上下载并安装金山词霸软件,确保软件正常运行。 2. 导入相关依赖库:根据金山词霸提供的API文档,确定所需的相关依赖库,并将其导入到Java项目中。 3. 创建Java代码文件:在Java项目中创建一个新的Java代码文件,用于调用金山词霸屏幕取词的功能。 4. 编写Java代码:在Java代码中,可以使用Java的外部应用程序接口(API)或者使用JNI接口来与金山词霸进行交互。根据金山词霸API文档,按照要求调用相应的函数和方法,获取屏幕取词的结果。 5. 运行Java代码:编译并运行Java代码,确保程序可以成功调用金山词霸屏幕取词功能,并获取到预期的结果。 需要注意的是,由于金山词霸屏幕取词功能的实现方式可能会因版本不同而有所差异,因此在具体实现时应参考金山词霸的相关API文档,确保代码的准确性与稳定性。 ### 回答2: 要调用金山词霸屏幕取词的源码,可以使用Java的相关库和API。首先,需要在项目中引入金山词霸的Java库文件。然后,在代码中创建一个金山词霸的实例对象,用于控制屏幕取词的操作。 接下来,可以使用Java的事件监听机制,监听鼠标操作或者键盘操作,当用户点击鼠标或者按下特定的按键时,触发取词功能。在事件监听方法中,调用金山词霸实例对象的相关方法,如startCapture()方法,开始进行屏幕取词的操作。 经过截图和文字识别处理后,金山词霸会返回取到的词语信息。可以将词语信息显示到界面上,或者存储到文件中,根据需要进行进一步的处理和展示。 在整个过程中,需要注意异常处理以及安全性问题。确保金山词霸库文件正确引入,并且用户有正常的操作权限。此外,可能还需检查操作系统的兼容性以及金山词霸库的版本适配性。 需要注意的是,金山词霸的使用可能涉及到授权和付费问题。在使用前,建议查阅官方文档,了解相关授权和付费要求,确保合法合规地使用金山词霸屏幕取词功能。 ### 回答3: 要实现Java调用金山词霸屏幕取词源码,可以按照以下步骤进行: 1. 首先,需要在电脑上安装好Java开发环境,确保可以编译和运行Java程序。 2. 在网上搜索或直接访问金山词霸的开放平台或开发者文档,查找屏幕取词功能的API文档和示例代码。 3. 阅读API文档和示例代码,了解如何进行屏幕取词的调用和使用。 4. 在Java的开发环境中创建一个新的Java项目,命名为"ScreenTranslator"(或其他合适的名称)。 5. 在该项目中创建一个Java类,命名为"ScreenTranslatorDemo"(或其他合适的名称),这个类将用于编写屏幕取词功能的代码。 6. 在"ScreenTranslatorDemo"类中导入相关的Java类库和API库。 7. 编写代码来调用金山词霸屏幕取词API,实现屏幕取词功能。这可能涉及到一些API调用、参数的设置和返回结果的处理。 8. 在main方法中,编写测试代码,模拟屏幕取词的场景,并调用相应的方法进行词语的翻译和输出。 9. 运行Java程序,查看屏幕取词功能是否正常工作,并检查输出结果是否符合预期。 10. 根据需要,可以对代码进行优化、封装或添加其他功能,以提高程序的可用性和用户体验。 需要注意的是,以上步骤仅供参考,具体的实现方式可能与金山词霸API和文档有关。因此,在实际过程中,最好参考具体的文档和示例代码,以确保正确调用金山词霸屏幕取词API。从这个角度来说,这只是一个大致的指引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值