Что нового

Преобразование из integer в handle периодически выдает 0x00000000

beaver

Новичок
Сообщения
58
Репутация
2
Всем доброго времени суток.
Ситуация следующая: автоматизируемая программа выдает моему скрипту хендлы контролов в формате integer. Далее скрипт их преобразует к типу "хендл" и скрипт работает с контролами посредством полученных значений. Все до элементарности просто. Однако, строка с преобразованием переодически выдает вместо требуемого значения 0х00000000. Причем такое воспроизводится только на определенных компьютерах. Вот строка с преобразованием:
Код:
If IsInt($aControlHandle[0]) Then
	MsgBox(64,"Значение до", $aControlHandle[0])
	Local $hControlHandle = HWnd($aControlHandle[0])
	MsgBox(64,"Значение после", $hControlHandle)
EndIf


Помогите пожалуйста из-за чего может иногда нулевое значение после преобразования?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
beaver [?]
из-за чего может иногда нулевое значение после преобразования?
Ну это просто, передаваемое значение не является дескриптером (Handle). Проверяй значение предварительно.

Код:
If $aControlHandle[0] <> 0 And IsInt($aControlHandle[0]) Then
 
Автор
B

beaver

Новичок
Сообщения
58
Репутация
2
Это было бы слишком просто. В том то и дело, что на вход приходит не нулевое значение.
Например сегодня был случай когда в массиве было значение 11994076, а сразу после преобразования в хендл оно стало нулевым. Причем происходит такое обнуление не сразу, а после некоторого количества успешных преобразований в хендл.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
В AutoIt есть две функции для преобразования числа в указатель: HWnd() и Ptr(). Первая отличается от второй тем, что возвращает только существующий указатель окна. Ptr() тупо преобразует число в шестнадцатиричный вид размером с указатель и присваевает ему тип "Ptr". Другими словами, если на данный момент окна с данным указателем нет, то функция HWnd() врозвращает нулевой указатель - Ptr(0).

P.S

Кстати, об этом написано в справке.
 
Верх