Имитация комбинации нажатия клавиш с терминала ADB

Я хочу отправить « CTRL + W » в Chrome для Android, чтобы закрыть активную вкладку. Я пробовал много вещей, но добиться успеха с терминала не удавалось. (Если я подключаю USB-клавиатуру с OTG, я могу закрыть вкладку с помощью CTRL + W)

Во-первых, я не хочу писать приложение для этого, я хочу, чтобы команда оболочки использовала его из Tasker.

Я где-то читал, что для этого (CTRL + W), мне нужно имитировать нажатия клавиш следующим образом:

Вниз CTRL
Вниз W
Вверх W
Вверх CTRL

И для достижения этого из терминала мне кажется, что я должен использовать « sendevent ».

Я могу имитировать все аппаратные клавиши с «sendevent», но не могу имитировать обычные клавиши.

Например, вниз и до клавиши POWER:

sendevent /dev/input/event1 1 116 1 sendevent /dev/input/event1 0 0 0 sendevent /dev/input/event1 1 116 0 sendevent /dev/input/event1 0 0 0 

Я использую эти команды, но я не могу использовать эти команды для отправки обычных ключей. (Например, a, b, c и т. Д.),

Событие1 является gpio-ключами, поэтому я использую его. И все остальные входные события являются датчиками, а один – драйвером зарядки. (Max77693-muic)

Выходной сигнал «getevent -p» говорит, что:

 add device 1: /dev/input/event9 name: "compass_sensor" events: REL (0002): 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 input props: <none> add device 2: /dev/input/event6 name: "barometer_sensor" events: REL (0002): 0000 0001 0002 input props: <none> add device 3: /dev/input/event5 name: "light_sensor" events: REL (0002): 0000 0001 0002 0009 input props: <none> add device 4: /dev/input/event4 name: "proximity_sensor" events: ABS (0003): 0019 : value 1, min 0, max 1, fuzz 0, flat 0, resolution 0 input props: <none> add device 5: /dev/input/event3 name: "gyro_sensor" events: REL (0002): 0003 0004 0005 input props: <none> could not get driver version for /dev/input/mice, Not a typewriter add device 6: /dev/input/event7 name: "Midas_WM1811 Midas Jack" events: KEY (0001): 0072 0073 00e2 SW (0005): 0002 0004 input props: <none> add device 7: /dev/input/event1 name: "gpio-keys" events: KEY (0001): 0072 0073 0074 00ac input props: <none> add device 8: /dev/input/event0 name: "max77693-muic" events: KEY (0001): 0072 0073 00a3 00a4 00a5 input props: <none> add device 9: /dev/input/event8 name: "sec_touchkey" events: KEY (0001): 008b 009e LED (0011): 0008 input props: <none> add device 10: /dev/input/event2 name: "sec_touchscreen" events: ABS (0003): 002f : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0 0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0 0031 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0 0032 : value 0, min 0, max 30, fuzz 0, flat 0, resolution 0 0035 : value 0, min 0, max 719, fuzz 0, flat 0, resolution 0 0036 : value 0, min 0, max 1279, fuzz 0, flat 0, resolution 0 0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0 003c : value 0, min -90, max 90, fuzz 0, flat 0, resolution 0 003d : value 0, min 0, max 1, fuzz 0, flat 0, resolution 0 input props: INPUT_PROP_DIRECT 

Также мой файл макета gpio-keys «/system/usr/keylayout/gpio-keys.kl» выглядит так:

 key 115 VOLUME_UP WAKE key 114 VOLUME_DOWN WAKE key 116 POWER WAKE key 172 HOME WAKE 

Я могу отправить все обычные ключевые события с:

 "input keyevent KEYCODE_X" 

И отправить более одного:

 "input keyevent KEYCODE_X KEYCODE_Y" 

Вы должны думать, что он может работать следующим образом:

 "input keyevent KEYCODE_CTRL_LEFT KEYCODE W" 

Но keyevent вниз и вверх немедленно, и я не могу использовать его для отправки комбинации CTRL + W.

Я знаю, ответ должен быть с «sendevent». Но я не могу найти.

Я также попытался добавить некоторые поддельные ключи в файл макета ключа, например:

 key 115 VOLUME_UP WAKE key 114 VOLUME_DOWN WAKE key 116 POWER WAKE key 172 HOME WAKE key 19 Q 

Я перезапустил телефон, а затем попробовал:

 sendevent /dev/input/event1 1 19 1 sendevent /dev/input/event1 0 0 0 sendevent /dev/input/event1 1 19 0 sendevent /dev/input/event1 0 0 0 

Но он никогда не пишет «Q» в любом текстовом поле.

Пожалуйста, помогите, спасибо за помощь.

    О да!! Я не знаю почему, но всякий раз, когда я чувствую себя застрявшим, я прихожу к stackoverflow, и как только я начинаю писать вопрос, как-то я нахожу ответ … xD В любом случае, я смог сделать это, выполнив следующую процедуру:

    1. Перейдите в / system / usr / keylayout /
    2. В моем случае не было никаких gpio-ключей, в любом случае Open Generic.kl
    3. В нем есть все коды ключей, которые вам нужны для имитации чего-либо … например, для CTRL_RIGHT keycode – 97, а для W – код ключа 17
    4. Это все, что вам нужно, теперь открытый Tasker -> Новая задача -> Добавить wait 5 sec -> Run shell: input keyevent 97 input keyevent 17

    Теперь запустите команду и быстро откройте хром, вуаля! Через 5 секунд вы увидите, как исчезнет ваша вкладка!

    Надежда, которая помогает всем будущим специалистам-специалистам;)

    Престижность …

    В разделе events в getevent -p перечислены все принятые коды клавиш:

     add device 7: /dev/input/event1 name: "gpio-keys" events: KEY (0001): 0072 0073 0074 00ac 

    Т.е. VOLUME_UP (0x73), VOLUME_DOWN (0x72), POWER (0x74) и HOME (0xAC) в случае /dev/input/event1 . Все остальное фильтруется драйвером ввода ядра Linux задолго до того, как он достигнет рамки Android (где используются файлы макета, которые вы пытались изменить)