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中,所以它可以被其他進程加載。由於您的鉤子將在不同的進程中運行,因此您需要將信息編組回到原始進程。例如,您可以通過自定義窗口消息來完成此操作。
[WinEvents](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx)是推薦的方法。 – IInspectable 2017-06-24 00:29:43