C/Visual C - Listar Ventanas

 
Vista:

Listar Ventanas

Publicado por Marcelo (9 intervenciones) el 19/04/2007 14:29:45
Hola, alguien me puede guiar? Necesito recuperar el handle de las ventanas principales, estoy usando la funcion del API EnumWindow(). Pero me devuelve un numero considerable de handles, que no son de ventanas principales. La funcion la tengo definida asi:
EnumWindows((WNDENUMPROC) EnumWindowsProc,(LPARAM) 0 )

Y la funcion EnumWindowsProc(hWnd,lParam) lo que haces es cargar en un array todos los handles que recibe. Como podria clasificar y obtener solo las ventanas principales? Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Listar Ventanas

Publicado por fernando.gomez (1603 intervenciones) el 19/04/2007 17:55:42
Las "ventanas principales" son aquellas cuyo padre es, por lo general, el escritorio de Windows. Para cada HWND que tengas, haz un GetParentWindow y compárala contra GetDesktopWindow. Si son iguales, entonces hay una probabilidad muy alta de que esa sea una "ventana principal". Claro, si alguien crea una ventana con la ventana padre en NULL (i.e. un cuadro de diálogo) la ventana padre será el escritorio.

Aparte de lo anterior, también podrías comparar el estilo de la ventana. Si ésta tiene el WS_OVERLAPPEDWINDOW, o algo así (no recuerdo exáctamente el nombre) pus ya la hiciste (esto quiere decir que la ventana tiene menú de sistema, botones de maximizar y minimizar, etc).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listar Ventanas

Publicado por Marcelo (9 intervenciones) el 19/04/2007 20:41:24
Muchas gracias Fernando, me diste muy buenas ideas. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listar Ventanas

Publicado por Nelek (816 intervenciones) el 20/04/2007 08:55:16
Con ventanas principales te refieres a todas las ventanas que haya? o solo a las de dentro de tu aplicacion?

Si es solo dentro de la aplicacion y usas MFC tambien puedes llegar hasta ellas a traves del CChildFrame con GetParentFrame... Si el resultado es el CMainFrame de tu aplicacion es una de las "principales".

Si las ventanas tienen asignadas CViews para dibujar/presentar datos en ellas, tambien puedes encontrarlas directamente con:

POSITION pos = CDocument::GetFirstViewPosition ();
while (pos)
{
CView* pView = CDocument::GetNextView ();

//haces las comprobaciones que necesites para identificar cual es con IsKindOf ()
// o lo que tengas y sigues como desees.
}

Yo al menos lo hago asi para mi programa. Una unica aplicacion con distintas vistas del mismo documento, donde mis vistas son las ventanas "principales" y los dialogos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listar Ventanas

Publicado por Marcelo (9 intervenciones) el 20/04/2007 15:19:32
no, necesito manejar todas las ventanas principales en la pc. si se abre un excel, un word, cualquier aplicacion, necesito poder manipularlas. no se me ocurre ogtra forma de capturar esto. muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listar Ventanas

Publicado por Nelek (816 intervenciones) el 20/04/2007 16:15:14
Entonces hazlo conforme te dijo fernando. O mirando cuales de los handles que recibes estan asociados con las CMainFrame que gestionan la ventana padre de cada una de las aplicaciones.

Word (CMainFrame)
Doc1, Doc2... (CChildFrame)

O mira a ver si puedes pillar cuantos procesos residentes tienes (como lo de Control+Alt+Supr). Pero ahi ya no se como acceder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listar Ventanas

Publicado por Marcelo (9 intervenciones) el 20/04/2007 18:49:48
ok, muchas gracias. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar