Получить тип компонента пользовательского класса .NET из дескриптора окна - PullRequest
1 голос
/ 11 октября 2010

Мне нужно увидеть тип компонента, то есть имя класса, который был запрограммирован, элемента управления, по которому щелкают, в другом процессе.Мне нужен тип, чтобы я мог реагировать на нажатие элемента управления, а затем выполнять некоторые задачи автоматизации.Сейчас я делаю следующее: 1. Я нахожу FindWindow () из Win32, чтобы найти дескриптор главного окна процесса.2. Затем я получаю вызов EnumChildWindows (), также из Win32, и получаю дескрипторы окон всех дочерних элементов дескриптора главного окна.3. Теперь это становится сложнее.Когда я вызываю GetClassName (), он возвращает WindowsForms10.STATIC.app [...], поскольку элементы управления, которые я пытаюсь прочитать, являются пользовательскими.

Как я могу получить тип элемента управления, по которому щелкнули, используя дескрипторы окна из EnumChildWindows ()?Возможно ли то, что я пытаюсь сделать?Я пытался использовать SendMessage () из Win32 для процесса, но кажется, что нет системного сообщения, которое могло бы помочь.

1 Ответ

1 голос
/ 11 октября 2010

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

Вы можете получить имя класса, но оно не является ни стандартизированным, ни уникальным.Большинство элементов управления, которые не являются базовыми функциональными элементами управления, такими как кнопки, списки и т. Д., Являются производными от очень примитивного, а именно от «Статического».Но опять же, нет информации о доступном высокоуровневом элементе управления WinForms.

Это приводит к тому, что, даже если вы знали тип, вы не можете просто привести указатель / дескриптор, потому что за ним нет данных.

Можете ли вы как-то изложить свою проблему?Может быть, использовать удаленные вызовы процедур?Работает ли это без высокоуровневых объектов WinForms?Такие вещи, как нажатие, перемещение или переименование, работают с простым Win32 API.

...