2010-10-11 4 views
1

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

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

ответ

1

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

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

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

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

+0

Большое вам спасибо за ваш быстрый ответ. Я много читал в API Win32 без везения. :(Мне нужно увидеть класс верхнего уровня, чтобы я мог предсказать, что пользователь пытается сделать. Мне не нужно больше взаимодействовать с элементом управления. Я запрограммировал Hook для чтения положения мыши в приложении. То, что мне тогда нужно сделать, - это прочитать, какой тип компонента был нажат. Кастинг в AutomationElement также не помог, так как свойства не установлены должным образом. Я видел, что ManagedSpyLib может читать тип компонента, но он не был скомпилирован. NET 4.0, поэтому мне нужна программа сама. – prettyCode

+0

Если вы нашли ответ полезным, вы можете нажать на стрелку вверх. Если он отвечает на ваш вопрос, нажмите зеленую галочку под стрелками. – msteiger

Смежные вопросы