【求助】python可以调用金山词霸屏幕取词吗?

yizhenhua 2011-02-24 11:05:27
rt
...全文
979 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenisme 2011-03-10
  • 打赏
  • 举报
回复
IXDictGrabSink.__init__(self, '{A06978CE-8077-4470-AABC-2A1001DC5DE4}')
看了DispatchBaseClass的初始化函数的代码后,我觉得应该是IXDictGrabSink在初始化的时候,第二个参数传错了。所以才会说got type=str。可我不知道怎么去修改,没有太多python com编程的经验。
mrshelly 2011-03-08
  • 打赏
  • 举报
回复
看起来应该传你的当前窗体对象进去...
stevenisme 2011-03-07
  • 打赏
  • 举报
回复
ValueError: argument is not a COM object (got type=str)
按照你的做法,返回以上错误。该如何解决?
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
ttttt是用makepy.py 将XDictGrab.dll中的代码转换成的support模块,我修改了文件名,才能导入。
我真想把所有文件都上传上来,但公司设置了网络对流出的字节有限制。
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
贴错了,看这个:
import ttttt
import pythoncom

#from win32com.client import gencache
#gencache.EnsureModule('{7E37C9AA-9EBF-4F4C-BB07-4BC3B026B715}', 0, 1, 0)

class MyGrab(object,ttttt.IXDictGrabSink):
def __init__(self):
object.__init__(self)
ttttt.IXDictGrabSink.__init__(self, '{7E37C9AA-9EBF-4F4C-BB07-4BC3B026B715}')
self.gp=ttttt.GrabProxy()
self.gp.GrabInterval=300
self.gp.GrabMode=1
self.gp.GrabEnable=True

# dwCookie =self.gp.AdviseGrab(self)
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iambic 的回复:]
贴python代码。
[/Quote]

class MyGrab(wx.Frame,ttttt.IXDictGrabSink):
def __init__(self,prnt):
wx.Frame.__init__(self, id=111111, name='DoxygenAssist',
parent=prnt, pos=wx.Point(276, 253), size=wx.Size(799, 408),
style=wx.FRAME_SHAPED | wx.SYSTEM_MENU | wx.MINIMIZE_BOX | wx.CAPTION | wx.CLOSE_BOX,
title='DoxygenAssist')
ttttt.IXDictGrabSink.__init__(self, '{7E37C9AA-9EBF-4F4C-BB07-4BC3B026B715}')
self.gp=ttttt.GrabProxy()
self.gp.GrabInterval=300
self.gp.GrabMode=1
self.gp.GrabEnable=True

# dwCookie =self.gp.AdviseGrab(self)
iambic 2011-02-24
  • 打赏
  • 举报
回复
贴python代码。
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
关键是这句:dwCookie = gp.AdviseGrab(Me)
python中如果传入self,会提示类型错误
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
Imports XDICTGRB '引用命名空间
Public Class Form1
Implements IXDictGrabSink '继承 '引用DLL中的方法
'定义一个类
Public gp As GrabProxy 'DLL中的属性
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'创建一个新实例
gp = New GrabProxy
'在gp 里面设置一些相关属性
gp.GrabInterval = 1000 ‘设置取词时间间隔为1秒
gp.GrabMode = 1 ‘设置取词方式为鼠标取词
gp.GrabEnabled = True ‘设置取词功能有效
'设置属性后,把接口指向自身
dwCookie = gp.AdviseGrab(Me)
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
ttttt.py 文件太长了我没法提交,
ttttt.py是在pythonwin 用makepy utility选择XDictGrb(如果有金山词霸的话)生成的
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
#代码改成了这样:
from ttttt import IXDictGrabSink,GrabProxy
import pythoncom
import win32api

class MyGrab(object,IXDictGrabSink):
def __init__(self):
object.__init__(self)
IXDictGrabSink.__init__(self, '{A06978CE-8077-4470-AABC-2A1001DC5DE4}')
self.gp=GrabProxy()
self.gp.GrabInterval=300
self.gp.GrabMode=1
self.gp.GrabEnable=True
self.gp.AdviseGrab(self)


print type(IXDictGrabSink)
a=MyGrab()
while True:
curX,curY=win32api.GetCursorPos()
a.gp.GrabWord(curX,curY)
yizhenhua 2011-02-24
  • 打赏
  • 举报
回复
<type 'classobj'>
Traceback (most recent call last):
File "D:\pyWorkspace\test1\src\11.py", line 23, in <module>
a=MyGrab()
File "D:\pyWorkspace\test1\src\11.py", line 19, in __init__
self.gp.AdviseGrab(self)
File "D:\pyWorkspace\test1\src\ttttt.py", line 49, in AdviseGrab
return self._oleobj_.InvokeTypes(7, LCID, 1, (3, 0), ((9, 1),),XDictGrabSink
ValueError: argument is not a COM object (got type=str)
iambic 2011-02-24
  • 打赏
  • 举报
回复
完整出错信息是什么?

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

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