COMO EMULAR PULSACION DE TECLA


([N1] yarumal) #1

Hola todos!
Alguien sabe como por codigo puedo enviar o emular la pulsación de cualquier tecla en mi caso específico, quiero que en una regilla editable despues de guardar el registro con Return, automaticamente tambien se presione insert para que dar listo para insertar un nuevo registro.


([N3] pacosatu) #2

Hola HENRY.

En Windows, yo uso scripting de VBScript, el cual está operativo por defecto.

Crea la siguiente función de Velneo fun:FUN_EJECUTAR_WSH(CODIGO)


Rem ( Crea un fichero vbs temporal y lo ejecuta )
Set ( FICHERO_VBS, sysCacheClientPath + “/ejecutar.vbs” )
Fichero: Abrir (oFichero,FICHERO_VBS,Lectura/escritura(Crea o limpia),OK,UTF-8)
// Mensaje ( "Ejecuta: " + CODIGO, Información, , )
Fichero: Grabar línea ( oFichero, CODIGO, OK )
If ( OK = 1 )
Ejecutar documento ( FICHERO_VBS, OK )

En este caso, pasas como parámetro CODIGO el siguiente Script:
set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys("{INSERT}")

Pruébalo.

Saludos
Paco Satué


([N1] yarumal) #3

Excelente, muchas gracias… y en Linux?, es que tengo clientes en las dos plataformas.


([N1] yarumal) #4

Hola seh!

Ya ando probando lo del insert, pero windows me da un error al ejecutar el archivo, admunto la mimagen.



([N3] pacosatu) #5

Hola HENRY.

El magnífico compilador y depurador de WSH te dice que el error está en la línea 1 caracter 29. Seguramente son las comillas que has copiado desde la página HTML del foro de Velneo. Borra esas comillas que no le gustan al compilador de WSH y teclea las correctas desde tu teclado.

Saludos
Paco Satué


([N1] yarumal) #6

No, el problema es que el vbs lleva unas comillas dentro de comillas y el editor de formulas de velneo no me deja hacer eso (no se porque), lo que hice es simplemente ejectuar el archivo ya existente con dicho codigo y evitar que velneo lo genere.

En linux es todavia mas facil, con una erramienta que se llama xdotool y basta con ejectutar un comando del sistema así:
xdotool key Nombre_Tecla
y eso es todo. nótese que en el nombre de latecla se inicia con mayuscula cada palabra.
Basta con consultar en google sobre dicha herramienta.


([N3] Humber) #7

Buenas Noches @yarumal, si no me equivoco para imprimir dobles comillas es con "
como si fueras a imprimir un tabulador o salto de linea \t \n…
Si no estoy en lo correcto, investiga secuencias de escape y consigues la respuesta para colocar dobles comillas o ciertos caracteres en las formulas de velneo.

Saludos


([N1] yarumal) #8

Muy bien, muchísimas gracias.


([N1] yarumal) #9

El código vbs que me dió seh me funciona perfecto en windows 7 y 8 pero no en windows xp, alguien sabe porque puede ser.


([N4] Infortic) #10

En xp no puedes ejecutar un vbs con ejecutar documento, esta misma semana he tenido un problema con un vbs.

Sustituye esa línea por:

Lanzar aplicacion “cscript.exe " + replaceString(FICHERO_VBS,”/","\")


([N4] Infortic) #11

Perdona, casi mejor:

Lanzar aplicacion “cscript.exe ” + “\c” + replaceString(FICHERO_VBS,”/”,”\”) + “\c”


([N4] mdelgado) #12
  1. Añades un campo al registro que sea booleano BAÑADIR_NUEVO_REGISTRO
  2. En el evento Posterior a un Alta de Línea, SI BAÑADIR_NUEVO_REGISTRO, haces un alta automática.
  3. Mueves el foco a la primera columna del ultimo registro de la columna capturando la tecla pulsada.

([N1] yarumal) #13

Hola, te agradezco tu respuesta, pero me podrías dar una explicación mas clara. con un ejemplo?.

Me parece interesante porque no tendría que recurrir a codigos externos.

Mil gracias.


([N4] mdelgado) #14

@yarumal

Habría que hacer varias cosas y probarlas, pero más o menos sería así:

  1. Tenemos una talla llamada ORIGEN. En esa tabla crear un campo llamado BAUTO_NUEVO (booleano)
  2. En la rejilla en la que editas, le creas una conexión de evento Edición Iniciada, en la que modificas BAUTO_NUEVO = 1 para indicar que al guardar debe generar un alta automática.
  3. En la tabla ORIGEN le creas un trigger en Alta: Posterior a un alta de ficha en el que creas un nuevo registro en la tabla origen IF (BAUTO_NUEVO=1)
  4. En la rejilla en la que editas, le creas una conexión de evento Edición Finalizada en el que cargas el nuevo registro, lo añades a la lista y mueves foco a la primera columna de la rejilla.

Como te digo, es lo que haría sobre papel, pero no sé si a la hora de implementarlo puede surgir algún inconveniente que te impida realizarlo.

Saludos
Miguel D.


([N1] yarumal) #15

Muchas gracias, lo trabjaré y luego te cuento.


([N1] yarumal) #16

*- “replaceString” es algun parametro de cscript.exe?.
*- debo especificar ruta y ubicación del fichero vbs, o escribir directamente el codigo vbs en este comando de velneo.


([N1] yarumal) #17

Hola, he estado probando pero no lo logro, seguro que te funciona en windows xp?


([N4] Infortic) #18

Hola yarumal

No lo he probado con ese script en concreto.

Yo lo he probado con otros .vbs que no me funcionaban en xp y era porque ejecutar documento no lo ejecutaba, por eso usé cscript para ejecutar el vbs

En el caso que te ocupa, el problema puede ser otro, es posible que al lanzar el vbs desde “consola”, las pulsaciones las esté recibiendo la consola en lugar de tu aplicación, en cuyo caso, mala solución tiene me parece a mi :frowning:


([N3] Humber) #19

Bueno, he estado viendo muchos mensajes en este post y no había comentado algo porque no he investigado como hacerlo en linux, pero parece que dejaron de lado el tema y se enfocaron solo en windows.

Voy a aportar mi granito a ver si les sirve…

Utilizando la dll user32, puedes emular una pulsación de tecla con keybd_event.

1)Creas el objeto libreria externa con nombre user32.dll, convención C_X86_WIN32_STD.

2)Creamos la función keybd_event con 4 parametros y la misma convención.
*key
*scan
*flag
*extrainfo

3)Luego simplemente creamos una función de velneo que ejecute la función de la dll con los parámetros

Presionamos
dll:USER32.KEYBD_EVENT@app.app(‘tecla’, 0, 0, 0)
Soltamos
dll:USER32.KEYBD_EVENT@app.app(‘tecla’, 0, 2, 0)

en tu caso, el valor de la variable ‘tecla’ para que se presione insert es 45.

Saludos.


([N1] yarumal) #20

Muchas gracias por tu interes, he estado probando y aun no me funciona.

‘tecla’ es un parametro de la funcion que se crea en velneo?

Los 4 parámetros: key, scan, flag, extrainfo llevan algún tipo de dato en especial… todos son numéricos?

Ejecuto la función con un set?