Internet Explorer_Server
組み込みコントロールを使用するベンダーのクライアント ベース アプリケーション用の機能テスト スクリプトを作成しています。HTML を読み取って情報を確認できるようにオブジェクトを取得するのに苦労しています。内部コントロールのハンドルを取得でき、oleacc.dll の ObjectFromLresult 関数を使用してオブジェクトを取得しようとしています。残念ながら、80020009 Access is Denied が原因で失敗しています。
私はこれが機能することを望んでいます、または少なくともそれが失敗した理由を正確に知りたいです。コードは次のとおりです。
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