Войти

Показать полную графическую версию : Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений


Cem
10-08-2014, 18:40
Доброго времени суток! Помогите, пожалуйста, разобраться (или хотя бы составить) с регулярными выражениями.
Дано:
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)

Какие только варианты не пробовал, но... ни лыжи... и я...

Iska
10-08-2014, 19:16
$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)

Cem
10-08-2014, 19:37
Спасибо за ответ. Однако, я пробовал оба эти варианта.

При таком раскладе:
$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 ???
не пойму...

Cem
10-08-2014, 20:05
Упростил эксперимент: взял калькулятор
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)
Результат: пустой месенджбокс

Creat0R
10-08-2014, 20:08
Cem,
Предупреждение за нарушение правил форума, пункт 2.7 (http://forum.oszone.net/rules.html#2.7) и пункт 3.19 (http://forum.oszone.net/rules.html#3.19):

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_thread) и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread) и напишите об этом в теме.

Переименуйте пожалуйста тему (Как переименовать свою тему? (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread)).

Iska
10-08-2014, 20:28
Результат: пустой месенджбокс »
Смотрите:
http://i.imgur.com/QJ62CCO.png
разве что у меня в Windows XP иной класс окна «calc.exe». Второй код тоже работает, другое дело, что совпадёт не только с «SciCalc», но и с любым другим подходящим окном.

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

Cem
10-08-2014, 21:25
Совсем неважно какое приложение, это не единичный случай.
Картина такая вот:

http://i.imgur.com/1R9B9CF.png

http://imgur.com/eDMBpRR.png


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

Iska
10-08-2014, 21:47
Cem, вижу.

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

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

Iska
10-08-2014, 22:19
Стоит Семёрка 64-битная. »
Я это понял по длине хэндла.

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

Коллеги с сообщества вон нашли некий баг в WinGetHandle: [Баг] Дескриптор окна с цифровым заголовком (http://autoit-script.ru/index.php?topic=17374.0).




© OSzone.net 2001-2012