Windows不以可通过API访问的方式存储此信息,因此您必须自己收集它.
如果您可以修改创建HWND的代码,则可以在处理WM_CREATE或WM_NCCREATE时存储当前时间.
如果可能的话,我会避免使用窗口挂钩 - 它们会将DLL注入到创建窗口的每个进程中.DLL中的一个严重错误将导致桌面上的每个应用程序死于可怕的死亡.
如果你必须使用Windows钩子,你使用SetWindowsHookEx注入钩子,如下所示:
HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0);
Run Code Online (Sandbox Code Playgroud)
你的钩子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);
}
Run Code Online (Sandbox Code Playgroud)
钩子proc需要存在于DLL中,因此可以由其他进程加载.由于您的钩子将在不同的进程中运行,因此您需要将信息封送回原始进程.例如,您可以通过自定义窗口消息执行此操作.