temporizador de teclas en bat

Iniciado por por_cel, 28 Octubre 2017, 14:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

por_cel

hola me pueden ayudar?
¿Se puede ejecutar una orden que pulse una tecla ( espaciador ) y a los X segundos , la vuelva a pulsar ? indicando yo los segundos que quiera, con un programilla en bat.
Entre en este mundillo hace poco y estoy muy verde
Saludos y gracias ( Esto me serviria un webo)




Eleкtro

#1
Cita de: por_cel en 28 Octubre 2017, 14:01 PM¿Se puede ejecutar una orden que pulse una tecla ( espaciador ) y a los X segundos , la vuelva a pulsar ? indicando yo los segundos que quiera, con un programilla en bat.

Con "puro" código Batch no es posible, Batch no provee ninguna característica de interoperabilidad con el dispositivo de teclado para poder simular eventos de pulsación de teclas ni nada que se le parezca.

Como solución alternativa, lo que se suele hacer desde un batch-script e ironicamente para cubrir las limitaciones por naturaleza de Batch, sería utilizar aplicaciones de terceros como por ejemplo nircmd, o escribir un archivo local (un script) cuyo contenido sería una unidad de código funcional escrita en el lenguaje Visual Basic Script (también conocido por sus siglas VBS), en este caso un código que llamaría al miembro SendKeys, pero llevar a cabo esta especie de hibridación de códigos se suele hacer por pura inexperiencia / ignorancia o simplemente por que el programador es un chapuzas sin remedio... ya que lo cierto es que resulta una soberana estupidez hacer algo así debido a que siempre se tiene la ventajosa opción de recurrir directamente a VBS para desarrollar todo el código desde un principio.

Cita de: por_cel en 28 Octubre 2017, 14:01 PMEntre en este mundillo hace poco y estoy muy verde

El mejor consejo que alguien te podrá dar jamás: deja de utilizar Batch, o en su defecto limítate a utilizarlo teniendo en mente el propósito con el que éste fue creado, es decir, para permitir una mínima interoperabilidad con los componentes de la shell de Windows para poder llevar a cabo tareas básicas de usuario (pero muy, muy básicas) las cuales están mayormente relacionadas con la administración del sistema de archivos en general.

Batch no es considerado como un lenguaje de programación, sino más bien como una herramienta limitada, bastante inutil y en la que el tiempo por la complejidad de escritura para el desarrollo de cualquier algoritmo que en cualquier otro lenguaje sería considerado "sencillo" de escribir y realizar, en esta herramienta se puede acabar volviendo algo extremadamente tedioso (y creando un código muy espagueti) debido a sus limitaciones.

Hay otros lenguajes a tu disposición nativamente soportados por Windows los cuales son infinitamente más completos y sofisticados en comparación, como es el caso de PowerShell, en el que además puedes compilar (para posteriormente cargar en memoria y usar los miembros compilados) unidades de código escritas en cualquier lenguaje soportado por la plataforma .NET Framework, como sería C# y VB.NET , entre otros.

En fin. Para enviar la tecla "espacio" a la ventana que esté activa y repetir la pulsación de forma indefinida con un intervalo de tiempo determinado, puedes hacerlo de la siguiente manera con PowerShell:

script.ps1
Código (actionscript) [Seleccionar]
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

[TimeSpan]$interval = [System.TimeSpan]::FromMilliseconds( 1000 ) # 1 sec.
 [String]$keys     = " " # space bar
                         # https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx

while( $true ) {
   [System.Windows.Forms.SendKeys]::SendWait( $keys )
   [System.Threading.Thread]::Sleep( $interval )
}

( nótese que el código es sincrónico, bloqueante. )

...el código es un ejemplo que adaptarías a tus necesidades. Recuerda que aquí no le regalaremos el trabajo hecho a nadie, si necesitas estudiar la utilización básica de este lenguaje, pues estudialo, y si tienes una pregunta específica, pues sientete libre de formular dicha pregunta en este foro.

Saludos.








por_cel