"OBJECT id = S_DetectCom codeBase = xxxx.cab ..."를 사용하여 Internet Explorer 웹 페이지에 포함 된 타사 ActiveX 구성 요소 안에있는 일부 텍스트를 가져 오는 작업이 있습니다.IE 창에서 ActiveX 구성 요소를 처리하는 중
내가이 .CAB 파일을 갖는 액티브 X DLL을 (4 DLL을)
내가 OLE 및 ActiveX에 익숙하지 않은 해요,하지만 약간의 연구와 실험을하고, 내가 다음 단계로 ActiveX 객체에의 IDispatch를 얻을 수 있습니다 : -
1- "Internet Explorer_Server"클래스를 가진 IE 탭에 대한 핸들 얻기
ObjectFromLresult
를 사용하여2 GET IHTMLDocument2에 3 IHTMLDocument2에
에서 IHTMLElementCollection를 얻을3- GET IDispatch를 염두에 무슨 일이 있을지
"S_DetectCom"이름의 요소의 형식 라이브러리를 얻고있다와 IHTMLElementCollection에서 메서드와 ... 및 해당 매개 변수를 알기위한 DLL try 및 error를 통해 택시의 dll이 해당 웹 페이지에 포함되어 있는지 확인합니다.
현재 Invoke에 도달하는 방법을 모르므로 ~까지 의 IDispatch에서 호출 방법은 내가
있어누군가가 아이디어 나에게 도움이 될 수 아래 구현 당신이 HTML 문서를 얻을 수 WM_HTML_GETOBJECT를 사용하는 경우 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 개체입니다. –