Я не могу найти способ добавить обратный вызов, когда окно закрыто, а также не надежный способ реагировать на вновь созданные окна.
Мое приложение создает несколько процессов, используя 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)
Есть ли способ добавить функцию обратного вызова, которая выполняется, когда процесс создает окно?
Как я могуполучить обратный вызов, который будет выполнен, когда окно закрыто?