2009-06-19 12 views
5

Soy nuevo en esta comunidad, mientras trabajo con 1 de mi secuencia de comandos de automatización me encuentro con un problema, quería obtener HWND, tiempo de creación.HWND Creation Time

Estoy teniendo un conjunto de HWND en una matriz que he recuperado de FindWindowEx, Quiero encontrar en la matriz, que HWND se crea última dependiendo de la hora del sistema

no tengo el conocimiento suficiente de ganchos de ventana , pero leí acerca de algún CBTproc que tiene algún evento llamado "CBT_CREATEWND" que puede devolver HWND en el momento en que la ventana está a punto de crearse, estoy muy inseguro acerca de cómo trabajar con ganchos de ventana Pero si obtengo HWND, puedo elegir hasta el tiempo del sistema y comparar con HWND de mi matriz.

Cualquier persona puede por favor aclarar lo mismo, también puede pedirme más detalles si no estoy seguro.

Gracias, Manish Bansal

Respuesta

5

de Windows no almacena esta información en una forma que es accesible a través de la API, así que hay que reunir por sí mismo.

Si puede modificar el código que crea el HWND, puede simplemente almacenar la hora actual mientras maneja WM_CREATE o WM_NCCREATE.

Evitaré ganchos de ventana si es posible - inyectan su DLL en cada proceso que está creando Windows. Un error crítico en su archivo DLL hará que cada aplicación en su escritorio muera de una muerte horrible.

Si tiene que ir con las ventanas gancho, que inyecte el gancho utilizando SetWindowsHookEx así:

HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0); 

Su proc gancho va a tener el siguiente aspecto:

necesidades 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); 
} 

el gancho estar presente en una DLL, por lo que puede ser cargado por otros procesos. Dado que su gancho se ejecutará en diferentes procesos, tendrá que ordenar la información a su proceso original. Puede hacer esto a través de un mensaje de ventana personalizado, por ejemplo.

+1

[WinEvents] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx) es la forma recomendada. – IInspectable