Título: Detectar regreso a la aplicación Publicado por: seba64 en 2 Abril 2020, 06:59 am Estoy buscando la manera de detectar cuando la ventana recupera el foco. Por ejemplo el usuario está utilizando la aplicación y de pronto cambia al explorador de archivos o un navegador de internet o va a consultar un dato en una planilla de excel, pero después vuelve a la aplicación. Necesito detectar cuando esto sucede para realizar una acción. estoy utilizando visual basic 6, en estos momentos.
Si alguien sabe como hacerlo se lo agradecería mucho. Título: Re: Detectar regreso a la aplicación Publicado por: Serapis en 2 Abril 2020, 17:25 pm Es una de las 'penas' de VB6, dichos eventos (Gotfocus y LostFocus) en el form están pensados exclusivamente para cuando se opera con aplicadones MDI, entonces dichos eventos saltan cuando se alterna entre ventanas MDIChild, para evitar confusión debieron llamarlos: GotDocusMDIChild y LostFocusMDIChild o algo similar... Además dichos eventos están entrelazados con los eventos Activate y Deactivate, es decir no ocurren ni antes ni después de estos. Hay un par de maneras, la larga es subclasificar para leer el mensaje que activa la ventana y derivarlo al evento deseado. La otra forma es bastante más breve, y todavía asequible... usando una simple API, que nos devuelve el handle de la ventana que interactúa con el usuario en dicho instante. Básicamente lo que haremos será chequear, cuando es nuestra ventana la que gana o pierde dicha atención, lo que equivale al resltados de tales eventos, aunque de un modo chapucero (no hay otra, salvo que quieras meter chorrocientas líneas para subclasificar los mensajes que reciba la ventana). Coloca un control timer en el formulario pon a 100 su intervalo (100 milisegundos), luego con experiencia puedes decidir elevar dicho valor... Código
Para probarlo tienes que mostrar la ventana de debug (ventana 'Inmediato') desde el menú ver, o bien pulsando CTRL+G durante la ejecución al menos... Título: Re: Detectar regreso a la aplicación Publicado por: BlackZeroX en 19 Diciembre 2020, 09:00 am Si es posible pero al igual que en C/C++ en VB6 hay que usar WinAPI
https://stackoverflow.com/questions/15756386/vb6-wh-getmessage-message-hook Cuando identifiques el mensaje WM_ACTIVATE (https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-activate) puedes identificar que esta activa tu ventana. Usa el buscador y busca sobre Hook en VB6 hay mucho de esto. Saludos. Título: Re: Detectar regreso a la aplicación Publicado por: Danielㅤ en 19 Diciembre 2020, 16:11 pm Hola, si es posible, aunque nunca he programado en VB, pero para lograr lo que deseas tenés que crear tu propio evento.
Lo que tenés que hacer es crear por ejemplo una función y a ésta ejecutarla apenas inicia tu programa usando Threads, ésta misma función lo que tendrá que hacer es tener un timer repetitivo cada por ejemplo 100, 200, 300, 400 o 500 milisegundos, eso ya vos lo decidis, luego de ese timer habría un condicional que compruebe si tú programa tiene la ventana activa y en caso de que si la tenga, entonces el bucle vuelve otra vez a hacer la misma comprobación, ahora si no devuelve tu programa como ventana activa, es porque el usuario cambio de ventana, y ahí podes usar una variable global que contenga por ejemplo lo siguiente: ventanaActiva = False cuando esa variable se setea a False, haces lo que quieras hacer y volves a setear esa misma variable en True. Obviamente tu programa apenas inicie debe crear la variable ventanaActiva con valor True. Se me acaba de ocurrir lo comentado y debería de funcionar, pruebalo y nos comentas. Saludos |