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

Ответить
Аватара пользователя
Cem

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

Сообщение Cem »

Доброго времени суток! Помогите, пожалуйста, разобраться (или хотя бы составить) с регулярными выражениями.

Дано:

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

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

Сообщение Iska »

Код:

Код: Выделить всё

$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

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

Сообщение Cem »

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



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



Код:

Код: Выделить всё

$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

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

Сообщение Cem »

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

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

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

Сообщение Creat0R »

Cem,

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




Цитата:



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

Подробнее о принципах создания тем читайте в
этом документе
и Правилах форумов.



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



Переименуйте пожалуйста тему (
Как переименовать свою тему?
).
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата Cem:



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




Смотрите:


читать дальше »


Изображение



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



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

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

Сообщение Cem »

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

Картина такая вот:




читать дальше »


Изображение






читать дальше »


Изображение







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

???
Аватара пользователя
Iska

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

Сообщение Iska »

Cem, вижу.



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

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

Сообщение Iska »

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

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

Сообщение Cem »

Цитата Cem:



Стоит Семёрка 64-битная.
Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений




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




Цитата Cem:



Может действительно, что-то ей не нравится в определении классов?...
Выловить дескриптор окна с помощью REGEXPCLASS и регулярных выражений




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



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

Вернуться в «AutoIt»