Как получить отзыв о событиях пользовательского ввода, который позволяет выделить область ввода окна и описать событие - PullRequest
0 голосов
/ 11 декабря 2018

Пожалуйста, прости меня, если это дубликат, но мне трудно найти, как лучше всего найти этот вопрос.Также, пожалуйста, прости длинную стену текста.Внизу есть Tldr.Я начинаю с того, что, скорее всего, будет приложением Python, но мой вопрос не является специфичным для Python.Мне было поручено создать то, что по сути будет альтернативой инструменту PSR от Microsoft с открытым исходным кодом.

Для тех, кто не знаком с PSR, аббревиатура расшифровывается как «Средство записи проблемных шагов» и представляет собой небольшое приложение, созданноев каждой версии Windows, начиная с Vista.Когда вы запускаете его, он запускается в фоновом режиме и может делать серию снимков экрана и создает файл XML.

Снимки экрана делаются каждый раз, когда пользователь вводит данные в приложение.Например, щелчок мышью по нажатию клавиши Enter для отправки чего-либо вызовет снимок экрана.Необязательный XML, который он создает, содержит текстовое описание действия, которое вызвало снимок экрана, и имя файла снимка экрана.

Снимки экрана немного особенные в двух отношениях.Во-первых, они содержат курсор мыши на изображении.То, что я нашел, скрыто на обычном скриншоте нажатием клавиши экрана печати.Что еще более важно, скриншоты дополнены контуром области окна, где произошел ввод.Например, если вы нажмете кнопку «Назад» в проводнике, на снимке экрана кнопка «Назад» будет заключена в зеленый прямоугольник.Если вы наберете текстовое поле, этот снимок экрана будет иметь текстовое поле, заключенное в зеленый прямоугольник.

В описаниях xml говорится что-то вроде «пользователь щелкнул левой кнопкой мыши на кнопке [назад] в окне [Мои документы] изprocess explorer.exe "

Я предполагаю, что существует некоторый хорошо документированный Windows API, который позволил бы мне получить эту информацию.Я знаю, что это не недокументированный API, потому что Sysinternals Process Explorer может выделять компоненты окна так же, как это делает PSR.Если вы запустите Process Explorer и перетащите маленькую цель поверх окна проводника, вы увидите, о чем я говорю.Я знаю, что Sysinternals теперь является частью Microsoft, но до приобретения у нее была эта особенность, поэтому это не какое-то инсайдерское знание, которое дало их приложению такую ​​возможность.

К сожалению, Process Explorer не является открытым исходным кодом, и я невозможность найти приложение с открытым исходным кодом с той же функциональностью.Мое предположение о том, как это будет решено, состоит в том, чтобы наблюдать за определенными типами пользовательского ввода, такими как щелчок мышью и различные не-символьные клавиши, такие как tab, enter, f5 и т. Д. При щелчке мыши установите положение курсора, получите фокусокно, найти положение и размер окна, найти позиции различных компонентов окна, вычислить, какой компонент был бы под курсором в момент щелчка, и использовать знание положения и размера компонента окна, а также положения и размера окна,и разрешение экрана, чтобы нарисовать прямоугольник с наложением на скриншот.

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

Тогда есть это описание XML.Откуда он знает, что «пользователь щелкнул левой кнопкой мыши по кнопке [назад] в окне [Мои документы] из процесса explorer.exe»?Это заставляет меня больше склоняться к тому, что это своего рода обратный вызов, и что это просто информация, которая передается вместе с ней.

Я действительно не знаю, и я не знаю, где искать.Так что я обращаюсь к вам здесь.Кто-нибудь знает, какие API я ищу?Для меня было бы очень полезно, если бы кто-то имел опыт работы с этой конкретной функцией, но даже если бы кто-то мог просто указать мне на приложение с открытым исходным кодом, которое использует это, это было бы здорово, и я мог бы просто выяснить это, посмотревтам.

tldr;Мне нужно знать, какие windows api позволяют Sysinternals Process Explorer и Windows PSR выделять компоненты окна, над которым наведена мышь.

Большое спасибо всем за помощь.

...