0

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

4

1 に答える 1