c++ programming Obteniendo HWND del proceso actual



winapi create a window (6)

Está asumiendo (incorrectamente) que un proceso tiene un solo HWND. Esto no es generalmente cierto y, por lo tanto, Windows no puede ofrecer una API para obtenerlo. Un programa podría crear dos ventanas y, como resultado, tener dos HWND. OTOH, si su programa crea una sola ventana, puede almacenar ese HWND en una variable global.

Tengo un proceso en c ++ en el que estoy usando la API de Windows. Quiero obtener el HWND de proceso propio. Por favor, guíame cómo puedo hacerlo posible.


Answer #1

Mi ejemplo no es tratar con el proceso, pero tal vez necesite esto:

HWND hwndList = GetDlgItem(hwnd, IDCL_COMBOBOX);

Esto devuelve HWND del control especificado por su IDCL_COMBOBOX .


Answer #2

La función GetCurrentProcess() devuelve un pseudo-manejo que se refiere al proceso actual. Este identificador se puede usar en la mayoría de las funciones de la API de Win32 que toman un parámetro de identificador de proceso.

La documentación contiene más información sobre este pseudo-manejo, incluyendo cómo convertirlo en un controlador real si es necesario.


Answer #3

Aquí hay otra respuesta:

esto-> GetSafeHwnd ();


Answer #4

Consigue la ventana de tu consola

GetConsoleWindow();


"El valor de retorno es un identificador de la ventana utilizada por la consola asociada con el proceso de llamada o NULL si no existe tal consola asociada".

https://msdn.microsoft.com/en-us/library/windows/desktop/ms683175(v=vs.85).aspx

Obtener otras ventanas

GetActiveWindow() puede que NO sea ​​la respuesta, pero podría ser útil
"El valor de retorno es el identificador de la ventana activa adjunta a la cola de mensajes del subproceso de la llamada. De lo contrario, el valor de retorno es NULL". > msdn GetActiveWindow () docs

Sin embargo, las ventanas no se están abriendo, por lo que debería recuperar el identificador del lugar donde usted / su aplicación ha creado la ventana ... por ejemplo, CreateWindow() devuelve el identificador HWND por lo que todo lo que necesita es guardarlo y recuperarlo ...


Answer #5

Puede utilizar HANDLE WINAPI GetCurrentProcess(void); desde el archivo kernel32.dll.

Vea la entrada de MSDN here .





windows