PDA

Ver la Versión Completa : [ IDEA ] [SCRIPT] Emular la pulsación de teclas.


mlesir
09/05/13, 15:47:12
Bueno pues seguimos con los scripts. En este caso os traigo un comando super sencillo para que una vez introducido en la consola de comandos ( eso se hace seleccionando la acción Ejecutar Consola dentro de la categoría Scripts) al ejecutarse simulen y actúen como si tu con el dedo realmente presionaras esas teclas.
Tasker ya de por si posee la acción Pad/trackball y la acción Escritura, con lo cual muchas veces no tendreis que usar estos comandos. Pero Tasker por ejemplo no posee dentro del track mas que arriba,abajo,derecha, izquierda y pulsar. Así que yo lo uso por ejemplo cuando quiero que me salga el menu de una app, luego ya si sigo utilizando el track para moverme por el.

El comando es ( sin las comillas):

- "input keyevent 82"
(marcamos la casilla usar root, asi que ni que decir tiene que hay que ser root para que funcione).

Ejecutando este comando veremos como nos salta el menu que corresponda a la pantalla donde estemos. Si queremos que haga mas cosas, como por ejemplo mostrar menu, subir dos posiciones y pulsar, tan sólo tenemos que ir añadiendo acciones de ejecutar consola, cada una con su input keyevent y el número correspondiente a la pulsacion que queremos que haga.

El número es la pulsación de tecla que queremos emular. La lista completa es esta:

0 --> "KEYCODE_UNKNOWN"
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3"
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER" ( este es el Clik o pulsación)
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER" ( la tecla intro)
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"

Esto está tomado del foro oficial de Tasker. El link al hilo es:

https://groups.google.com/forum/?hl=es&fromgroups=#!topicsearchin/tasker/subject$3Ahow$20AND$20subject$3Ato$20AND$20subject $3Aemulate/tasker/LJhmfxT2mj8

Por último deciros que a veces ( no se porqué?) puede que os tarde en ejecutar un comando, o también puede pasar que las dos primeras veces no lo haga bien. Quiza maid450 pueda explicarlo.
Un ejemplo práctico lo pongo en otro post, http://www.htcmania.com/showthread.php?p=8655842 Es cómo desbloquear el movil con pin sin usar secure, ni desbloqueo de tasker. Para los que no les funcionan como a mi las dos anteriores opciones.

threpwood
10/05/13, 13:59:51
mola. lo acabo de probar y era lo que estaba buscando pero tengo un problema. Tengo una tarea que me detecta cuando estoy enganchado a la wifi del trabajo y como pide autenticacion , me abre un navegador , me carga la url y me pone el usuario y la password para conectarme a la wifi del trabajo . Todo eso me va bién pero no he sido capaz de encontrar una tecla que pase el foco desde la barra de direcciones del navegador hasta la caja donde introducir el nombre. el keycode de Tab me vale para pasar de la caja del nombre a la password y el enter para darle a aceptar pero me falta ese pequeño paso para que sea completamente automático. Alguien sabe?

mlesir
10/05/13, 14:29:09
Yo creo que lo que te pasa es lo que explique con WhatsApp, que es coo si no detectára esa caja. Hay por ahí un comando que permite pulsar en el punto de la pantalla exacto, con dos ejes de coordenadas x e y. Si no me equivoco esta en el mismo hilo que explico por el final pero yo no fui capaz de hacerlo funcionar.

maid450
10/05/13, 14:59:50
Tengo una tarea que me detecta cuando estoy enganchado a la wifi del trabajo y como pide autenticacion , me abre un navegador , me carga la url y me pone el usuario y la password para conectarme a la wifi del trabajo . Todo eso me va bién pero no he sido capaz de encontrar una tecla que pase el foco desde la barra de direcciones del navegador hasta la caja donde introducir el nombre. el keycode de Tab me vale para pasar de la caja del nombre a la password y el enter para darle a aceptar pero me falta ese pequeño paso para que sea completamente automático. Alguien sabe?

Como abres el navegador para cargar la URL? Se abre automáticamente cuando conectas a la red del trabajo?
Yo acabo de hacer una prueba con la accion "Red -> Navegar a URL" (o algo así, lo tengo en inglés), una espera de unos segundos para darle tiempo a cargar y con este comando unas cuantas veces mandando TABs se va moviendo a través de los elementos de la pantalla y contando cuantos hace falta para situarse en la barra de búsqueda he podido automatizar escribir algo y darle a enter.

He indagado sobre el comando input este y he encontrado cosas MUY interesantes :D
Las opciones que permite este comando son:


input keyevent <número o nombre de la tecla a pulsar> emula pulsar en el teclado la tecla indicada (ver la lista del primer post)
input text <texto> emula escribir el texto indicado (entre comillas si hay espacios) evitando pulsar un texto tecla a tecla
input tap <x> <y> emula una pulsación en pantalla en las coordenadas elegidas, no sé el rango que tomará para las coordenadas... habrá que indagar más
input swipe <x1> <y1> <x2> <y2> emula la acción de deslizar el dedo desde el punto de coordenadas x1;y1 al punto x2;y2

Por otra parte sobre los retrasos que comenta mlesir, los comandos en si tardan un poco en ejecutarse si los lanzas desde el terminal, esto lo gestiona el sistema operativo y no se puede hacer mucho, luego ya según como esté implementado puede que tasker añada un pequeño retraso más entre que recibe la respuesta del comando y que tasker pasa a la siguiente acción...


Lo que se puede hacer para evitar encadenar muchas acciones de estas una detrás de otra es encadenar los comandos en uno solo separandolos por ";" por ejemplo:
input keyevent 29;input keyevent 30;input keyevent 31;input keyevent 66
Entre los comandos de la cadena se puede meter el comando "sleep <num_segundos>" si es necesario que simplemente inserta una pausa del numero de segundos que indiquemos (admite decimales como por ejemplo "sleep 0.5" para esperar medio segundo) entre el comando anterior y el siguiente.


De esa forma ese posible retraso añadido de tasker desaparece y el unico retraso será lo que tarde el terminal en ejecutar cada acción.

threpwood
10/05/13, 16:41:57
El input tap me ha dado la vida! ya consigo hacer lo que quería. Lo ideal sería hacerlo mediante un comando http post pero no tengo forma de capturar el trafico para saber como formar la petición.
Las coordenadas se pueden sacar desde las opciones de desarrollador marcando "Mostrar ubicación cursor"

Gracias por la ayuda!

mlesir
10/05/13, 16:51:39
Ostras pues a mi no me funciona Escribeme literalmente como has escrito el comando porque yo por más que hago combinaciones no parece funcionar.
Nada imposible! Estaré escribiendo algo mal?

threpwood
10/05/13, 17:03:18
lo que he hecho exactamente:

Instalar el "locale executor plugin" de http://android.m.brothersoft.com/locale_execute_plug_in-117984.html según ponia en el enlace que has pegado al principio

y la orden que me funciona es "!input tap 352 419" ,sin las comillas claro.

A ver si te vale.

mlesir
10/05/13, 17:04:18
Threapwood por Dios! No me hagas sufrir que esto lo llevo buscando semanas, como puñetas se escribe el comando? Marcas usar root no?
EDITO:Gracias por la rapidez. Pues nada no funciona. He instalado el plugin lo he escrito tal cual y nada. Cierto que el registro de ejecución no me da error pero salvo que salen las notificaciones de supersu lw ha concedido permiso a execute, el comando no hace nada.
Esto es lo que me achicharra de los scripts que no se sabe pq a algunos les funcionará y a otros no. A ver si Maid450 sabe algo.

mlesir
10/05/13, 18:08:16
Pues creo que el problema es que yo no tengo lo de tap. Cuando meto input a secas como dice Maid450 me sale la información de ese comando y solo sale keyevent y string.
Cuando meto input tap a secas me pone "comando desconocido tap"
No se si podre conseguir "meter" esa opción. Quizá cambiando la app de superuser? (yo uso supersu) o como hice con el sql3 que hay una app que te la instala.

threpwood
10/05/13, 18:13:15
Sí quieres te puedo pasar mi comando input.

mlesir
10/05/13, 18:22:51
No te entiendo como que pasarme el comando?

maid450
10/05/13, 18:23:11
Por le que he leído por ahí depende de la versión de Android, no de la version de SuperSu, concretamente aquí (http://stackoverflow.com/questions/15613598/input-tap-command-missing-android-terminal-emulator) dicen que el "input tap" se añadió en la 4.1.1.
Buscaré a ver si encuentro por ahí algo para hacerlo en la 4.0.4...

Por otra parte, threpwood, deberías probar usar el comando desde la acción "Shell" de tasker o a malas con el secure settings que también tiene forma de hacerlo.
El "locale execute plugin" está anticuado y el propio autor recomiendausar una de esas alternativas.

mlesir
10/05/13, 18:50:36
Muchas gracias maid Pues si lo miras guay es que ahora con la app que quiero hacer no me puedo permitir actualizar.
Cuestión de tiempo, etc.
Lo de execute es fallo mio claro es antiguo el hilo y debe ser de cuando no tenia la opción tasker. Creo que igual debería borrarlo del recopilatorio.
O sea que es problema de la ROM no? Y supongo que por eso las variaciones en la sintaxis verdad? Pq quizá una rom utiliza una versión u otra... Alguna manera de ver eso y saber asi que sintaxis usar? Alguna guía, Web libro.... Tipo Linux explicado como si tuvieras 5 años?
De verdad gracias maid creo que lo que has hecho con lo tap ni en el foro oficial lo han conseguido, al menos yo estuve probando todos los métodos y buscando y no conseguí nada, lo único lo que puse en el primer post.

threpwood
10/05/13, 19:40:05
El input es un comando que está en el /System/bin creo. Con copiarte un input más actualizado puede que tengas esas opciones

threpwood
10/05/13, 19:41:58
Guay, gracias por el aviso del locale

mlesir
10/05/13, 23:13:09
Ah! Ahora te entiendo threepwood Pues ya estas tardando en mandarmelo jeje. No se si lo podrás poner como un archivo aquí. Si no enviamelo al correo de ATASKREADOS

[email protected]

Así veo si puedo hacer que este disponible al resto.
Otra cuestión. Os quería haceros ver que con esto tasker, aunque de manera "cutre", lenta etc, tiene acceso y puede manejar TODO. Por ejemplo desbloquear el móvil aunque este con patrón, Tasker dibuja el patrón. O que tal cambiar el estado en WhatsApp? Y así muchas.
Por eso y por que sabemos que tasker tiene limitaciones es importante, pq puede ser un método para sortear Muchas carencias que tiene Tasker.

threpwood
10/05/13, 23:39:55
Te lo he mandado por privado.

Saludos

mlesir
11/05/13, 02:12:40
Gracias mañana te os digo a ver que pasa.

mlesir
11/05/13, 05:40:02
Nada.

Después de volverme loco buscando la carpeta con root explorer lo he conseguido.

Pero la carpeta bin no me deja ni borrar archivos ni sobrescribirlos ni nada. Así que no lo puedo cambiar. Me pone un mensaje que dice que no puedo cambiarlo (??? Se supone que para eso soy root no? Pues nada que no me deja, será que no se fía de mi, Jeje).
Googleando no he encontrado nada ni remoto acerca de como instalar un comando Linux en Android.

Because147
11/05/13, 05:42:59
¿Alguien podría explicarme oara que sirve esto?

Caravantes
11/05/13, 06:13:33
Después de volverme loco buscando la carpeta con root explorer lo he conseguido. Pero la carpeta bin no me deja ni borrar archivos ni sobrescribirlos ni nada.

Si te sirve de consuelo, creo que me pasa lo mismo. Uso la app ES FILE EXPLORER (con root). Puedo ver lo que hay en la carpeta "/system/bin". He probado a copiar ahí un archivo nuevo y no me deja: permiso denegado. Vaya chasco, no me lo esperaba. A ver si algún linuxero nos ilumina.

mlesir
11/05/13, 06:19:08
Coño otro que no duerme por las noches jeje. Pues si, me sirve de consuelo. Y pensar que he estado tan cerca del Grial! En fin me voy a dormir por hoy me rindo. Que tengas buena noche Caravantes.

maid450
11/05/13, 10:31:43
Nada. Después de volverme loco buscando la carpeta con root explorer lo he conseguido. Pero la carpeta bin no me deja ni borrar archivos ni sobrescribirlos ni nada. Así que no lo puedo cambiar. Me pone un mensaje que dice que no puedo cambiarlo (??? Se supone que para eso soy root no? Pues nada que no me deja, será que no se fía de mi, Jeje). Googleando no he encontrado nada ni remoto acerca de como instalar un comando Linux en Android.

Los exploradores root tipo root explorer o ES File manager a veces necesitas activar una opción para montar el sistema raíz (/) en modo r/w (lectura/escritura) para poder hacer modificaciones.

Yo de todas formas no lo recomendaría para este caso, fue lo primero que pensé yo tambien, y en muchos casos cambiar el ejecutable se puede hacer y es lo mejor, pero para esto creo que el comando input se apoya en librerías del sistema que no se pueden cambiar, y por tanto modificar la versión del comando no solo no funcionaría sino que podría causar más mal que bien...

Además me alegra decir que he encontrado una forma de hacerlo a muy bajo nivel que debería funcionar en cualquier version de Android, no es demasiado facil de sacar, pero al final me ha funcionado X-D. Estoy preparando un tutorial en otro hilo para explicar el método, ya que no basta un copiar/pegar porque para cada modelo de telefono, version de android, e incluso ROM puede cambiar, lo que voy a explicar es el metodo para sacar lo que hay que hacer para que funcione en el telefono del que lo siga.

¿Alguien podría explicarme oara que sirve esto?
Basicamente para poder hacer que tasker simule que estás pulsando teclas del teclado, como aplicaciones prácticas: el compañero threpwood ha hecho un perfil que le loguea automaticamente en una web introduciendo su usuario y contraseña desde tasker, y yo ayer me monté un perfil de prueba que me abre un contacto en whatsapp y le manda el texto que yo quiera automáticamente...
Enfin, como todo en tasker: lo que se te ocurra ;-)

threpwood
11/05/13, 10:58:37
Tanto root explorsr cómo el es file te deja montar la partición de sistema como r/w. Haz una copia antes del input original o si lo prefieres un nandroid y prueba. Como se dice arriba puede que se apoye en librerías y no funcione pero por probar no pierdes nada. Y aun así podrías ir copiando librerías y tener posibilidades de éxito.

mlesir
11/05/13, 17:08:44
Pues mira un consejo a ver si os sirve. Yo en la app que estoy tratando de hacer, y que algún día acabaré... Uso para seleccionar un contacto la pantalla busqueda. Por ejemplo si quieres escribir a Carlos. En la acción escritura de tasker puedes usar una variable. Aquí metes el nombre del contacto que quieres. Con el pad/trackball le das a buscar. Ahí escribes el nombre con escritura. Al final te quedará abajo el contacto Carlos. Abajo con el pad y pulsar.
Creo que es mejor asi porque si tienes 50 contactos y quieres escribir al 40 imagina bajar hasta ahí.
Otra cosa es que si añades un contacto Carlos es posible que ya no ocupe la posición 40 si no la 41.
Con este sistema además creo que ya será posible pulsar en pantallas que antes no se podía. Por ejemplo mandar fotos, audio, etc.
Como dice maid con esto guasap y otras ya son accesibles y las posibilidades que se abren son muchísimas.

darkopro
04/02/14, 13:15:17
Quería saber si hay algún comando para emular una pulsación continua para un botón, concretamente el home o si hay algún otro método para emular ese tipo de pulsaciones