Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений (http://forum.oszone.net/showthread.php?t=286280)

Cem 10-08-2014 18:40 2387370

Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений
 
Доброго времени суток! Помогите, пожалуйста, разобраться (или хотя бы составить) с регулярными выражениями.
Дано:
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 2387383

Код:

$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 2387397

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

При таком раскладе:
Код:

$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 2387424

Упростил эксперимент: взял калькулятор
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 2387426

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

Цитата:

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

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

Iska 10-08-2014 20:28 2387438

Цитата:

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

Смотрите:

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

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

Cem 10-08-2014 21:25 2387459

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






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

Iska 10-08-2014 21:47 2387468

Cem, вижу.

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

Cem 10-08-2014 21:59 2387470

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

Iska 10-08-2014 22:19 2387475

Цитата:

Цитата Cem
Стоит Семёрка 64-битная. »

Я это понял по длине хэндла.

Цитата:

Цитата Cem
Может действительно, что-то ей не нравится в определении классов?... »

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

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


Время: 03:15.

Время: 03:15.
© OSzone.net 2001-