模拟ADB终端的按键组合

问题描述 投票:0回答:3

我想向 Android 版 Chrome 发送“CTRL + W”以关闭活动选项卡。我尝试了很多东西,但没有成功从终端实现它。 (如果我连接带有 OTG 的 USB 键盘,我可以使用 CTRL+W 关闭选项卡)

首先,我不想为此编写应用程序,我只想要一个 shell 命令从 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等)

event1 是 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"

但是按键事件立即向下和向上,我不能用它来发送 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”。

请帮忙,谢谢您的帮助。

android shell adb keyevent tasker
3个回答
7
投票

哦,是的!我不知道为什么,但每当我感到困惑时,我就会访问 stackoverflow,一旦我开始写问题,我就会找到答案......xD 无论如何,我能够通过以下步骤做到这一点:

  1. 转到/system/usr/keylayout/
  2. 就我而言,没有 gpio 键,无论如何打开 Generic.kl
  3. 它具有模拟任何内容所需的所有键码...例如 CTRL_RIGHT 键码是 97,W 键码是 17
  4. 这就是您所需要的,现在打开任务管理器 --> 新任务 --> 添加等待 5 秒 --> 运行 shell:
    input keyevent 97
    input keyevent 17

现在运行命令并快速打开 chrome,瞧! 5 秒后您将看到您的标签消失!

希望对所有未来的任务专家有所帮助;)

荣誉...


2
投票

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
)。其他所有内容早在到达 Android 框架(使用您尝试修改的布局文件的地方)之前就被 Linux 内核输入驱动程序过滤掉了


0
投票

要提供键事件组合,请使用

keycombination
,后跟键事件代码。

示例(Ctrl + F):

adb shell input keycombination 113 34

(顺便说一句,在接受的答案中,97是BUTTON_B的键码,它具有在Chrome中单独关闭选项卡所需的副作用,并且多个

input keyevent
不会产生组合效果)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.