金山词霸中有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分,更多的分都可以