Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: icisneros en 29 Marzo 2006, 20:20 pm



Título: Como detectar que se ha abierto una ventana?
Publicado por: icisneros en 29 Marzo 2006, 20:20 pm
Como puedo detectar que se ha abierto una ventana nueva en el sistema, o un popup de error, para entonces enviar yo una sucesion de teclas automaticamente?

Lo que yo quiero hacer es dejar el pc como esta, y que si sale algun error de alguna aplicacion directamente mande la tecla {enter} para que sea como hacer click en aceptar y se cierre ese error...

Saludos!!


Título: Re: Como detectar que se ha abierto una ventana?
Publicado por: BenRu en 29 Marzo 2006, 20:39 pm
Con AppActivate puedes hacerlo.

Despues para que pulse enter, SendKeys "{ENTER}"

No se si funcionara asi, creo que si...al menos hace el intento...

Código:
Private Sub Form_Load()
AppActivate "Foro Libre"
SendKeys "{Enter}"
End Sub

Un saludo



Título: Re: Como detectar que se ha abierto una ventana?
Publicado por: icisneros en 29 Marzo 2006, 21:52 pm
Pues la verdad es que es mucho más facil así, yo lo he hecho llamando a la API porque de la forma que tu dices te busca ventanas de aplicaciones pero las ventanas de error del sistema no las encuentra. La funcion de la API que he usado es:

Código:
FindWindow


Ahora otra cosa por curiosidad, conociendo el handle de la ventana como puedo hacer para cerrarla?

Saludos!!


Título: Re: Como detectar que se ha abierto una ventana?
Publicado por: BenRu en 29 Marzo 2006, 22:03 pm
Pues la verdad es que es mucho más facil así, yo lo he hecho llamando a la API porque de la forma que tu dices te busca ventanas de aplicaciones pero las ventanas de error del sistema no las encuentra. La funcion de la API que he usado es:

Código:
FindWindow

Saludos!!

Quizas esto te sirva para algo, o para sacarle algo:

Cerrar todos los formularios y aplicacion:
Dentro de un Form_Unload()
Código:
Dim i as integer
While forms.Count > 1
    i = 0
While forms(i).Caption = Me.Caption
         i = i + 1
    Wend
 Unload forms(i)
Wend
Unload Me
End

Citar
Ahora otra cosa por curiosidad, conociendo el handle de la ventana como puedo hacer para cerrarla?

Pues con el mismo sendkeys, en vez de enviar Enter, envias Alt + F4..

Prueba con esto, que si recuerdo no mal, era asi
Código:
Sendkeys "\%{F4}"

O si no, prueba poniendole delante WshShell
Código:
WshShell.Sendkeys "\%{F4}"

Un saludo



Título: Re: Como detectar que se ha abierto una ventana?
Publicado por: icisneros en 29 Marzo 2006, 22:37 pm
Gracias BenRu hacía tiempo que no trasteaba con VB y me ha costado...  :P

Ya me funciona todo como quería, gracias de nuevo.

Saludos!!


Título: Re: Como detectar que se ha abierto una ventana?
Publicado por: NYlOn en 30 Marzo 2006, 01:14 am
Sino queres utilizar el SendKeys (por el echo de que puede aparecer otra ventana adelante, etc) podes usar la API SendMessage de la siguiente forma:
Código:
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_CLOSE = &HF060&


Call SendMessage("VENTANA", WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)

Saludos.-