我一直在尝试在触摸屏上模拟安卓点击,但速度非常快。我希望水龙头在一条线上,所以我修复了 y 值,并以 1080 为模增加了 100 的 ax 值。
我精确地说,我并不真正关心它“确切”在哪里击中。我想用一堆点击扫过一条线。
我尝试了“输入”方法,但它太慢了。我还尝试了使用 shell 脚本(直接从我的手机运行)的 sendevent 方法,但同样,它太慢了。我需要脚本来模拟 40Hz 左右的抽头,或者类似的东西。
我读到我们可以直接写入 /dev/input/event5 并直接发送字节(显然 sendevent 不断打开和关闭 /dev/input/event5,这很慢)。
你认为有可能吗,如果有,怎么做?我可以通过脚本达到这个速度(~40Hz),还是应该尝试构建一个 C 程序?
谢谢你。
编辑:我已经有了模拟点击的序列:
sendevent /dev/input/event5 1 330 1
sendevent /dev/input/event5 3 53 $current_x
sendevent /dev/input/event5 3 54 $y
sendevent /dev/input/event5 0 0 0
sendevent /dev/input/event5 1 330 0
sendevent /dev/input/event5 0 0 0
但我不确定如何将其转换为十六进制以直接将其发送到 /dev/input/event5。
Edit2:我用 printf 尝试过类似的东西
#sendevent /dev/input/event5 1 330 1
printf "%04x%04x%08x\n" "1" "330" "1" >> /dev/input/event5
#sendevent /dev/input/event5 3 53 $current_x
printf "%04x%04x%08x\n" "3" "53" "$current_x" >> /dev/input/event5
#sendevent /dev/input/event5 3 54 $y
printf "%04x%04x%08x\n" "3" "54" "1700" >> /dev/input/event5
#sendevent /dev/input/event5 0 0
printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
#sendevent /dev/input/event5 1 330 0
printf "%04x%04x%08x\n" "1" "330" "0" >> /dev/input/event5
#sendevent /dev/input/event5 0 0 0
printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
但我觉得 printf 返回一个字符串,而不是十六进制值。
Edit3:我尝试了一些位移:
#sendevent /dev/input/event5 1 330 1
#printf "%04x%04x%08x\n" "1" "330" "1" >> /dev/input/event5
echo $(((1<<16) + 330)) >> /dev/input/event5
echo $((1)) >> /dev/input/event5
#sendevent /dev/input/event5 3 53 $current_x
#printf "%04x%04x%08x\n" "3" "53" "$current_x" >> /dev/input/event5
echo $(((3<<16) + 53)) >> /dev/input/event5
echo $current_x >> /dev/input/event5
#sendevent /dev/input/event5 3 54 $y
#printf "%04x%04x%08x\n" "3" "54" "1700" >> /dev/input/event5
echo $(((3<<16) + 54)) >> /dev/input/event5
echo $((1700)) >> /dev/input/event5
#sendevent /dev/input/event5 0 0
#printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
echo $((0)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
#sendevent /dev/input/event5 1 330 0
#printf "%04x%04x%08x\n" "1" "330" "0" >> /dev/input/event5
echo $(((1<<16) + 330)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
#sendevent /dev/input/event5 0 0 0
#printf "%04x%04x%08x\n" "0" "0" "0" >> /dev/input/event5
echo $((0)) >> /dev/input/event5
echo $((0)) >> /dev/input/event5
但还是一无所获。我不认为我应该发送一个 64 位的值,因为我明白了:
echo $((1<<32))
1
Edit4:嗯,也许问题是我没有权限直接写在/dev/input/event5 上,因为我试图监控它,我可以看到使用 sendevent 时正在写的东西,但在管道 echo 时什么也没有.