Windows 不会以可通过 API 访问的方式存储此信息,因此您必须自行收集。
如果您可以修改创建 HWND 的代码,则可以在处理 WM_CREATE 或 WM_NCCREATE 时仅存储当前时间。
如果可能的话,我会避免使用窗口挂钩——它们将 DLL 注入到创建窗口的每个进程中。 DLL 中的严重错误将导致桌面上的每个应用程序惨死。
如果您必须使用 Windows 钩子,则可以使用以下命令注入钩子设置WindowsHookEx http://msdn.microsoft.com/en-us/library/ms644990.aspx像这样:
HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0);
然后你的钩子过程将如下所示:
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);
}
钩子过程需要存在于 DLL 中,以便其他进程可以加载它。由于您的挂钩将在不同的进程中运行,因此您需要将信息封送回原始进程。例如,您可以通过自定义窗口消息来完成此操作。