2009-06-19 24 views
5

我是這個社區的新手,在使用我的自動化腳本之一時遇到問題,我想要獲取HWND的創建時間。HWND創建時間

我有數組中的一組HWND的我從FindWindowEx檢索, 我想在數組中找到其HWND是最後創建取決於系統時間

我沒有窗鉤足夠的知識,但我讀了一些CBTproc,它有一些事件名爲「CBT_CREATEWND」,它可以在窗口即將創建時返回HWND,我非常不確定如何使用窗口鉤子 但是,如果我將獲得HWND,我可以選擇增加系統時間並與我的陣列的HWND進行比較。

任何人都可以請一些相同的光線,如果我不清楚,也請問我更詳細說明。

感謝, 和Manish邦薩爾

回答

5

Windows不存儲的方式,是通過API訪問,所以你必須自己收集這些信息。

如果您可以修改創建HWND的代碼,則可以在處理WM_CREATE或WM_NCCREATE時存儲當前時間。

如果可能的話,我會避免使用窗鉤 - 它們會將DLL注入到創建窗口的每個進程中。 DLL中的一個嚴重錯誤會導致桌面上的每個應用程序死亡。

如果你必須去與Windows鉤子,你注入使用SetWindowsHookEx這樣鉤:

HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0); 

然後你鉤PROC看起來就像這樣:

LRESULT CALLBACK MyHookFunction(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode == HCBT_CREATEWND) 
    { 
     // wParam is new window. 
    } 
    else if (nCode == HCBT_DESTROYWND) 
    { 
     // wParam is window being destroyed 
    } 

    return CallNextHookEx(myHook, nCode, wParam, lParam); 
} 

鉤PROC需求存在於一個DLL中,所以它可以被其他進程加載。由於您的鉤子將在不同的進程中運行,因此您需要將信息編組回到原始進程。例如,您可以通過自定義窗口消息來完成此操作。

+1

[WinEvents](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx)是推薦的方法。 – IInspectable 2017-06-24 00:29:43