Как обнаружить создание и закрытие окна? - PullRequest
0 голосов
/ 06 октября 2011

Я не могу найти способ добавить обратный вызов, когда окно закрыто, а также не надежный способ реагировать на вновь созданные окна.

Мое приложение создает несколько процессов, используя subprocess.Popen.Каждый процесс имеет видимое окно.Процессы делят некоторые события с pyHook , используя для этого PumpMessages.

Я использую этот метод, чтобы получить дескриптор для каждого окна: Тим Голден: Найти окно для моегоподпроцесс
Этот метод сначала немного спит, чтобы дождаться создания окна, затем использует EnumWindows и сравнивает pid.Хорошо, этот метод иногда работает, если у него достаточно времени, а иногда остается без дела долго.Очевидно, что лучше ожидать уведомления о создании нового окна.

То же самое касается закрытия окна.Думаю, я могу проверить дескриптор с IsWindow в событиях pyHook, но это не так.Я не нашел примеров Python для этого, MSDN примеров скажем, WM_CLOSE будет отправлено, но я не могу заставить его прослушивать любые сообщения (ничего не происходит, я вижу только мой PyHookСобытия).Я даже не уверен, правильно ли я использую HookMessage здесь:

def close_window(hwnd, msg):
    print "closed " + str(hwnd)

window = win32ui.CreateWindowFromHandle(hwnd)
# WM_CLOSE 0x0010
window.HookMessage(close_window,0x0010)

Есть ли способ добавить функцию обратного вызова, которая выполняется, когда процесс создает окно?
Как я могуполучить обратный вызов, который будет выполнен, когда окно закрыто?

1 Ответ

1 голос
/ 08 октября 2011

Единственный способ, которым я когда-либо занимался, и который я изучал в течение многих лет, - это использовать привязки Python для уровня активной доступности Microsoft (pyAA).Этот проект больше не поддерживается, поэтому вам придется создавать его самостоятельно для своей версии Windows, но я знаю, что это единственный способ заставить его работать.

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