Получение экземпляра Windows Control (диалоговое окно) по его дескриптору

Я вызвал какое-то диалоговое окно в delphi. Я пытаюсь найти ссылку на него, но сталкиваюсь с проблемой. Эти элементы управления не являются VCL, поэтому я не могу использовать FindWindow (дескриптор): TWinControl

Есть ли метод, который возвращает правильное управление окном?

Есть ли какой-нибудь шанс, который я смог бы собрать из такой информации диалогового окна, как:

* количество элементов управления в диалоговом окне * имена, текст, имена классов элементов управления в диалоговом окне


person Jacek Kwiecień    schedule 09.03.2012    source источник
comment
Вы не можете получить TWinControl или вообще любой экземпляр VCL из этого дескриптора окна. Вы можете вызвать EnumChildWindows для перечисления дочерних элементов диалогового окна верхнего уровня. А затем вы можете запросить у них имя класса и так далее. Основные API Win32, которые вам нужны, - это GetClassName и GetWindowText.   -  person David Heffernan    schedule 09.03.2012
comment
Вам нужно написать @EnumChildProc, потому что Windows.pas определяет enum proc как Pointer без типов! Я лично определил бы свой собственный import, в котором была бы типизированная процедура обратного вызова, чтобы убедиться, что я все правильно понял.   -  person David Heffernan    schedule 09.03.2012
comment
Вы должны опубликовать его как ответный товарищ, это подойдет для моего дела. Еще раз спасибо   -  person Jacek Kwiecień    schedule 09.03.2012
comment
Вы предлагаете, чтобы я опубликовал ответ? Я не буду этого делать, потому что ответ Роба говорит то же самое, что и мои комментарии, только немного расширенный.   -  person David Heffernan    schedule 09.03.2012


Ответы (1)


Если на самом деле нет элемента управления VCL, представляющего диалоговое окно, вы не сможете создать его из ничего. Элементы управления VCL создают и принимают на себя ответственность за соответствующие элементы управления Windows, но если элементы управления Windows уже существуют, то нет способа «обернуть» их в новые объекты VCL.

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

person Rob Kennedy    schedule 09.03.2012