使用金山词霸的屏幕取词功能

使用金山词霸的屏幕取词功能 (XdictGrb.dll )
最近想要做类似金山词霸屏幕取词的功能,但是在网上找了一些资料,发现都很复杂。既然金山词霸已经实现了,为什么我们不借用之?(未经金山公司批准发布其软件的一部分应该是侵权的,请注意!)
本文参考了以下文章:
用金山词霸组件实现屏
1 接口

1.1 GrabProxy 取词代理对象

Function AdviseGrab(XDictGrabSink As IXDictGrabSink) As Long
广播一个XDictGrabSink(如果要实现取词功能,你需要自己来实现这个接口,具体的方法后面会有介绍。(Visual Basic的示例,使用其他语言类似)) 接口,在需要取词的时候会调用XDictGrabSink的QueryWord方法,你可以在这里实现你需要的功能。
Property GrabEnabled As Boolean
是否取词的属性
Property GrabMode As XDictGrabModeEnum
设定取词的属性,XDictGrabFlagEnum的定义后面会讲到。
Property GrabFlag As XDictGrabFlagEnum
设定取词健,比如是否要结合Ctrl或者Shift.
Property GrabSystemCP As Long
这个属性暂时不太清楚。
Sub GrabWord(lCursorX As Long, lCursorY As Long)
取x,y坐标的词,估计是屏幕坐标。
Sub UnadviseGrab(lCookie As Long)
取消对XDictGrabSink接口的广播。
Property XDictGrabPlugins As IPluginsCollection
返回一个IPluginsCollection集合。
1.2  IPluginsCollection 插件集合对象
其中实现了一个插件的框架,但是如果只是要实现屏幕取词功能,也可以暂时不使用插件功能。
1.3  IXDictGrabPlugin 插件接口
1.4  IXDictGrabROT接口 名字不太明白是什么意思,用来注册和反注册插件。
1.5  IXDictGrabSink 自己要实现的接口,参见后面的例子。
Function QueryWord(WordString As String, lCursorX As Long, lCursorY As Long, SentenceString As String, lLoc As Long, lStart As Long) As Long
可以在这个方法中实现你自己要做的功能,WordString参数应该是鼠标所在处的单词,lCursorX是鼠标当前X坐标,lCursorY是鼠标当前Y坐标,SentenceString 是鼠标所在处整个句子,lLoc是鼠标所在处的字在整个句子中的位置,下标从0开始。lStart暂时不太清楚。
2 常量定义
2.1 XDictGrabFlagEnum
Const XDictGrabDisableButton = 4
不取按钮上的文字
Const XDictGrabDisableCaption = 8
不取标题栏的文字
Const XDictGrabDisableMenu = 2
不取菜单的文字
Const XDictGrabOnlyEnglish = 1
只取英文
以上几个常量可以用与(AND)的方式进行组合。
2.2   XDictGrabModeEnum
Const XDictGrabMouse = 1
使用鼠标取词
Const XDictGrabMouseWithCtrl = 3
使用鼠标加Ctrl取词
Const XDictGrabMouseWithMiddleButton = 4
使用鼠标加鼠标中键进行取词
Const XDictGrabMouseWithShift = 2
使用鼠标加Shift进行取词
2.3   Enum XDictGrabPluginPriorityEnum 设定插件的优先级
Const XDictGrabPriorityChief = 4
Const XDictGrabPriorityGeneral = 1
Const XDictGrabPriorityNormal = 2
Const XDictGrabPrioritySpecial = 3
3 示例代码(使用VB6实现)
3.1 新建一个工程,并且在Refernce(引用)当中添加对XdictGrb 1.0 Type Library (XdictGrb.dll) 的引用。 我在添加引用的时候出现一些错误,显示无法添加引用。这个时候可能是因为金山词霸运行的问题,我的解决方法是将这个动态库拷贝到另外一个位置,然后运行regsvr32进行注册就可以了。
3.2 在窗体Form1中添加以下代码,其中的QueryWord方法将取词的一些结果写入到了VB的立即常口中。
'定义一个类
Dim gp As GrabProxy
'继承
Implements IXDictGrabSink
Dim dwCookie As Long


Private Sub Form_Load()
'创建一个新实例
    Set gp = New GrabProxy
    '在 gp 里面有一些相关属性

'例如:GrabInterval    GrabMode    GrabEnabled    GrabFlag
    '指 抓取时间间隔、模式(鼠标是否加按键)、有效、标志(不抓取中文/标题/菜单/按钮)
    gp.GrabInterval = 0.5
    gp.GrabMode = XDictGrabMouseWithCtrl
    gp.GrabEnabled = True
    '设置属性后,把接口指向自身
   dwCookie = gp.AdviseGrab(Me)
End Sub

Private Function IXDictGrabSink_QueryWord(ByVal WordString As String, ByVal lCursorX As Long, ByVal lCursorY As Long, ByVal SentenceString As String, lLoc As Long, lStart As Long) As Long
     Debug.Print "WordString:" + WordString + Chr(10) + Chr(13) _
                 ; "SentenceString:" + SentenceString + Chr(10) + Chr(13) _
                 ; "lCursorX:" + Str(lCursorX) + Chr(10) + Chr(13) _
                 ; "lCursorY:" + Str(lCursorY) + Chr(10) + Chr(13) _
                 ; "lLoc:" + Str(lLoc) + Chr(10) + Chr(13) _
                 ; "lStart:" + Str(lStart) + Chr(10) + Chr(13) _
                 + "===========================================" + Chr(10) + Chr(13)
     '这个函数的返回值还不太清楚
     QueryWord = 1
End Function

Private Sub Form_Unload(Cancel As Integer)
     gp.UnadviseGrab dwCookie
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值