Group:  Microsoft Excel ยป microsoft.public.excel.interopoledde
Thread: AccessibleObjectFromWindow to access Excel97->2007 object

AccessibleObjectFromWindow to access Excel97->2007 object
"Eric" <nospam[ at ]noemail.com> 4/17/2007 8:50:51 AM
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





Home | Search | Terms | Imprint
Newsgroups Reader