窗口句柄创建时间

5

我是新来的,正在处理我的一个自动化脚本时遇到了问题。我想要获取HWND和创建时间。

我有一组HWND在数组中,这些HWND是我从FindWindowEx中检索出来的。我想要找到这个数组中根据系统时间创建最后的HWND。

我对窗口钩子没有足够的了解,但我读过一些CBTproc,其中有一个被称为“CBT_CREATEWND”的事件,它可以在窗口即将创建时返回HWND。我非常不确定如何使用窗口钩子。但如果我能得到HWND,我就可以获取系统时间并与我的数组中的HWND进行比较。

如果有人能够解决这个问题,请给我指点一下,如果我表达不清楚,请让我更加详细地描述。

谢谢, Manish Bansal

1个回答

5

Windows并没有以API可访问的方式存储此信息,因此您需要自己收集它。

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

如果可能的话,我会避免使用窗口钩子 - 它们会将您的DLL注入到创建窗口的每个进程中。您DLL中的关键性漏洞会导致桌面上的每个应用程序死亡。

如果您必须使用窗口钩子,则可以使用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中,这样它就可以被其他进程加载。由于您的钩子将在不同的进程中运行,因此您需要将信息传输回原始进程。例如,您可以通过自定义窗口消息实现此操作。

1
推荐使用WinEvents - IInspectable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接