Что нового

[Баг] Дескриптор окна с цифровым заголовком

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Версия 3.3.10.0 - 3.3.13.10 beta.

Код:
MsgBox(0, "", WinGetHandle("192"))
MsgBox(0, "", WinGetHandle("192.txt — Блокнот"))
MsgBox(0, "", WinGetHandle("192.168.0.1 - Server"))

При отсутствии окон с подобными заголовками - будет выведен дескриптор 0x000000C0.

Проверяю наличие найденного окна
Код:
#include <Array.au3>
$ar = WinList()
_ArraySort($ar, 0, 0, 0, 1)
_ArrayDisplay($ar)


Оказывается, у меня в системе нет окна с дескриптором 0x000000C0, но есть окно с дескриптором 0x000300C0. Причём подобным образом ведут себя и другие Win*-функции. Например
Код:
MsgBox(0, "", WinExists("192.168.0.1 - Server"))
сообщит о наличии окна при его фактическом отсутствии.

На версии 3.3.8.0 подобной проблемы не было.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
На 3.3.10.2 также?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
WinList("192.168.0.1 - Server")

тоже возвращает окно в списке.

Странно, это как то связано с 192 в начале заголовка...
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
CreatoR [?]
подобное наблюдается только если скрипт не x64
Возможно. У меня Win7 x86 и AutoIt, соответственно, 32-битный.

тоже возвращает окно в списке
В принципе, проблему можно решить полным форматом записи
Код:
WinList("[title:192.168.0.1 - Server]")
Но всё-таки...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Это видимо из-за того, что title может быть title/hWnd/class. А 192 это как раз хэндл 0x000000C0. И поэтому аутоит, не найдя заголовок 192.168.0.1 - Server пытайется найти хэндл, преобразует в число и находит 0x000000C0
Вот такой скрипт, находит именно хэндлы.
Код:
For $i = 1 To 100
	$h = WinGetHandle($i & ' - что тут уже не иммеет значение')
	If $h Then
		ConsoleWrite($i & ' ' & $h & @CRLF)
	EndIf
Next

Имхо, это не баг.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
inververs [?]
находит именно хэндлы
Но у меня в системе нет окон с такими дескрипторами. Это подтверждает WinList(), а также сторонние утилиты.

преобразует в число
"192.168.0.1 - Server" - это строка
Код:
ConsoleWrite(IsInt("192.168.0.1 - Server") & @CRLF) ; 0
ConsoleWrite(IsNumber("192.168.0.1 - Server") & @CRLF) ; 0
ConsoleWrite(IsHWnd("192.168.0.1 - Server") & @CRLF) ; 0
ConsoleWrite(IsString("192.168.0.1 - Server") & @CRLF) ; 1
Не понимаю, зачем её принудительно переводить в число :scratch:


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

Кстати, версия 3.3.8.0 искала окна только при явном указании дескриптора
Код:
MsgBox(0, "", WinExists(0x000000C0)) ; 0
MsgBox(0, "", WinExists(HWnd(0x000000C0))) ; 1
Вот это я считаю правильным. Но как же она находит несуществующий дескриптор?! :stars:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
inververs [?]
192 это как раз хэндл 0x000000C0
Да но с другими цифрами это не "работает", значит заголовок не преобразовывается в дескриптор.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
И что самое странное, так это то что на x64 и на ранних версиях этого не происходит...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Да, скорее всего это ошибка в функции WinGetHandle.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Garrett [?]
Да, скорее всего это ошибка в функции WinGetHandle.
http://autoit-script.ru/index.php?action=reporttm;topic=17374.10;msg=106068
Да
Вот так с любым окном:\
Код:
$h = WinGetHandle('[CLASS:CalcFrame]')
ConsoleWrite('Оригинальный ' & $h & @CRLF)
$hLo = _WinAPI_LoWord($h)
ConsoleWrite('Что находит: ' & WinGetHandle($hLo) & @CRLF)

И похоже не только WinGetHandle глючная, но и все функции Win*
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Спасибо anonymous за созданный тикет #2820. Там уже дискуссия началась.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Баг будет закрыт в версии 3.3.13.14.
Забавно, что этот баг тянятся с версии 3.3.8.0, но был замечен только сейчас.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
В релизе 3.3.14.0 ошибка исправлена.
 
Верх