25 de agosto de 2016

Usando WSH para enviar secuencias de tecla en VFP

Muchas veces encontramos resuelta cierta funcionalidad que necesitamos para nuestra aplicación en algún software y nos preguntamos ¿cómo podría integrarlo a mi sistema?

En muchos casos la respuesta la encontramos en las API que dicho software pone a nuestra disposición o a veces un control ActiveX que podemos instanciar en nuestros formularios. Pero existen otros casos en los cuales no tenemos una respuesta positiva y tenemos dos alternativas: desarrollamos la funcionalidad requerida o intentamos automatizar el uso de dicho soft.

Veamos entonces como podemos utilizar la potencia del Windows Scripting Host para enviar la secuencia de teclas necesarias a otra aplicación para resolver cierta funcionalidad.

A modo de ejemplo automatizaremos una operación matemática en la aplicación Calculator de Windows. Para ello escriba el siguiente código:

MODIFY COMMAND SendKeys
Copie y pegue el código que se muestra a continuación:
* Listado Completo
Local lnHWND, loWSH

* Declaramos funciones de las API de Windows
DECLARE LONG FindWindow IN WIN32API AS FindWindow STRING @a, STRING @b
DECLARE LONG SetForegroundWindow IN WIN32API LONG

* Buscamos una instancia de la aplicación para obtener su Handler
lnHWND = FindWindow(0, "Calculator")
If lnHWND = 0
    * Si no se está ejecutando, la ejecutamos
    Run /N Calc.EXE
    * Y obtenemos su Handler
    lnHWND = FindWindow(0, "Calculator")
Endif

* Instanciamos el Windows Scripting Host
loWSH = CreateObject("WScript.Shell")

* Enviamos la aplicación a primer plano
SetForegroundWindow(lnHWND)

* Por último enviamos la secuencia de teclas
loWSH.SendKeys("140{+}200")
loWSH.SendKeys("{enter}") 
Secuencias de Escape

En la siguiente línea loWSH.SendKeys("140{+}200") vemos que el signo de suma está encerrado entre llaves. Esto se debe a que está definiendo una secuencia de escape, indicándole al WSH que debe enviar el caracter "+", y debe hacerse de esta forma ya que un signo "+" sin llaves estaría indicando que se debe enviar la pulsación de la tecla SHIFT (por ejemplo: "+casa", enviaría "Casa"). Vea Material Adicional para obtener la lista completa de secuencias de escape.

Conclusión

Si bien el ejemplo es muy sencillo y probablemente nunca se nos va a ocurrir automatizar la calculadora para hacer una suma, vale la pena analizarlo ya que muestra claramente el uso del método SendKeys del WSH.

Material Adicional

Refiérase a http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthsendkeys.asp para consultar las secuencias de escape definidas para el método SendKeys del WSH.

Acerca del autor

Esteban Bruno nació el 25 de marzo de 1973 en Buenos Aires, Argentina. En el año 1992 se recibió de Analista Programado en la Comisión Argentina de Informática, y en 1998 egresó de la Universidad CAECE con el título de Licenciado en Sistemas. Desde el año 1990 ha trabajado en el área de desarrollo en diferentes empresas y utilizando una amplia gama de lenguanjes (Cobol, C, Clipper, FoxBase, FoxPro desde 2.5 para DOS hasta Visual FoxPro 9, Visual Basic, ASP, Java, etc.) y tecnologías. Es socio del MUG Argentina (Microsoft User Group) y actualmente se desempeña como Analista Funcional en IMR S.A. y dirige el Dpto. de Sistemas de TASSO S.R.L. Contacto: bruno@tasso.com.ar

No hay comentarios. :

Publicar un comentario