CTRL-C simulieren

A

alexANDHilfe

Ambitioniertes Mitglied
30
Wie kann ich CTRL-C simulieren unter der Annahme, dass diese Kombination kopiert (Später: CTRL-V, CTRL-A) ?
Ich kann bereis eine Tastenfolge (mit Sendevent) simulieren aber ich möchte auch Select-All, Kopieren, Einfügen anwenden (mittels einer Szene-Overlay). Nein, die Standard-Hilfsknöpfe, die beim Bearbeiten/Halten/Doppelklicken von Text normalerweise erscheinen tun es oft nicht -gar nicht mit SwiftKey oder in anderen Situationen...deswegen "brauche" ich sie ja. Die Tastatur "programmer keyboard" hat dies z.B. als Tasten, insofern muss die Funktion ja irgendwo sein ... Mit AutoInput dürfte das gehen, aber ich kann nicht glauben, dass es NUR damit geht.
 
Hallo,

ich gehe mal davon aus, dein Overlay willst du für beliebig laufende Apps verwenden?

Ctrl-A an eine Tasker-Szene senden geht so:

Code:
A1 JavaFunction
     inst = new Instrumentation();
A2 JavaFunction
     key = new KeyEvent(0,0,0,29,0,4096) // 29=a, 4096 = Ctrl-flag
A3 JavaFunction
     inst.sendKeySync(key);
KeyEvent | Android Developers

Instrumentation | Android Developers

Das erzeugt allerdings einen Fehler, wenn ich die Tastenkombination an meinen Editor schicken will, da die Berechtigung INJECT_EVENTS fehlt...



UiAutomation und diese ganze Test-APi sieht auch interessant aus, hier habe ich es aber noch nicht mal hinbekommen ein Objekt zu erzeugen:

https://developer.android.com/tools/testing-support-library/index.html#uia-apis

https://developer.android.com/reference/android/app/UiAutomation.html


Welche Tasten gehen denn mit SendEvent und wie hast du das umgesetzt?


Ein registriertes Soft-Keyboard hat natürlich die Berechtigungen um Tasten zu schicken, und der Source-Code von AutoInput steht vermutlich nicht zur Verfügung :winki:

Grüße, Jürgen.
 
Erstmal Danke, Du bist der erste (auf reddit gibt es nur AutoInput-Tipps), der eine Lösung versucht.

androidkoller schrieb:
Hallo,

ich gehe mal davon aus, dein Overlay willst du für beliebig laufende Apps verwenden?
>>Ja

Welche Tasten gehen denn mit SendEvent und wie hast du das umgesetzt?
>>Nicht auf Java-Level... und nicht alles mit sendevent
Ein Power-Hold auf meinem Galaxy-Note3 sieht so z.B. so aus:
(Run Shell as root)
sendevent /dev/input/event5 1 116 1
sendevent /dev/input/event5 0 0 0
usleep 500000
sendevent /dev/input/event5 1 116 0
sendevent /dev/input/event5 0 0 0

... weil event5 -bei mir-für diese physische Taste zuständig ist ...andere Nummern sind andere Sensoren/Tasten..wohl bei jedem Gerät anders nummeriert. (Mehr dazu hier)
Ein "Cursor nach links" ist mit "input keyevent 21" machbar und scheinbar nicht mit sendevent machbar...oder doch ?

Inspiriert/in die Irre geführt worden bin ich hier. Dort wird
/dev/input/event4 angesprochen um CTRL-V zu erreichen, aber das ist wohl so, weil das "moto droid 4" eine physikalische Tastatur hat...

Im Prinzip ist das ein neuer Anlauf wie hier. Der Thread dort endete mit der Existenz von

Ctrl-V Keyboard for Tasker

Ctrl-A an eine Tasker-Szene senden geht so:

Code:
A1 JavaFunction
     inst = new Instrumentation();
[COLOR=Blue][...]
>>Leider bin ich zu Java-Noob um diese 3 Tasks überhaupt eingeben zu können. 
May i trouble you for a screenshot ? [/COLOR]
 
Zuletzt bearbeitet:
Hallo!

Zum Thema Shell sendevent:
Wir müssen ja auf alle Fälle einen Buchstaben, z.b. "A" schicken. Das funktioniert mit sendevent doch nur, wenn das Handy eine Hardware-Tastatur hat, oder vielleicht noch wenn eine Software-Tastatur geöffnet ist, oder?

Anbei der Task mit JavaFunction.

Grüße, Jürgen.

Anhang anzeigen _SendKey.tsk.xml.zip
 
Danke für's xml.
Das klemmt aber noch bei mir, die 4096 bzw. Param"6" im Task-Edit Modus ist weg und der Task "heisst"
A2 JavaFunction
key = new KeyEvent(0,0,0,29,0,error,see logs)

Vorsicht / evtl. 1 Schritt zurück: Ich bin mir überhaupt nicht sicher, ob CTRL-C oder CTRL-A das bekannte COPY/Select-ALL in Android auslöst, denn das ist bisher nur die Vermutung...
Soft-Tastaturen habe (nur) eine COPY Taste...(und keine CTRL-Taste)
MyMobiler z.B. handelt PASTE wie ein "Eintippen-simulieren" - siehe hier.
Insofern ist evtl. sicherheitshalber das Thema "Input/Output Clipboard (dazu stiess ich auf das hier) und/oder wie-markiert-man-alles".
...insofern weiss ich nicht, was wir auf jeden Fall schicken müssen.
Ich habe schon versucht abzufangen, was ich eingebe (sendevent "überwachend" -siehe hier) aber ich kann aus dem Log dann nur die X,Y Koordinaten vom Touch auf den Screen/die Soft-Tasten auslesen und mit einem Keyboard-Emulator via WIFI knackte ich es auch nicht.
 
A2 JavaFunction
key = new KeyEvent(0,0,0,29,0,error,see logs)
Sorry, da habe ich gar nicht dran gedacht: Du brauchst die Beta-Version Tasker for Android, sonst werden nur maximal fünf Parameter unterstützt (dann sieben)...

Ich bin mir überhaupt nicht sicher, ob CTRL-C oder CTRL-A das bekannte COPY/Select-ALL in Android auslöst
Das funktioniert wie gewünscht. Zumindest mit einem TextEdit in einer Tasker-Szene:

Code:
KeyEvent(0,0,0,29,0,4096)  // 29=a, 4096 = Ctrl-flag
inst.sendKeySync(key);
KeyEvent(0,0,0,31,0,4096)  // 31=c, 4096 = Ctrl-flag
inst.sendKeySync(key);
KeyEvent(0,0,0,123,0,0)    // 123=ENDE
inst.sendKeySync(key);
KeyEvent(0,0,0,50,0,4096)  // 50=v, 4096 = Ctrl-flag
inst.sendKeySync(key);
Markiert alles, kopiert, setzt den Cursor ans Ende und fügt ein.

Grüße, Jürgen.
 
  • Danke
Reaktionen: alexANDHilfe
Hallo!

CtrlVKeyboard verwendet eine Ableitung von InputMethodService. In Tasker würde das ungefähr so aussehen:

Code:
_SendKey1 (64)
    A1: Java Function [ Return:input Class Or Object:InputMethodService Function:new
{InputMethodService} () ] 
    A2: Java Function [ Return:con Class Or Object:input Function:getCurrentInputConnection
{InputConnection} () ] 
    A3: Java Function [ Return:key Class Or Object:KeyEvent Function:new
{KeyEvent} (long, long, int, int, int, int) Param:0 Param:0 Param:0 Param:29 Param:0 Param:4096 Param: ] 
    A4: Java Function [ Return: Class Or Object:con Function:sendKeyEvent
{boolean} (KeyEvent) Param:key]
Tasker kann aber leider das InputConnection-Objekt nicht initialisieren...
Code:
16.33.23/E Java Function: failed to init target class con
:confused2:

Grüße, Jürgen.

Anhang anzeigen _SendKey1.tsk.xml.zip
 
Respekt. Immerhin. Klappt soweit , aber eben auch nur mit einem TextEdit in einer Tasker-Szene und auch mal woanders in Tasker...
Danke , danke, danke.
Wenn Dir noch einfällt, wie das überall klappen könnte bist du endgültig mein Held.
 
Schon fast ärgerlich, bei jedem Ansatz hängt es an einer "Kleinigkeit"...
 

Ähnliche Themen

X
Antworten
0
Aufrufe
254
xyzUpdate
X
M
Antworten
26
Aufrufe
1.684
Maxe12345
M
coolzero3389
Antworten
0
Aufrufe
312
coolzero3389
coolzero3389
Zurück
Oben Unten