FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Desmontando a WindowFromPoint()
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Desmontando a WindowFromPoint()
Posted: Thu Oct 31, 2013 12:53 PM
Hola a todos,

Intentando saber si una aplicacion es visible, es decir, si se está mostrando, he creído que la funcion API WindowFromPoint() podría ser la apropiada para ese cometido. Es una funcion muy interesante.
Pero leo en el MSDN, a propósito de esa función:

"The WindowFromPoint function does not retrieve a handle to a hidden or disabled window, even if the point is within the window. An application should use the ChildWindowFromPoint function for a nonrestrictive search." http://msdn.microsoft.com/en-us/library ... 58(v=vs.85).aspx

¡ ¿ Como ? ! :-) ¿ Que no devuelve el control/ventana o lo que sea si está disabled ? Afortunadamente, seguidamente, da la solucion: úsese ChildWindowFromPoint (con el parametro de la ventana padre) para una busqueda sin restricciones. :-)

Es decir, nuestras llamadas a WindowFromPoint(), en muchos casos, quizás todos, deberian cambiarse por ChildWindowFromPoint(GetDesktopWindow())

Por cierto la funcion para saber si una aplicacion se esta visualizando seria algo asi como:

Code (fw): Select all Collapse
FUNCTION IsRealWindowVisible()
Local aWin:= GetAllWin(),;
         nLen:= Len(aWin)
Local lVisible:= .f., n
FOR n:= 1 TO nLen 
   aWin[n]:CoorsUpdate()  // Aseguramos que las coordenadas esten bien
   lVisible:= aWin[n]:hWnd == ChildWindowFromPoint(GetDesktopWindow(), aWin[n]:nLeft, aWin[n]:nTop  )
   IF lVisible
      EXIT
   ENDIF
NEXT
RETURN lVisible


He puesto lo de Real en el nombre, porque ya existe una funcion en el API llamada IsWindowVisible() que hace bien poco: devuelve si la ventana tiene el estilo WS_VISIBLE.

Saludos a todos.

Continue the discussion