我是这个社区的新手,在使用我的一个自动化脚本时,我遇到了一个问题,我想获得HWND的创建时间。
我在FindWindowEx中检索到的数组中有一组HWND, 我想在数组中找到最后根据系统时间创建的HWND
我对窗口挂钩知之甚少,但是我读到了一些CBTproc,它有一些叫做“CBT_CREATEWND”的事件,它可以在窗口即将创建的时候返回HWND,我非常不确定如何使用窗钩 但是如果我得到HWND,我可以拿起系统时间并与我的阵列的HWND进行比较。
任何人都可以对此有所了解,如果我不清楚的话,还请我详细说明。
谢谢, Manish Bansal
答案 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中,因此可以由其他进程加载。由于您的钩子将在不同的进程中运行,因此您需要将信息封送回原始进程。例如,您可以通过自定义窗口消息执行此操作。