2011-10-06 50 views
0

我無法找到添加窗口關閉時回調的方法 - 也不是對新創建窗口作出反應的可靠方法。如何檢測窗口的創建和關閉?

我的應用程序使用subprocess.Popen創建了幾個進程。每個進程都有一個可見的窗口。這個過程與共享一些事件pyHook,使用PumpMessages爲此。

我用這個方法來得到一個處理每個窗口: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

我這樣做的唯一方法就是使用Python活動可訪問層(pyAA)的Python綁定。這個項目不再被主動維護,所以你將不得不爲自己的Windows版本自己構建它,但這是我知道實現它的唯一方法。