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:
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.
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 ? !
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:
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 lVisibleHe 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.