gpt4 book ai didi

c - 处理 IE 窗口内的 ActiveX 组件

转载 作者:行者123 更新时间:2023-11-30 18:05:06 27 4
gpt4 key购买 nike

我有一个任务,其中包括使用“OBJECT id=S_DetectCom codeBase=xxxx.cab ...”抓取嵌入在 Internet Explorer 网页中的第三方 ActiveX 组件内的一些文本

我的 .cab 文件包含 activeX dll(4 个 dll)

我不熟悉OLE和activeX,但是做了一些研究和试验,我可以通过以下步骤获得ActiveX对象的IDispatch:-

1- 获取具有“Internet Explorer_Server”类的 IE 选项卡的句柄

2-使用ObjectFromLresult获取IHTMLDocument2

3-从 IHTMLDocument2 获取 IHTMLElementCollection

4- 从 IHTMLElementCollection 获取元素名为“S_DetectCom”的 IDispatch

我们想要的是从 DLL 中获取类型库来了解方法,...以及它们的参数通过尝试和错误找到cab中的哪个dll嵌入到该网页中

现在我陷入困境,因为我不知道如何到达 Invoke 来调用我得到的 IDispatch 中的方法

如果有人可以帮助我提出想法和实现,我将不胜感激,下面是从 hwnd 获取 IDispatch 的代码部分

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

}

最佳答案

如果您使用 WM_HTML_GETOBJECT 来获取 HTML 文档,那么您绝对不是预期的调用者,因为您已脱离当前线程。 ActiveX 可能不是线程安全的。

无论如何,如果您可以获得在 IE 的 Tab 线程中执行的代理插件(可能通过安装 BHO),here are the steps访问 ActiveX 的属性和方法。它用于访问 Adob​​e Flash ActiveX,但您可以更改导入语句中的文件名以从 ocx 文件导入接口(interface)。

关于c - 处理 IE 窗口内的 ActiveX 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com