Wednesday, 14 September 2022

How to translate device screen position to sendevent position?

I know about the input tap x y shell command, however, I'm trying to understand how to perform a click using the sendevent command. I been able to achieve it with the following command:

sendevent /dev/input/event5 3 53 X &&
sendevent /dev/input/event5 3 54 Y &&
sendevent /dev/input/event5 0 2 0 &&
sendevent /dev/input/event5 0 0 0 &&
sendevent /dev/input/event5 0 2 0 &&
sendevent /dev/input/event5 0 0 0

Where X and Y is the position that will be clicked, I'm testing it on the android emulator BlueStacks 5 which the Display Resolution set to 1920x1080.

The code is working and the click is fired, however, I couldn't understand how to convert the position where I want to be clicked to the sendevent XY position.

If I send using ADB:

sendevent /dev/input/event5 3 53 2000 &&
sendevent /dev/input/event5 3 54 2000 &&
sendevent /dev/input/event5 0 2 0 &&
sendevent /dev/input/event5 0 0 0 &&
sendevent /dev/input/event5 0 2 0 &&
sendevent /dev/input/event5 0 0 0

It clicks somewhere around x75 y75, how this calc is done? i mean screen xy -> sendevent xy?


How to replicate:

  • First enable BlueStacks 5 adb in the window: Settings -> Advanced -> Android debug bridge
  • Open a cmd window and run cd C:\Program Files\BlueStacks_nxt assuming BlueStacks where installed in the default path.

Execute the commands:

  • hd-adb.exe connect 127.0.0.1:X where X is the port shown in the window where you enabled the ADB.
  • hd-adb.exe -s 127.0.0.1:X shell

Now we are on the shell, execute a new command: getevent -p and search for:

... /dev/input/event5
  name:     "BlueStacks Virtual Touch"

On my emulator the input event for touch is event5 on yours it can be different, replace it according.

Now you can simulate a click with the code below changing XY to the position where you want to be clicked:

    sendevent /dev/input/event5 3 53 X &&
    sendevent /dev/input/event5 3 54 Y &&
    sendevent /dev/input/event5 0 2 0 &&
    sendevent /dev/input/event5 0 0 0 &&
    sendevent /dev/input/event5 0 2 0 &&
    sendevent /dev/input/event5 0 0 0

I'm trying to figure out how to convert the emulator screen position to the sendevent position.

For example, if you want to perform a click at x200 y200, using sendevent what the value needed?

How to calculate it?



from How to translate device screen position to sendevent position?

No comments:

Post a Comment