金山词霸中有XdictGrb.dll包含了IGrabProxy和IXDictGrabSink接口,同过IGrabProxy的AdviseGrab(IXDictGrabSink *pSink)方法就可以启动屏幕取词,要截获取词内容的话,就必须在自己的程序中写了个接口类来继承IXDictGrabSink,代码如下:// MyDictGrabSink.h : Declaration of the CMyDictGrabSink
#include "resource.h" // main symbols
#import "C:\Program Files\Kingsoft\PowerWord 2005\XdictGrb.dll" no_namespace /////////////////////////////////////////////////////////////////////////////
// CMyDictGrabSink
class ATL_NO_VTABLE CMyDictGrabSink :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyDictGrabSink, &CLSID_MyDictGrabSink>,
public IDispatchImpl<IMyDictGrabSink, &IID_IMyDictGrabSink, &LIBID_Demo>
{
public:
CMyDictGrabSink()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_MYDICTGRABSINK)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CMyDictGrabSink)
COM_INTERFACE_ENTRY(IMyDictGrabSink)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY2(IXDictGrabSink, IMyDictGrabSink)
END_COM_MAP()// IMyDictGrabSink
public:
};
在对话框的OnInitDialog函数中我写了如下启动取词的代码
#include "MyDictGrabSink.h"
#import "C:\Program Files\Kingsoft\PowerWord 2005\XdictGrb.dll" no_namespace BOOL CDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog(); ...
...
... // TODO: Add extra initialization here
CComPtr<IGrabProxy> grab;
grab.CoCreateInstance(__uuidof(GrabProxy));
CComPtr<IXDictGrabSink> sink;
sink.CoCreateInstance(__uuidof(MyDictGrabSink)); grab->PutGrabInterval(1);
grab->put_GrabMode(XDictGrabMouse );
grab->put_GrabEnabled(TRUE);
grab->AdviseGrab(sink);
return TRUE; // return TRUE unless you set the focus to a control
}
编译后运行出错,不知道为什么,有人能解决吗,我给500分,更多的分都可以
#include "resource.h" // main symbols
#import "C:\Program Files\Kingsoft\PowerWord 2005\XdictGrb.dll" no_namespace /////////////////////////////////////////////////////////////////////////////
// CMyDictGrabSink
class ATL_NO_VTABLE CMyDictGrabSink :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyDictGrabSink, &CLSID_MyDictGrabSink>,
public IDispatchImpl<IMyDictGrabSink, &IID_IMyDictGrabSink, &LIBID_Demo>
{
public:
CMyDictGrabSink()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_MYDICTGRABSINK)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CMyDictGrabSink)
COM_INTERFACE_ENTRY(IMyDictGrabSink)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY2(IXDictGrabSink, IMyDictGrabSink)
END_COM_MAP()// IMyDictGrabSink
public:
};
在对话框的OnInitDialog函数中我写了如下启动取词的代码
#include "MyDictGrabSink.h"
#import "C:\Program Files\Kingsoft\PowerWord 2005\XdictGrb.dll" no_namespace BOOL CDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog(); ...
...
... // TODO: Add extra initialization here
CComPtr<IGrabProxy> grab;
grab.CoCreateInstance(__uuidof(GrabProxy));
CComPtr<IXDictGrabSink> sink;
sink.CoCreateInstance(__uuidof(MyDictGrabSink)); grab->PutGrabInterval(1);
grab->put_GrabMode(XDictGrabMouse );
grab->put_GrabEnabled(TRUE);
grab->AdviseGrab(sink);
return TRUE; // return TRUE unless you set the focus to a control
}
编译后运行出错,不知道为什么,有人能解决吗,我给500分,更多的分都可以
解决方案 »
- 散分9
- 怎么用VC的资源编辑器做中英文版界面?
- 关于创建基于对话框类的疑问????(当然,是初级初级疑问,呵呵)
- 视频上叠加线条的抖动问题
- 有关combobox控件显示由编辑框送来的字符的问题
- 用ShFormatDriver格式化时,要隐藏显示与格式化有关的窗体,怎样实现?
- Word文件如何做成.hlp文件?
- 兄弟们!vc技术内幕(第4版)看了前4章,没有一点感觉,我该怎么办!
- 一个工程如何build出多个exe文件?
- GetFont()获得CFont,如何从CFont得到字体的大小?
- 小弟入门,问个简单的问题
- unexpected end of file while looking for precompiled header directive windows 编程不能添加函数?
{
// Initialize OLE libraries
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
} if (!InitATL())
return FALSE;
上面的代码包含CoInit吗,vcmute(横秋)
grab->AdviseGrab(sink);
则程序不出错,当然也不能取词所以grab != NULL