如何实现安卓模拟器后台鼠标左击

2019-09-13 10:38:17 +08:00
 hkitdog
如何通过 Windows API 实现安卓模拟器后台鼠标操作?
postmessage 可以实现后台按键,但是鼠标后台不行,我用 C#写的:
PostMessage(Hwnd, WM_LBUTTONDOWN, 0, x + (y << 16));
PostMessage(Hwnd , WM_LBUTTONUP, 0, x + (y << 16));
运行时给了管理员权限,可以实现鼠标点击窗口控件句柄的指定位置,但是如果窗口最小化或者不在可视区域,鼠标点击就没有效果。
安卓模拟器的运行模式有 opengl 和 directx 两种,C/C++或者 C#都可以。
用了 autohotkey 的 controlclick 也不能实现后台鼠标
我怀疑是系统不断获取鼠标的位置导致窗口接收到的鼠标坐标不对导致没有效果,是不是通过某种方法屏蔽掉这种消息到达窗口就能有效果?
8531 次点击
所在节点    Android
7 条回复
yankebupt
2019-09-13 10:58:57 +08:00
单开的话可以
adb shell input tap X Y?
多开暂时不知道。主要是懒得查怎么改默认 adb localhost 端口
securityCoding
2019-09-13 11:00:22 +08:00
adb 试试
hfutzj
2019-09-13 11:14:42 +08:00
后台的位置和前台的不一样,之前用别人的一个插件,绑定后台和不绑定,获取到的鼠标位置不同。具体你可以在前台试。因为如果绑定后台再模拟鼠标点击的话,鼠标是不会移动的。
大漠插件
gam2046
2019-09-13 11:15:00 +08:00
模拟器里,鼠标点击,到 Android 里面就是触屏事件,touch,因此直接按一楼方法即可。

如果需要双击操作(即短时间内两次点击屏幕),无法用 adb 完成,因为每次 input 都是通过 app_process 启动一个进程,间隔时间太长。

可以考虑通过事先录制的方式,事后回放。

cat /dev/input/eventN > /sdcard/double_tap

其中 N 是一个数字,不同设备代表的含义的不同。
当需要回放操作的时候

cat /sdcard/double_tap > /dev/input/eventN 即可
EscYezi
2019-09-13 12:05:24 +08:00
可以用 airtest,模拟器开 usb 调试,然后在 airtest ide 里连接模拟器,用脚本操作。
大概就像[airtest-arknights]( https://github.com/yeziyezi/airtest-arknights)这种
不过这个并不是用的 Windows API🌚
hkitdog
2019-09-14 10:31:56 +08:00
@hfutzj 解决了,postmessage 是可以后台按键的,在百度找了个鼠标后台连点器分柝,发现问题出在句柄的选择上,发送消息对象不是选最内层的那个句柄而是倒数第三层的 Qt5QWindowIcon RenderWindowWindow,adb 估计可以,没试
BoiledEgg
2019-09-14 21:59:18 +08:00
autohotkey 如果不行的话有可能是因为没有用 admin 运行的原因,可以 script 开始的时候判断下 admin
if !A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%"
ExitApp
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/600594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX