2009-06-19 68 views
5

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

我有数组中的一组HWND的我从FindWindowEx检索, 我想在数组中找到其HWND是最后创建取决于系统时间

我没有窗钩足够的知识,但我读了一些CBTproc,它有一些事件名为“CBT_CREATEWND”,它可以在窗口即将创建时返回HWND,我非常不确定如何使用窗口钩子 但是,如果我将获得HWND,我可以选择增加系统时间并与我的阵列的HWND进行比较。

任何人都可以请一些相同的光线,如果我不清楚,也请问我更详细说明。

感谢, 和Manish邦萨尔

回答

5

Windows不存储的方式,是通过API访问,所以你必须自己收集这些信息。

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

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

如果你必须去与Windows钩子,你注入使用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中,所以它可以被其他进程加载。由于您的钩子将在不同的进程中运行,因此您需要将信息编组回到原始进程。例如,您可以通过自定义窗口消息来完成此操作。

+1

[WinEvents](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx)是推荐的方法。 – IInspectable 2017-06-24 00:29:43