Что нового

Обработка критических ошибок

badhabit

Новичок
Сообщения
36
Репутация
0
День добрый. У меня следующая ситуация.
Мой скрипт отслеживает появление окна.
Код:
$hwnd = WinGetHandle("User Message")
if not @error and $hwnd then
WinActivate($hwnd)
	Sleep(500)
	$aPos = WinGetPos($hwnd)
	If @error Then
		AddLog("	WinGetPos(): failed.")
	Else
		$pxl = PixelSearch($aPos[2] - 7, $aPos[3] - 7, $aPos[2] / 2, $aPos[3] / 2, 0x0, 0, 1, $hwnd)
        endif

так вот, есть еще одна прога, которая может успеть закрыть окошко в период между $hwnd = WinGetHandle("User Message") и $aPos = WinGetPos($hwnd)
и следовательно скрипт у меня крашится на $pxl = PixelSearch($aPos[2] - 7, $aPos[3] - 7, $aPos[2] / 2, $aPos[3] / 2, 0x0, 0, 1, $hwnd) потому что окошка у же нет и aPos[].
Можно как-нибудь сделать подобие On Error Resume Next или try() - exept() чтобы просто пропустить эту ошибку и не крашить скрипт?
 

InnI

AutoIT Гуру
Сообщения
4 462
Репутация
1 208
badhabit
и следовательно
Из данного конкретного примера это не следует. Если при вызове WinGetPos() окно не будет найдено, то сработает @error, и Else не выполнится.

как-нибудь сделать
Классическая проверка перед обращением к элементам массива - это проверка на массив IsArray(). Далее, при необходимости, идут ужесточения: проверки на размер массива и/или на количество элементов
Код:
If IsArray($aPos) And UBound($aPos) = 4 Then $pxl = PixelSearch($aPos[2] - 7, $aPos[3] - 7, $aPos[2] / 2, $aPos[3] / 2, 0x0, 0, 1, $hwnd)



Добавлено:
Сообщение автоматически объединено:

Как предотвратить критические ошибки скрипта?
Как отловить критические ошибки скрипта?
 
Автор
B

badhabit

Новичок
Сообщения
36
Репутация
0
InnI сказал(а):
badhabit
и следовательно
Из данного конкретного примера это не следует. Если при вызове WinGetPos() окно не будет найдено, то сработает @error, и Else не выполнится.

как-нибудь сделать
Классическая проверка перед обращением к элементам массива - это проверка на массив IsArray(). Далее, при необходимости, идут ужесточения: проверки на размер массива и/или на количество элементов
Код:
If IsArray($aPos) And UBound($aPos) = 4 Then $pxl = PixelSearch($aPos[2] - 7, $aPos[3] - 7, $aPos[2] / 2, $aPos[3] / 2, 0x0, 0, 1, $hwnd)



Добавлено:
Сообщение автоматически объединено:

Как предотвратить критические ошибки скрипта?
Как отловить критические ошибки скрипта?




Спасибо, попробую. Вот точная ошибка с которой вываливается скрипт:
Код:
"C:\zzz\xxx.au3" (235) : ==> Subscript used on non-accessible variable.:
$pxl = PixelSearch($aPos[2] - 7, $aPos[3] - 7, $aPos[2] / 2, $aPos[3] / 2, 0x0, 0, 1, $hwnd)
$pxl = PixelSearch($aPos^ ERROR
11/17 12:18:51: Zzz OnExit()
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
badhabit

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Верх