lunes, 13 de diciembre de 2010

[Visual Basic / Visual .NET] --> Controlar ventana de otra aplicación

Algunas veces necesitamos controlar ventana de otra aplicación que tenemos abierta, como por ejemplo realizar clic con el ratón o pulsar una combinación de teclas para realizar alguna acción.

Para realizar este, mediante código, desde nuestra aplicación usaremos lo siguiente:

  1. Función Win32 para encontrar la aplicación y asociarle un puntero.
  2. Función Win32 para activarla y establecer el foco para enviarle la combinación de teclas.
  3. Envío de la combinación de teclas.
1.- Encontrar la aplicación
Para realizar esto usamos la función disponible en la librería "USER32.dll" que se muestra el código a continuación:
Declare Auto Function Lib "USER32.DLL" ( _
  ByVal lpClassName As String, _
  ByVal lpWindowName as String) As IntPtr

Como observamos esta función busca la ventana en función del nombre (texto que aparece en el barra de tareas de windows) y nos devuelve un puntero (dirección de memoria) a dicha ventana.

2.- Activar la ventana
Para enviar la pulsación de teclas y que estas surgan efecto es necesario establecer el foco en esta ventana, para ello usaremos la siguiente función:
Declare Auto Function SetForegroundWindow Lib "USER32.DLL" ( _
  ByVal hWnd as IntPtr) as Boolean

A esta función es necesario pasarle como parámetro el puntero de la ventana obtenido con la función anterior.

3.- Envío de las pulsaciones
Para el envío de las pulsaciones usaremos la función "SendKeys". Como ejemplo abriremos la calculadora y le enviaremos una combinación de teclas para realizar la operación: 120*5

Dim wndCalculadora as IntPtr = FindWindow(Nothing,"Calculadora")
If wndCalculadora=IntPtr.Zero Then
   Throw New Exception("Debes abrir la calculadora")
End If
SetForegroundWindow(wndCalculadora)
SendKeys.SendWait("120")
SendKeys.SendWait("*")
SendKeys.SendWait("5")
SendKeys.SendWait("=")