7

Chrome for Android に「 CTRL + W 」を送信してアクティブなタブを閉じたい。私はたくさんのことを試しましたが、ターミナルからそれを達成することに成功していません。(OTGでUSBキーボードを接続すれば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 など)

event1 は gpio キーなので、それを使用しています。他のすべての入力イベントはセンサーであり、1 つは充電ドライバーです。(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」を書き込むことはありません。

助けてください、助けてくれてありがとう。

4

2 に答える 2

1

出力のeventsセクションにgetevent -pは、受け入れられたすべてのキー コードが一覧表示されます。

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

の場合は ( 0x73 VOLUME_UP)、VOLUME_DOWN(0x72)、POWER(0x74 )、(0xAC HOME) です/dev/input/event1。それ以外はすべて、Android フレームワーク (変更しようとしたレイアウト ファイルが使用される場所) に到達するずっと前に、Linux カーネル入力ドライバーによって除外されます。

于 2014-12-21T23:16:24.037 に答える