我有一个任务,其中包括抓取一些位于第三方ActiveX组件内部的文本,这些文件使用“OBJECT id = S_DetectCom codeBase = xxxx.cab ...”嵌入到Internet Explorer网页中。处理IE窗口中的ActiveX组件
我有具有.cab文件的ActiveX DLL文件(4 DLL)的
我不熟悉的OLE和ActiveX,但做了一些研究和试验,我可以通过以下步骤获得一个IDispatch到ActiveX对象: -
1-获得具有“Internet Explorer_Server”类的IE选项卡的句柄
2- GET的IHTMLDocument2使用ObjectFromLresult
3-从的IHTMLDocument2
得到IHTMLElementCollection4-获取IDispatch接口从IHTMLElementCollection用的名字 “S_DetectCom”
元素是什么样的想法,正从类型库DLL知道方法,...和他们的参数 通过尝试和错误发现哪些DLL在驾驶室嵌入到该网页
现在我卡住了,因为我不知道如何达到调用至 从IDispatch接口调用方法,我得到
我会很感激,如果有人能帮助我的想法和执行下面的代码是一部分如果您使用WM_HTML_GETOBJECT得到HTML文件HWND从
int msg;
DWORD lRes = NULL ;
IHTMLDocument2 *pDoc= NULL;
IHTMLElementCollection *pElement = NULL ;
IHTMLInputTextElement *ppvInput ;
IDispatch *ppvDisp;
ITypeInfo *TypeInfo = NULL ;
VARIANT ObjName ;
_variant_t index = NULL;
HRESULT hr;
LRESULT lr ;
UINT cntTypeInf= NULL ;
long pItems = NULL;
BSTR pszOptText[200];
OleInitialize(NULL);
msg = RegisterWindowMessage(L"WM_HTML_GETOBJECT");
lr = SendMessageTimeout(hwnd, msg, 0, 0, SMTO_ABORTIFHUNG, 1000, &lRes);
hr = ObjectFromLresult((LRESULT)lRes, IID_IHTMLDocument2, 0, (void**)&pDoc);
hr = pDoc->get_all(&pElement);
BSTR BStrObjName = _com_util::ConvertStringToBSTR((const char *)"S_DetectCom");
ObjName.vt = VT_BSTR ;
ObjName.bstrVal = BStrObjName ;
hr = pElement->item(ObjName , index , &ppvDisp);
if (hr == S_OK && ppvDisp)
{
hr = ppvDisp->GetTypeInfoCount(&cntTypeInf);
hr = ppvDisp->GetTypeInfo(NULL , NULL , &TypeInfo);
// to do here
}
你可以指定更多,你指的是“期望的调用者”,以及当前线程意味着什么? – motash
大多数ActiveX是为UI线程内的调用设计的STA对象。 –