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