Как выполнить некоторый код каждый раз, когда открывается окно приложения (другие процессы)? - PullRequest
3 голосов
/ 27 января 2010

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

Прямо сейчас я перечисляю через видимые окна, используя EnumWindows (p / invoked from user32.dll) в цикле с минимальной задержкой между итерациями, насколько я могу оправдать.

Я ищу способ подключиться к «чему-то», который позволил бы мне ждать события «открытия окна» вместо того, чтобы постоянно опрашивать.

Есть ли способы для достижения этой цели?

1 Ответ

5 голосов
/ 27 января 2010

Вам нужна функция API SetWindowsHookEx (), устанавливающая хук WH_SHELL. Обратный вызов получает уведомление HSHELL_WINDOWCREATED при создании нового окна верхнего уровня.

Это глобальный хук, вы не можете написать код для этого хука в C #. Это требует DLL, которая может быть вставлена ​​в процесс, CLR не может быть правильно инициализирован для поддержки управляемого кода. Вам понадобится неуправляемая DLL для выполнения работы, этот проект предлагает ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...