|
|
Hello,
To gain control of a running instance of Excel, I choose to use AccessibleObjectFromWindow API to avoid mulitple instance issue. Starting from Excel 2000, I successfully retrieve IDispatch for Excel Native object (OBJID_NATIVEOM).
How could I improve backward compatibility to Excel 97 ?
I try :
1-> hr=AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IDDispatch, (void**) &pDisp); hr2=pDisp->GetIDsOfNames(IID_NULL, L"Application", 1, LOCALE_USER_DEFAULD, dispID);
2-> same as 1 except OBJID_WINDOW replace by 0
3-> hr=AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible, (void**) &pAcc); hr1=pAcc->QueryInterface( IID_IDDispatch, (void**) &pDisp); hr2=pDisp->GetIDsOfNames(&IID_NULL, L"Application", 1, LOCALE_USER_DEFAULD, &dispID);
4-> same as 3 except OBJID_WINDOW replace by 0
5-> hr=AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IUnknow, (void**) &pUnk); hr1=pUnk->QueryInterface( IID_IDDispatch, (void**) &pDisp); hr2=pDisp->GetIDsOfNames(&IID_NULL, L"Application", 1, LOCALE_USER_DEFAULD, &dispID);
6-> same as 5 except OBJID_WINDOW replace by 0
For each, hr and hr1 are S_OK which means that pDisp points to some OLE object but I can't figure out how to get dispID. Every call results to dispID = FFFFFFFF.
hwnd is a EXCEL7 class window. I also try to change hwnd to a XLMAIN class window. Same result : Failed.
It's frustrating because I do point to some OLE object but which one, I don't know. Any thoughts ?
thanks
Eric
|
|
|