elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Detectar regreso a la aplicación
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Detectar regreso a la aplicación  (Leído 4,431 veces)
seba64

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Detectar regreso a la aplicación
« 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.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Detectar regreso a la aplicación
« Respuesta #1 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
  1.  
  2.  
  3. Private Declare Function GetForegroundWindow Lib "user32" () As Long
  4. Private Focus As Boolean
  5.  
  6.  
  7.  
  8.  
  9. Private Sub Form_GotFocus()
  10.    ' aqui tu codigo: cuando gana el foco
  11.  
  12.    Debug.Print "Gotfocus " & Rnd      ' solo para probar...
  13. End Sub
  14.  
  15. Private Sub Form_LostFocus()
  16.    ' aqui tu codigo: cuando pierde el foco.
  17.  
  18.    Debug.Print "Lostfocus " & Rnd     ' solo para probar...
  19. End Sub
  20.  
  21.  
  22. Private Sub Form_Load()
  23.    Timer1.Enabled = True
  24. End Sub
  25.  
  26. Private Sub Timer1_Timer()
  27.    If (Me.hWnd = GetForegroundWindow) Then
  28.        If (Focus = False) Then
  29.            Focus = True
  30.            Call Form_GotFocus
  31.        End If
  32.    Else
  33.        If (Focus = True) Then
  34.            Focus = False
  35.            Call Form_LostFocus
  36.        End If
  37.    End If
  38. End Sub
  39.  

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...


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Detectar regreso a la aplicación
« Respuesta #2 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.

« Última modificación: 19 Diciembre 2020, 09:05 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Danielㅤ


Desconectado Desconectado

Mensajes: 1.848


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Detectar regreso a la aplicación
« Respuesta #3 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Detectar si el Firewall de Win XP bloquea la aplicación « 1 2 »
Programación Visual Basic
Scratz 16 10,136 Último mensaje 15 Septiembre 2006, 23:22 pm
por LixKeÜ
Detectar la ejecución de una aplicación
Programación Visual Basic
naderST 7 2,725 Último mensaje 2 Julio 2008, 19:39 pm
por naderST
Detectar dependencias de una aplicacion.
Programación Visual Basic
70N1 7 10,132 Último mensaje 5 Marzo 2009, 19:06 pm
por 70N1
[Ayuda] Detectar velocidad de una aplicacion
Programación C/C++
Pinkof 1 2,015 Último mensaje 13 Noviembre 2010, 19:16 pm
por bizco
¿Cómo detectar si una aplicación es falsa o no?
Noticias
wolfbcn 0 1,524 Último mensaje 2 Junio 2015, 02:33 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines