Что нового

Объект 'Shell.Explorer'. Неадекватное поведение EXE'шника на других ПК

ArtistTo

Новичок
Сообщения
42
Репутация
2
Здравствуйте. Написал приложение, которое активно использует COM 'Shell.Explorer'; вот некоторые вырезки:

Код:
#include <IE.au3> ;инициализация библиотеки.
Global $aba = ObjCreate('Shell.Explorer')  ; создание объекта.
$aba.navigate('https://m.mail.ru/login') ; переход.
_IELoadWait($aba, Default, 10000) ; ожидание.

;Авторизация...
$f_a = _IEGetObjById($aba,"login") ; ID поля 'Логин'.
_IEFormElementSetValue($f_a, 'тратата@mail.ru') 
$f_b = _IEGetObjById($aba,"password") ; ID поля 'Пароль'.
_IEFormElementSetValue($f_b, '1234512345')
DllCall('kernel32.dll', 'DWORD', 'Sleep', 'BYTE', 255) ; небольшая пауза.

; Вход с введенными данными.
   $oButtons = _IETagNameGetCollection($aba, 'input') ; получаем элементы.
   For $oButton In $oButtons ; пролистать все кнопки.
	  If $oButton.value = "Войти" Then
		 $oButton.Click() ; клик и выход, если значение кнопки 'войти'.
		 ExitLoop
	  EndIf
   Next





; скомпилировал код. Полученный EXE'шник корректно работает только на том компьютере, на котором он был скомпилирован. При попытке его запуска на любых других компьютерах, начинается бред; программа выдает ошибку 'error variable must be of type object', будто объект не создается и я проделываю операции объекта с пустой переменной $aba.
Я пытался использовать другие объекты:
_IECreateEmbedded;
Shell.Explorer.2;
Run(.... Internet Explorer в приватном режиме) + Атач по URL;
Результат один и тот же: на моем компьютере работает, а на других 'error variable must be of type object'.
Я уже не знаю, что и делать :scratch: Это какой-то ужас для меня ;) Подскажите, в чем может быть суть такого странного поведения? Может у кого-то было что-то подобное?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Ну логично, что  не успевает загружаться, и поэтому $oButtons = _IETagNameGetCollection($aba, 'input') тут нет объекта и следующий цикл  For $oButton In $oButtons  выдает такую ошибку.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
inververs сказал(а):
Код:
Ну логично, что  не успевает загружаться...

Не успевает страница загрузиться? Вполне возможно... Попробую увеличить таймаут ожидания с 10000 до 30000 или более, завтра протестирую и отпишусь.

Действительно, дело было в таймаутах. Поставил проверку перед каждым использованием объекта и увеличил таймаут с 10 сек. до 40 сек., баг прошел)
Код:
if isobj(...) then
else
msgbox(64, 'msg', 'error')
endif
 
Верх