HWND创建时间

时间:2009-06-19 18:06:06

标签: winapi

我是这个社区的新手,在使用我的一个自动化脚本时,我遇到了一个问题,我想获得HWND的创建时间。

我在FindWindowEx中检索到的数组中有一组HWND, 我想在数组中找到最后根据系统时间创建的HWND

我对窗口挂钩知之甚少,但是我读到了一些CBTproc,它有一些叫做“CBT_CREATEWND”的事件,它可以在窗口即将创建的时候返回HWND,我非常不确定如何使用窗钩 但是如果我得到HWND,我可以拿起系统时间并与我的阵列的HWND进行比较。

任何人都可以对此有所了解,如果我不清楚的话,还请我详细说明。

谢谢, Manish Bansal

1 个答案:

答案 0 :(得分:5)

Windows不会以可通过API访问的方式存储此信息,因此您必须自己收集它。

如果你可以修改创建HWND的代码,你可以在处理WM_CREATE或WM_NCCREATE时存储当前时间。

如果可能的话,我会避免使用窗口挂钩 - 它们会将DLL注入到创建窗口的每个进程中。 DLL中的一个严重错误会导致桌面上的每个应用程序死亡。

如果你必须使用windows hook,你可以使用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中,因此可以由其他进程加载。由于您的钩子将在不同的进程中运行,因此您需要将信息封送回原始进程。例如,您可以通过自定义窗口消息执行此操作。