Código para apretar una tecla elegida y que se cierre la aplicación en batch.

Iniciado por Xwatmin, 14 Abril 2013, 13:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Xwatmin

Se podría hacer?

Imaginaros que tenéis una aplicación que no se cierra o necesita varios pasos, se podría simplificar preparando el batch para que al apretar cierta tecla, forzara el cierre de la aplicación.

Esto puede hacerse o pido demasiado...
El físico no es importante, es más importante un ingeniero.

Meine programmen

Lo unico que se me ocurre seria usar el comando CHOICE entre comando y comando.
CHOICE /C YX /N /T 1 /D Y
IF %ERRORLEVEL%==2 (exit)

Tendrías que poner ese codigo entre cada comando. En CHOICE, /C YX, dice que las teclas posibles son Y y X; /N dice que no se mostrara ningun mensaje en la pantalla; /T 1 dice que dara 1 segundo de tiempo para introducir la letra, y /D Y dice que la opcion por defecto es Y. Si pulsases Y la variable %errorlevel% sería 1 y si pulsases X, sería 2. Ralentizaria mucho el programa y es una solución un poco chapucera, pero es lo unico que se me ocurre por ahora.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Xwatmin

Se acerca a lo que digo pero no lo suficiente.

De la misma forma que se puede apagar una aplicación pasando un tiempo, no veo imposible el crear un código para que al pulsar la tecla que elijamos, el batch mande la orden de cerrar la aplicación...

Llevo toda mañana leyendo foros y probando, si adelanto algo os aviso...
El físico no es importante, es más importante un ingeniero.

Meine programmen

El problema es que batch no puede hacer dos cosas a la vez, asi que no puede esperar a que pulses una tecla para cerrarse a la vez que hace su funcion. Podrias utilizar dos archivos, el principal, que al abrirlo crea y abre en una nueva ventana el segundo, y el otro, que cuando introduces la tecla se borra a si mismo y cierra las dos ventanas mediante el comando TASKKILL. Sería añadir al principio del .bat importante
(echo @ECHO OFF
echo CHOICE /C X /N
echo DEL %%0
echo TASKKILL*
echo exit)>>2.bat
start CMD.exe /K "2.bat"


*Donde puse TASKKILL deberia de ir el comando TASKKILL de manera que cerrara todas las ventanas de batch, o solo la del programa 1. Te la pondría yo, pero no estoy muy seguro de como funciona el comando.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


daniel.r.23

Buenas en uno de mo consultas pregunte algo sobre captar pulasaciones en el teclado, y me respondieron exactamente lo mismo que a ti.. "la unica manera es usando CHOICE"
pero buscando y buscando encontre en un post que hablaban de una libreria KEYBOARD.dat
que lo que hace es registrar las pulsaciones de 'algunas' teclas no todas, y lo que te devuelve es el cód en ascii y eso porgramandolo bien tenes un mapa de cracteres bien amplio.
Eso si este registra tecla por tecla, por lo que si concatenas las teclas que vos queres ahi tenes un conjunto de letras que pueden activar o realizar una funcion espesifica..
Espero haberme explicado

Xwatmin

El físico no es importante, es más importante un ingeniero.

Eleкtro

#6
Cita de: Xwatmin en 14 Abril 2013, 16:15 PM
De la misma forma que se puede apagar una aplicación pasando un tiempo, no veo imposible el crear un código para que al pulsar la tecla que elijamos, el batch mande la orden de cerrar la aplicación...

Si, claro... eso es algo muy posible en cualquier lenguaje, pero en Batch lamentáblemente NO, lo que quieres es capturar los eventos del teclado, y no puedes hacerlo de ninguna manera, es imposible.

Batch es procesamiento por lotes, como te han comentado no se pueden hacer 2 cosas al mismo tiempo... Primero se procesa "X", y luego "Y", no puedes procesar "Y" a la espera de "X".

A lo que daniel.r.23 se refiere es al archivo keyboard.dat de la aplicación Keyboard.exe, que es un comando de Windows XP y anteriores, dicho comando fue excluido en win 7/8 (dudo que lo puedas usar en ese SO), pero para nada sirve para tu propósito, el comando keyboard.exe es un prompt (Como set /P) es  decir, es un comando que pausa la ejecución del script (como ya dijimos no se pueden procesar 2 cosas a la vez en Batch) pero con la diferencia de que sólo permite pulsar una tecla, y al pulsarla devuelve el código de la letra, nada más.

La única solución es recurrir a otro lenguaje como VBScript, o alguna aplicación CommandLine externa, por ejemplo para configurar un Hotkey del escritorio (O un hotkey global), y al teclear el hotkey, mandar la orden de cerrar el proceso de la CMD.

EDITO: ...O generar un exe en otro lenguaje que cumpla lo que pides, capturar la tecla "X" del keyboard y si se pulsa cerrar la instancia de tu CMD, yo la haría para que pudiera pasarle dos argumentos, un argumento para la tecla a capturar, y un segundo argumento para el título del script (el título de la ventana del CMD que se qquiere cerrar), para no cerrar todos los procesos "CMD.exe" de golpe. Es algo fácil hacerlo, de verdad.

Saludos!