Автор Тема: [Баг] Дескриптор окна с цифровым заголовком  (Прочитано 6969 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия 3.3.10.0 - 3.3.13.10 beta.

Код: AutoIt [Выделить]
MsgBox(0, "", WinGetHandle("192"))
MsgBox(0, "", WinGetHandle("192.txt — Блокнот"))
MsgBox(0, "", WinGetHandle("192.168.0.1 - Server"))

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

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


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

сообщит о наличии окна при его фактическом отсутствии.

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

Русское сообщество AutoIt

[Баг] Дескриптор окна с цифровым заголовком
« Отправлен: Июль 27, 2014, 16:32:05 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7788
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
На 3.3.10.2 также?


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224

  • Автор темы
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
CreatoR  [?]
Цитировать
На 3.3.10.2 также?
Да. И на 3.3.12.0 тоже.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7788
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
InnI  [?]
Цитировать
Да. И на 3.3.12.0 тоже.
У меня подобное наблюдается только если скрипт не x64...
Код: AutoIt [Выделить]
#AutoIt3Wrapper_UseX64=n


Русское сообщество AutoIt

Re: [Баг] Дескриптор окна с цифровым заголовком
« Ответ #3 Отправлен: Июль 27, 2014, 17:16:18 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7788
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Код: AutoIt [Выделить]
WinList("192.168.0.1 - Server")

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

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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224

  • Автор темы
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
CreatoR  [?]
Цитировать
подобное наблюдается только если скрипт не x64
Возможно. У меня Win7 x86 и AutoIt, соответственно, 32-битный.

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

Но всё-таки...

Онлайн inververs [?]

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

Имхо, это не баг.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224

  • Автор темы
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
inververs  [?]
Цитировать
находит именно хэндлы
Но у меня в системе нет окон с такими дескрипторами. Это подтверждает WinList(), а также сторонние утилиты.

Цитировать
преобразует в число
"192.168.0.1 - Server" - это строка
Код: AutoIt [Выделить]
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

Не понимаю, зачем её принудительно переводить в число :think:


Добавлено: Июль 27, 2014, 19:51:42
Кстати, версия 3.3.8.0 искала окна только при явном указании дескриптора
Код: AutoIt [Выделить]
MsgBox(0, "", WinExists(0x000000C0)) ; 0
MsgBox(0, "", WinExists(HWnd(0x000000C0))) ; 1

Вот это я считаю правильным. Но как же она находит несуществующий дескриптор?! :stars:
« Последнее редактирование: Июль 27, 2014, 19:51:42 от InnI, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: [Баг] Дескриптор окна с цифровым заголовком
« Ответ #7 Отправлен: Июль 27, 2014, 19:37:05 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7788
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
inververs  [?]
Цитировать
192 это как раз хэндл 0x000000C0
Да но с другими цифрами это не "работает", значит заголовок не преобразовывается в дескриптор.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7788
  • Репутация: 2278
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
И что самое странное, так это то что на x64 и на ранних версиях этого не происходит...

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3680
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Да, скорее всего это ошибка в функции WinGetHandle.

Скорблю и помню.




Онлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2056
  • Репутация: 448
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Garrett  [?]
Цитировать
Да, скорее всего это ошибка в функции WinGetHandle.
Да
Вот так с любым окном:\
Код: AutoIt [Выделить]
$h = WinGetHandle('[CLASS:CalcFrame]')
ConsoleWrite('Оригинальный ' & $h & @CRLF)
$hLo = _WinAPI_LoWord($h)
ConsoleWrite('Что находит: ' & WinGetHandle($hLo) & @CRLF)

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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224

  • Автор темы
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо anonymous за созданный тикет #2820. Там уже дискуссия началась.

Онлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2056
  • Репутация: 448
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Баг будет закрыт в версии 3.3.13.14.
Забавно, что этот баг тянятся с версии 3.3.8.0, но был замечен только сейчас.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3224

  • Автор темы
  • Репутация: 848
    • Награды
  • Версия AutoIt: 3.3.14.0
В релизе 3.3.14.0 ошибка исправлена.

Русское сообщество AutoIt

Re: [Баг] Дескриптор окна с цифровым заголовком
« Ответ #14 Отправлен: Август 12, 2015, 13:27:07 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
2650 Просмотров
Последний ответ Ноябрь 16, 2009, 13:58:03
от Suppir
2 Ответов
2324 Просмотров
Последний ответ Декабрь 23, 2011, 00:56:04
от madmasles
8 Ответов
3484 Просмотров
Последний ответ Февраль 22, 2012, 16:49:54
от at
8 Ответов
2361 Просмотров
Последний ответ Июнь 02, 2014, 18:09:32
от bistriy
16 Ответов
3102 Просмотров
Последний ответ Июнь 10, 2015, 17:26:25
от InnI
10 Ответов
2469 Просмотров
Последний ответ Февраль 07, 2016, 18:01:49
от SharkyEXE
3 Ответов
1277 Просмотров
Последний ответ Февраль 29, 2016, 15:13:50
от InnI
5 Ответов
825 Просмотров
Последний ответ Апрель 27, 2016, 23:06:37
от sngr
4 Ответов
621 Просмотров
Последний ответ Июнь 20, 2016, 17:38:36
от Anna
4 Ответов
391 Просмотров
Последний ответ Январь 24, 2017, 11:10:06
от inververs