Comando sendkeys en archivo bat windows 7
Solicito de su valiosa ayuda para ver si es posible que en un archivo de procesamiento por lotes se haga una combinación de teclas para cambiar de sistema operativo, actualmente estoy trabajando en windows emulado y ya tengo un archivo batch que ejecuta impresión y elimina archivos ya impresos pero quiero implementar esa combinación de teclas en forma automática
Aquí el archivo
----------
@echo off
timeout /t 8 /nobreak >nul
notepad.exe /p "etiqueta de envio.txt"
timeout /t 10 /nobreak >nul
' Aquí poner una instrucción que haga una combinación de teclas control y flecha izquierda para cambiar de sistema operativo
exit
1 Respuesta
No se me ocurre una forma de probar lo que pides pero yo he utilizado algo parecido en algún caso.
Como cuento en esta pregunta: Como enviar datos a un navegador y hacer saltos como el TAB el editor de esta web no permite incluir algunos tag. Adaptado al tuyo podría ser algo así:
@echo off timeout /t 8 /nobreak >nul notepad.exe /p "etiqueta de envio.txt" timeout /t 10 /nobreak >nul cscript //nologo "%~f0?.wsf" exit ----- Begin wsf script ---> Set obj = WScript.CreateObject("WScript.Shell") Obj.SendKeys "{CTRL}{LEFT}"
La parte VB debe ir como se indica en esa consulta, en los últimos dos posts
¿Sabes si llega a actuar la parte WSF? Si no lo tienes claro puedes incluir alguna instrucción de depuración, algo como:
WScript. Echo now & " Entra en la parte VB"
incluida en la parte WSF
Entre el WScript. Y el Echo no debe haber ningún espacio. Son cosas del "corrector ortográfico" de la página que las hace sin pedir permiso.
No funciona tampoco, igual no tiene ningún comportamiento, quiero pensar que al ser virtualizado y el control lo tiene osx por esa razón no actúa el comando sendkeys, de cualquier manera es algo muy sencillo que se puede seguir trabajando haciendo de manera manual la combinación, la verdad nos gusta hacernos la vida más fácil pero no es algo que sea tan necesario.
Agradezco tomar interés en el tema, saludos cordiales.
Yo creo que si no sale el Echo del WScript da a entender que la invocación desde el bat al código wsf no funciona o no está bien programada. ¿Podrías poner un pantallazo con un TYPE del bat que incluye el wsf? Yo he utilizado algún BAT con bastante código VB embebido, siguiendo estas pautas, a veces con bastante complicación hasta que conseguí que funcionara, porque no siempre era directamente transportable desde VB.
Todavía hay esperanza. Como decía, de forma más o menos clara, en el enlace Como enviar datos a un navegador y hacer saltos como el TAB la parte VB embebida en el BAT debe ir precedida de
<job>
Junto con
script language="VBScript"
Este último entre <>
Y debe finalizar con
/script
Entre <>
Seguido de
</job>
Te incluyo una captura de pantalla del más sencillo de mis bat con VB embebido:
A ver si ahora se nota el VB
No funcionó tampoco, como te comento es una instrucción mínima que en realidad es muy fácil de hacer de manera manual, es posible que como te comentaba que al estar virtualizado el sistema operativo el control lo tome el OSX y por esa razón desde un archivo BAT por alguna cuestión de seguridad no permita el comando Sendkeys, te paso pantallazo de como quedo estructurado esta ultima vez la cual tampoco nos llamo al WSF, te envío un cordial saludo desde México y te reitero mi agradecimiento.
Aun con la invocación no lo ejecuta, agregue un comando tiemout para comprobar que al ejecutar no esta reconociendo las siguientes instrucciones.
Me gustaría decidir de una vez por todas si el problema tiene o no que ver con la virtualización. Para ello he pensado en un "esqueleto" de invocación del VB embebido en un BAT. No sé si me hablas de entornos virtuales Windows 7 sobre Linux o de entornos virtuales de Windows 7 sobre otras versiones de Windows. Si es la primera opción solo se podría probar este esqueleto, al que llamo PBAVB.BAT, en el entorno virtual pero si es la segunda se podría probar en el entorno del Windows de soporte y también en el Windows virtual. En el pantallazo adjunto puedes ver el contenido del bat (mediante un TYPE) y del resultado de la ejecución. Si este BAT funciona como se espera en el entorno virtual el problema no estaría en una incompatibilidad sino en algún error en la materialización de lo que queremos.
Puedes ver el Echo del WScript y el resultado del SendKeys
La instrucción con TYPE va perfecto, pero por alguna razón no logro hacer esa combinación de teclas, estuve investigando en varias páginas webs sobre el comando sendkeys pero en todas esta la misma información de la cual el la tecla CTRL el método abreviado es ^ y la tecla izquierda es {LEFT} incluso se hace mención que para mantener la tecla CTRL presionada mientras recibe la instrucción es ponerlo entre paréntesis, he intentado de muchas manera porque ya estoy convencido que es un error de sintaxis porque el comando si esta funcionando
Seguiré probando ya que no he tenido el resultado esperado con ninguna de estas combinaciones
("^{LEFT}")
"(^{LEFT})"
"(^){LEFT}"
"(^)LEFT"
"{(^)LEFT}"
La tecla left esta funcionando de manera correcta ya que cuando hago el testo pero con tecla RIGHT se recorre la línea de comando en las posiciones que le indico en la instrucción, el código que me proporcionas funciona correcto solo falta que siga testeando la manera de hacer la combinación de la tecla CTRL, lo que estoy completamente seguro que si la hay.-
Te agradezco enormemente tu ayuda.
Por cierto, la virtualización era en OSX apple y uso parallels con windows 7, estoy convencido que no es problema de la virtualización, es sintaxis para lo cual seguiré buscando en la web. Saludos!
Por lo menos ha quedado claro que el VB embebido en BAT puede funcionar. Si consigo averiguar algo del CTRL en SendKeys te lo cuento.
Me da la impresión de que la combinación válida es
obj.SendKeys "^{LEFT}"
Para probarlo he hecho lo siguiente:
- Abro un bloc de notas
- Escribo en el "Hola, esto es una prueba"
- Pulso CTRL+IZDA
- Compruebo que esto sitúa el cursor delante de la "p" de prueba
Ahora ejecuto el PBAVB.BAT que muestro en el pantallazo:
Puede verse que el CTRL+IZDA se ha ejecutado correctamente.
- Compartir respuesta