HWND创建时间

Man*_*sal 5 winapi

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

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

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

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

谢谢,Manish Bansal

Mic*_*ael 5

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