Windows не хранит эту информацию таким образом, чтобы она была доступна через API, поэтому вы должны собрать ее самостоятельно.
Если вы можете изменить код, который создает HWND, вы можете просто сохранить текущее время при обработке WM_CREATE или WM_NCCREATE.
Я бы по возможности избегал хуков окон - они внедряют вашу DLL в каждый процесс, который создает окна. Критическая ошибка в вашей DLL приведет к ужасной смерти каждого приложения на вашем рабочем столе.
Если вам нужно перейти с хуком Windows, вы вводите хук, используя SetWindowsHookEx , например:
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, чтобы он мог загружаться другими процессами. Так как ваш хук будет работать в разных процессах, вам нужно перенаправить информацию обратно в ваш первоначальный процесс. Вы можете сделать это с помощью специального сообщения окна, например.