Ошибка с вызовом oleacc.dll - ошибка доступа запрещена 80020009

0

Я пишу скрипт функционального теста для клиентского приложения от поставщика, который использует встроенные элементы управления 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 Struct.

* $ LResult - это дескриптор внутреннего/встроенного элемента управления Internet Explorer_Server.

* Данные в позиции массива $ aRet [4] - это объект.

* Ошибка до Return $oIE.Document.parentwindow

Теги:
dll
call
functional-testing
autoit

1 ответ

-3

Попробуй использовать

#include <IE.au3>

$oIE = _IEAttach("[REGEXPTITLE:ICQ; INSTANCE:2]", "embedded", 3)

В этом примере показано, как подключиться к ICQ-клиенту, использующему встроенный элемент управления IE.

  • 1
    _IEAttach () Сбой, поэтому мне пришлось использовать корневой код.
  • 0
    Вы на 100% уверены, что нацеливаете правильное окно? используйте _IEErrorHandlerRegister, чтобы увидеть, почему это не удается.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню