如何检测窗口创建和关闭?

时间:2011-10-06 00:28:45

标签: python pywin32

我找不到在窗口关闭时添加回调的方法 - 也不是对新创建的窗口做出反应的可靠方法。

我的应用程序使用subprocess.Popen创建了一些进程。每个进程都有一个可见窗口。这些进程使用PumpMessages pyHook 共享一些事件。

我使用此方法获取每个窗口的句柄:Tim Golden: Find the window for my subprocess
这个方法先睡一会儿等待窗口的创建,然后使用EnumWindows并比较pid。好吧,如果有足够的时间,这种方法有时会起作用,有时会长时间闲置。显然等待创建新窗口的通知会更好。

关闭窗口也是如此。我想我可以在pyHook事件中检查IsWindow的句柄,但这似乎不正确。我没有找到任何python示例,msdn examplesWM_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 个答案:

答案 0 :(得分:1)

我在这方面遇到的唯一方法,就是我多年来一直在研究这个问题,就是使用Python活动辅助功能层(pyAA)的Python绑定。此项目不再被主动维护,因此您必须自己为您的Windows版本构建它,但这是我知道的唯一方法来实现它。