Как мне предоставить функцию "Найти окно процесса" в Process Explorer (sysinternals)

Я разрабатываю приложение для отладки. Я хочу, чтобы пользователь мог выбирать процесс для отладки с помощью мыши. Process Explorer отлично справляется с этой задачей с помощью функции "Найти процесс в окне". Что я не могу понять, так это как это сделать? Кто-нибудь знает интерфейс Windows, который обеспечивает эту функциональность?

Спасибо грант

2 ответа

Решение

Я не пробовал это, но оно должно работать: использовать WindowFromPoint чтобы получить дескриптор окна, затем используйте GetWindowThreadProcessId чтобы получить идентификатор процесса, который создал окно.

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

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

Это непростая задача, так как требует прохождения большого количества обручей, но это возможно, просто нужно собрать все кусочки вместе.

Другие вопросы по тегам