Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений

Ответить
Настройки темы
Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений
Cem Cem вне форума

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Cem
Дата: 10-08-2014
Описание: Нарушение правил оформления
Доброго времени суток! Помогите, пожалуйста, разобраться (или хотя бы составить) с регулярными выражениями.
Дано:
1).Существует окно, имеющее класс: Afx:0000000000400000:0:0000000000000000:0000000001900015:000000001234CDEF
2).Первая часть неизменна: Afx:0000000000400000:0:0000000000000000:0000000001900015:00000000
3).Вторая часть состоит из 8 шестнадцатиричных символов.

Задача: Выловить дескриптор окна.

Код: Выделить весь код
$sHandle = WinGetHandle("[REGEXPCLASS:(Afx:0000000000400000:0:0000000000000000:0000000001900015:00000000\x)")
MsgBox(4096, "", $sHandle)
Какие только варианты не пробовал, но... ни лыжи... и я...

Отправлено: 18:40, 10-08-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$sHandle = WinGetHandle("[REGEXPCLASS:Afx:0000000000400000:0:0000000000000000:0000000001900015:000000000[0-9a-fA-F]{8}]")
MsgBox(4096, "", $sHandle)
или:
Код: Выделить весь код
$sHandle = WinGetHandle("[REGEXPCLASS:Afx:0000000000400000:0:0000000000000000:0000000001900015:000000000(?i)[\da-f]{8}]")
MsgBox(4096, "", $sHandle)

Отправлено: 19:16, 10-08-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ. Однако, я пробовал оба эти варианта.

При таком раскладе:
Код: Выделить весь код
$sHandle = WinGetHandle("[CLASS:Afx:0000000000400000:0:0000000000000000:0000000001900015:0000000004A80869]")
MsgBox(4096, "", $sHandle)
Выдает результат: 0x00A30670

А при
Код: Выделить весь код
$sHandle = WinGetHandle("[REGEXPCLASS:Afx:0000000000400000:0:0000000000000000:0000000001900015:00000000[0-9a-fA-F]{8}]")
MsgBox(4096, "", $sHandle)
или
Код: Выделить весь код
$sHandle = WinGetHandle("[REGEXPCLASS:Afx:0000000000400000:0:0000000000000000:0000000001900015:000000000(?i)[\da-f]{8}]")
MsgBox(4096, "", $sHandle)
МесенжБокс пустой.

Может забыл что-то подключить
Код: Выделить весь код
#include ???
не пойму...

Отправлено: 19:37, 10-08-2014 | #3

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Упростил эксперимент: взял калькулятор
CLASS:CalcFrame

Код: Выделить весь код
$Hand = WinGetHandle("[CLASS:CalcFrame]")
MsgBox(4096, "", $Hand)
Результат: 0х01DB086E

Код: Выделить весь код
$Hand = WinGetHandle("[REGEXPCLASS:CalcFrame]")
MsgBox(4096, "", $Hand)
;либо
$Hand = WinGetHandle("[REGEXPCLASS:[A-Za-z]{9}]")
MsgBox(4096, "", $Hand)
Результат: пустой месенджбокс

Отправлено: 20:05, 10-08-2014 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Cem,
Предупреждение за нарушение правил форума, пункт 2.7 и пункт 3.19:

Цитата:
2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный и напишите об этом в теме.
Переименуйте пожалуйста тему (Как переименовать свою тему?).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:08, 10-08-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Cem:
Результат: пустой месенджбокс »
Смотрите:

разве что у меня в Windows XP иной класс окна «calc.exe». Второй код тоже работает, другое дело, что совпадёт не только с «SciCalc», но и с любым другим подходящим окном.

Давайте уточним, о каком именно приложении и о каком его окне идёт речь?

Отправлено: 20:28, 10-08-2014 | #6

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Совсем неважно какое приложение, это не единичный случай.
Картина такая вот:






При всём этом REGEXPTITLE работает прекрасно
???

Последний раз редактировалось Cem, 10-08-2014 в 21:30.


Отправлено: 21:25, 10-08-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Cem, вижу.

В порядке бреда: разницы нет, собираете Вы x86 или x64 итоговое приложение?! У меня x86 ОС — потому проверить не могу.

Отправлено: 21:47, 10-08-2014 | #8

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Стоит Семёрка 64-битная. Может действительно, что-то ей не нравится в определении классов?... В целом с REGEXPTITLE все регулярные выражения работают на "Ура!".

Отправлено: 21:59, 10-08-2014 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Cem:
Стоит Семёрка 64-битная. »
Я это понял по длине хэндла.

Цитата Cem:
Может действительно, что-то ей не нравится в определении классов?... »
Шут его знает. Я потому и говорю: попробуйте скомпилировать исполняемый файл сначала в x86 и проверить именно посредством запуска этого скомпилированного исполняемого файла, а затем аналогично скомпилировать в x64 и так же проверить.

Коллеги с сообщества вон нашли некий баг в WinGetHandle: [Баг] Дескриптор окна с цифровым заголовком.

Отправлено: 22:19, 10-08-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
регулярные выражения Ginger Вебмастеру 60 21-03-2012 01:11
Java - Регулярные выражения Java ValVlaGen Программирование и базы данных 0 19-10-2009 08:06
Прочее - grep регулярные выражения dogidogi Общий по Linux 8 28-05-2009 22:54
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход