要搞定外設(shè)鼠標(biāo)點(diǎn)擊屏幕上的指定位置,就需要確定鼠標(biāo)指針在屏幕上絕對坐標(biāo). 理論上HID是可以發(fā)送絕對坐標(biāo)使鼠標(biāo)指針直接移動(dòng)到指定的位置.但是目前我還沒搞明白要怎么發(fā)送16進(jìn)制的數(shù)據(jù)才能使用絕對坐標(biāo). 但偶然間找到了一個(gè)安卓VIEW的方法可以監(jiān)聽到鼠標(biāo)指針的位置...順便記錄一下這個(gè)方法.
利用view的OnGenericMotionListener方法給view設(shè)置一個(gè)監(jiān)聽,當(dāng)鼠標(biāo)在這個(gè)view上移動(dòng)的時(shí)候. view就能獲取到鼠標(biāo)的絕對位置.但是缺點(diǎn)就是在安卓8.0 以后,懸浮窗全屏的時(shí)候是無法覆蓋到狀態(tài)欄的, 這也就導(dǎo)致鼠標(biāo)在狀態(tài)欄上移動(dòng)的時(shí)候無法獲取到鼠標(biāo)的坐標(biāo)...
我也沒有找到比較好的方法來覆蓋掉狀態(tài)欄...安卓7.0倒是可以覆蓋到狀態(tài)欄. 在懸浮窗覆蓋到的地方移動(dòng)鼠標(biāo)指針,就可以獲取到鼠標(biāo)指針的實(shí)時(shí)位置了.
在執(zhí)行項(xiàng)目的時(shí)候,可以先開啟一個(gè)"全屏"的懸浮窗,然后通過hid協(xié)議讓鼠標(biāo)移動(dòng)一個(gè)像素.獲取到鼠標(biāo)的絕對位置...然后再關(guān)閉懸浮窗即可,這樣獲取到第一個(gè)鼠標(biāo)的確切坐標(biāo)后. 后面就能通過計(jì)算得到所有的絕對位置. 從而和autojs配合來點(diǎn)擊和滑動(dòng)操作.
以下是懸浮窗的代碼...
var w = floaty.rawWindow(
<frame id="top" bg="#CC000000" />
);
ui.run(()=>{
//設(shè)置懸浮窗全屏
w.setSize(-1, -1);
//要設(shè)置懸浮窗攔截點(diǎn)擊事件,才可以監(jiān)聽到鼠標(biāo)移動(dòng)事件
w.setTouchable(true);
});
var points = {}
w.top.setOnGenericMotionListener(function(v, event) {
points.x = event.getX().toFixed(2);
points.y = event.getY().toFixed(2);
console.log("鼠標(biāo): " , points);
return false;
});
setTimeout(() => {
w.close();
}, 60000);
希望大家有個(gè)愉快的周末....
-
鼠標(biāo)
+關(guān)注
關(guān)注
6文章
587瀏覽量
39662 -
VIEW
+關(guān)注
關(guān)注
0文章
7瀏覽量
9933 -
安卓
+關(guān)注
關(guān)注
5文章
2113瀏覽量
56884
發(fā)布評論請先 登錄
相關(guān)推薦
評論