PDA

Ver la Versión Completa : [Sintaxis] Saber qué formulario está activo en todo momento


Nitzer
29 de enero de 2020, 16:48
Hola, una cuestión que me ha surgido y en principio pensaba que era simple, pero no doy con la tecla. Os explico:

En mi aplicación todas las ventas que dependen de ella se abren como OpenForm, de esa manera el usuario puede interactuar a la vez con todas los programas que quiera, bueno pues si quiero saber cual es la que tiene activa, es decir en la que está trabajando en cada momento, NO SE COMO HACERLO :))

Lo del mouse no me vale, porque el formulario siempre está lleno de controles y nunca se ve propiamente, lo he probado y nada.
Pensaba que tenía un evento que se llamase Active, pero para mi desgracia no he encontrado nada.

Si sabéis algo os lo agradezco. Gracias

Kuk
29 de enero de 2020, 21:48
Nitzer, he aquí la solución ;)

Un Timer + GetActiveWindow function (winuser.h) - Win32 apps | Microsoft Docs (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getactivewindow) + un poco de Cobol puro :yess:

Joseg
29 de enero de 2020, 22:39
Hola, una cuestión que me ha surgido y en principio pensaba que era simple, pero no doy con la tecla. Os explico:

En mi aplicación todas las ventas que dependen de ella se abren como OpenForm, de esa manera el usuario puede interactuar a la vez con todas los programas que quiera, bueno pues si quiero saber cual es la que tiene activa, es decir en la que está trabajando en cada momento, NO SE COMO HACERLO :))

Lo del mouse no me vale, porque el formulario siempre está lleno de controles y nunca se ve propiamente, lo he probado y nada.
Pensaba que tenía un evento que se llamase Active, pero para mi desgracia no he encontrado nada.

Si sabéis algo os lo agradezco. Gracias

Com esta API da para ver qualquer programa que possa estar ativo.

Kuk
30 de enero de 2020, 12:30
Joseg, la única pega de tu solución es que utilizando FindWindowA te busca toda ventana abierta en Windows. Sin embargo GetActiveWindow te las busca en tu proceso:


Retrieves the window handle to the active window attached to the calling thread's message queue

Nitzer
30 de enero de 2020, 13:23
me iba a adelantar con la respuesta sin probar a fondo de lo kuk. Voy a examinarlo bien.

Kuk
30 de enero de 2020, 21:20
Nitzer, si tienes dudas ya sabes ;)

Joseg
31 de enero de 2020, 10:17
Joseg, la única pega de tu solución es que utilizando FindWindowA te busca toda ventana abierta en Windows. Sin embargo GetActiveWindow te las busca en tu proceso:

Sim, é verdade.

Kuk
31 de enero de 2020, 11:48
Joseg, tu solución estámuy bien si en tu aplicación quieres saber si el usuario está con otra cosa incluso fuera de tu aplicación ;)

Nitzer
31 de enero de 2020, 16:24
Bueno, muchas gracias kuk por tu aportación. Pero he querido ir un poco mas allá, quería que el usuario pudiera hacer una captura del trozo de pantalla que deseara y al final lo he conseguido con un programita :)
He realizado un video para que veáis lo que quería conseguir

Video de Captura de pantalla (https://youtu.be/rlpX7oRx5wM)

PD: el programita se llama boxcutter y solo con el ejecutable funciona.