我正在为使用Internet Explorer_Server
嵌入式控件的供应商的基于客户端的应用程序编写功能测试脚本。我很难尝试获取该对象,以便我可以读取它的 HTML 并验证信息。我能够获取内部控件的句柄,并且我正在尝试使用 oleacc.dll 的 ObjectFromLresult 函数来获取对象。唉,由于 80020009 访问被拒绝,它失败了。
我希望能让这个工作,或者至少确切地知道它为什么会失败。这是代码:
DllCall("ole32.dll", "long", "CoInitialize", "ptr", 0)
Local $typUUID = DllStructCreate("int;short;short;byte[8]")
DllStructSetData($typUUID, 1, 0x626FC520)
DllStructSetData($typUUID, 2, 0xA41E)
DllStructSetData($typUUID, 3, 0x11CF)
DllStructSetData($typUUID, 4, 0xA7, 1)
DllStructSetData($typUUID, 4, 0x31, 2)
DllStructSetData($typUUID, 4, 0x0, 3)
DllStructSetData($typUUID, 4, 0xA0, 4)
DllStructSetData($typUUID, 4, 0xC9, 5)
DllStructSetData($typUUID, 4, 0x8, 6)
DllStructSetData($typUUID, 4, 0x26, 7)
DllStructSetData($typUUID, 4, 0x37, 8)
If IsDllStruct($typUUID) Then
ConsoleWrite("$typUUID is a DLL Struct." & @LF)
Else
ConsoleWrite("$typUUID is NOT a DLL Struct." & @LF)
EndIf
$lResult = 49263
Local $aRet = DllCall("oleacc.dll", _
"long", "ObjectFromLresult", _
"lresult", $lResult, _
"struct*", $typUUID, _
"wparam", 0, _
"idispatch*", 0)
If @error Then Return SetError(3, @error, 0)
If IsObj($aRet[4]) Then
ConsoleWrite("$aRet[4] is an object!" & @lf)
Local $oIE = $aRet[4] .Script()
; $oIE is now a valid IDispatch object
Return $oIE.Document.parentwindow
Else
Return SetError(1, $aRet[0], 0)
EndIf
一些注意事项:
*IsDllStruct 检查成功并报告 $typUUID 是一个 Dll 结构。
*$lResult 是 Internet Explorer_Server 内部/嵌入式控件的句柄。
*数组位置$aRet[4]中的数据是一个对象。
*直到没有错误Return $oIE.Document.parentwindow