程序需要获取鼠标下已打开Word的内容,只要获取_Application的接口就可以了。搞了半天,终于知道使用AccessibleObjectFromWindow函数可以实现。MSDN上讲的不清楚,还是在google上找到了答案。AccessibleObjectFromWindow可以获取好多其他类型的UI对象,特别是对于COM类型,又有特殊UI的情况,很合适,比如微软的DirectUI,但是没测试啊,只是猜测。把这段代码贴一下,以后搜索起来也方便。
const int OBJID_NATIVEOM = 0xFFFFFFF0;//该值可以在头文件里找到
CComPtr<IDispatch> spDisp;//获取Word的Window对象的智能指针
Windows m_Win;//定义Word的Windows对象
if (S_OK == AccessibleObjectFromWindow( hwnd, OBJID_NATIVEOM, IID_IDispatch, (void**) &spDisp)){//hwnd就是需要获取的窗口句柄
m_Win.AttachDispatch(spDisp);//成功了
m_App.AttachDispatch(m_Win.GetApplication());//m_App是Word的应用程序对象
………………
有两个函数我搞混了,纪录一下,一个是IIDFromString,获取IID用的,开始我想获取Word的应用程序的GUID,使用了这个,但是应该用这个函数CLSIDFromProgID。
比如:
CLSID clsid;
HRESULT hr;
hr=::CLSIDFromProgID(L"Word.Application",&clsid); //通过ProgID取得CLSID
以后不要搞混了。
const int OBJID_NATIVEOM = 0xFFFFFFF0;//该值可以在头文件里找到
CComPtr<IDispatch> spDisp;//获取Word的Window对象的智能指针
Windows m_Win;//定义Word的Windows对象
if (S_OK == AccessibleObjectFromWindow( hwnd, OBJID_NATIVEOM, IID_IDispatch, (void**) &spDisp)){//hwnd就是需要获取的窗口句柄
m_Win.AttachDispatch(spDisp);//成功了
m_App.AttachDispatch(m_Win.GetApplication());//m_App是Word的应用程序对象
………………
有两个函数我搞混了,纪录一下,一个是IIDFromString,获取IID用的,开始我想获取Word的应用程序的GUID,使用了这个,但是应该用这个函数CLSIDFromProgID。
比如:
CLSID clsid;
HRESULT hr;
hr=::CLSIDFromProgID(L"Word.Application",&clsid); //通过ProgID取得CLSID
以后不要搞混了。