 | |  |  | // 点击坐标 // boolean click(int x, int y) 返回值: boolean // 参数: int x: 横坐标 int y: 纵坐标 // 案例: hid.click(0, 0) hid.click(0, 0)
// 点击百分比坐标 // void clickPercent(double arg0, double arg1) 返回值: void // 参数: double arg0: 横坐标 double arg1: 纵坐标 // 案例: hid.clickPercent(0, 0) hid.clickPercent(0, 0)
// 连续点击 // boolean clicks(int x, int y, int times, int delay) 返回值: boolean // 参数: int x: 横坐标 int y: 纵坐标 int times: 点击次数 int delay: 每次间隔毫秒 // 案例: hid.clicks(0, 0, 10, 500) hid.clicks(0, 0, 10, 500)
// 连续点击v2可设置按下时长 // boolean clicksV2(int x, int y, int press, int times, int delay) 返回值: boolean // 参数: int x: 横坐标 int y: 纵坐标 int press: 按住时间 int times: 点击次数 int delay: 每次间隔毫秒 // 案例: hid.clicksV2(0, 0, 100, 10, 500) hid.clicksV2(0, 0, 100, 10, 500)
// 鼠标点击 // 暂时只支持新版otg设备 // void mouseClick(int arg0, int arg1) 返回值: void // 参数: int arg0: 横坐标 int arg1: 纵坐标 // 案例: hid.mouseClick(0, 0) hid.mouseClick(0, 0)
// 节点允许点击 // 筛选是否允许点击的节点, true允许, false不允许 // nodes clickable(boolean arg0) 返回值: nodes // 参数: boolean arg0: true // 案例: auto.nodeSearch(100).clickable(true) auto.nodeSearch(100).clickable(true)
// hid点击元素随机坐标 // boolean clickRandPoint() 返回值: boolean // 参数: 无 // 案例: new HidNode().clickRandPoint() new HidNode().clickRandPoint()
// hid点击 // boolean hidClick() 返回值: boolean // 参数: 无 // 案例: new HidNode().hidClick() new HidNode().hidClick()
// 是否允许点击 // boolean isClickable() 返回值: boolean // 参数: 无 // 案例: new HidNode().isClickable() new HidNode().isClickable()
// hid点击 // boolean hidClick() 返回值: boolean // 参数: 无 // 案例: new detect().hidClick() new detect().hidClick()
// hid点击 // boolean hidClick() 返回值: boolean // 参数: 无 // 案例: new node().hidClick() new node().hidClick()
if (this.node) { // 获取节点边界 this.bounds = { left: parseInt(this.node.boundsPercent[0] * this.node.bounds[2]), top: parseInt(this.node.boundsPercent[1] * this.node.bounds[3]), right: parseInt(this.node.boundsPercent[2] * this.node.bounds[2]), bottom: parseInt(this.node.boundsPercent[3] * this.node.bounds[3]) }; } else { printl("节点未找到"); }
try { // 获取节点边界 if (this.node) { // 获取节点边界 this.bounds = { left: parseInt(this.node.boundsPercent[0] * this.node.bounds[2]), top: parseInt(this.node.boundsPercent[1] * this.node.bounds[3]), right: parseInt(this.node.boundsPercent[2] * this.node.bounds[2]), bottom: parseInt(this.node.boundsPercent[3] * this.node.bounds[3]) }; } } catch (e) { printl("节点搜索失败: " + e); }
return this;
/** * 点击节点中心点 * @return {boolean} 点击是否成功 */ HidNode.prototype.click = function() { if (!this.isClickable()) { printl("节点不允许点击"); return false; } var centerX = (this.bounds.left + this.bounds.right) / 2; var centerY = (this.bounds.top + this.bounds.bottom) / 2; try { this.clicks(centerX, centerY, 1, 0); } catch (e) { printl("点击失败: " + e); return false; } return true; };
/** * 点击元素随机坐标 * @return {boolean} 点击是否成功 */ HidNode.prototype.clickRandPoint = function() { if (!this.isClickable()) { printl("节点不允许点击"); return false; } var randX = this.bounds.left + Math.random() * (this.bounds.right - this.bounds.left); var randY = this.bounds.top + Math.random() * (this.bounds.bottom - this.bounds.top); try { this.click(randX, randY); } catch (e) { printl("点击失败: " + e); return false; } return true; };
/** * 是否允许点击 * @return {boolean} 允许点击返回true, 否则返回false */ HidNode.prototype.isClickable = function() { return this.node.clickable; };
/** * 鼠标点击 * @param {int} arg0: 横坐标 * @param {int} arg1: 纵坐标 */ hid.mouseClick = function(arg0, arg1) { // 实现鼠标点击逻辑 printl("鼠标点击: (" + arg0 + ", " + arg1 + ")"); };
/** * 连续点击 * @param {int} x: 横坐标 * @param {int} y: 纵坐标 * @param {int} times: 点击次数 * @param {int} delay: 每次间隔毫秒 * @return {boolean} 点击是否成功 */ hid.clicks = function(x, y, times, delay) { for (var i = 0; i < times; i++) { this.click(x, y); java.lang.Thread.sleep(delay); } printl("连续点击: (" + x + ", " + y + ") " + times + "次, 每次间隔" + delay + "毫秒"); return true; };
/** * 连续点击v2可设置按下时长 * @param {int} x: 横坐标 * @param {int} y: 纵坐标 * @param {int} press: 按住时间 * @param {int} times: 点击次数 * @param {int} delay: 每次间隔毫秒 * @return {boolean} 点击是否成功 */ hid.clicksV2 = function(x, y, press, times, delay) { for (var i = 0; i < times; i++) { this.click(x, y); java.lang.Thread.sleep(press); java.lang.Thread.sleep(delay - press); } printl("连续点击v2: (" + x + ", " + y + ") " + times + "次, 按住" + press + "毫秒, 每次间隔" + delay + "毫秒"); return true; };
// 节点允许点击 // 筛选是否允许点击的节点, true允许, false不允许 // nodes clickable(boolean arg0) 返回值: nodes // 参数: boolean arg0: true // 案例: auto.nodeSearch(100).clickable(true) auto.nodeSearch = function(timeout) { // 实现节点搜索逻辑 return { clickable: function(arg0) { if (arg0) { // 筛选允许点击的节点 printl("筛选允许点击的节点"); } return this; } }; };
// hid点击 // boolean hidClick() 返回值: boolean // 参数: 无 // 案例: new detect().hidClick() detect.prototype.hidClick = function() { // 实现hid点击逻辑 printl("detect点击"); return true; };
// hid点击 // boolean hidClick() 返回值: boolean // 参数: 无 // 案例: new node().hidClick() node.prototype.hidClick = function() { // 实现hid点击逻辑 printl("node点击"); return true; };
代码结构分析- 点击操作
hid.click(x, y) : 在指定的绝对坐标点击一次。hid.clickPercent(arg0, arg1) : 在指定的百分比坐标点击一次。hid.clicks(x, y, times, delay) : 在指定坐标连续点击一定次数,每次点击之间有指定的间隔。hid.clicksV2(x, y, press, times, delay) : 类似于hid.clicks ,但可以指定每次点击按住的时间。
- 鼠标点击
hid.mouseClick(arg0, arg1) : 通过OTG设备在指定坐标进行鼠标点击。
- 节点搜索和点击
auto.nodeSearch(timeout) : 搜索节点,可以指定超时时间。nodes.clickable(arg0) : 筛选是否允许点击的节点。HidNode.prototype.click() : 点击节点的中心点。HidNode.prototype.clickRandPoint() : 在节点的边界内随机点击一次。HidNode.prototype.isClickable() : 判断节点是否可点击。
- 错误处理
- 在尝试获取节点边界时使用了try-catch语句来捕获可能的错误,并打印错误信息。
- 重复代码
- 在尝试获取节点边界时,
if (this.node) 的代码块被重复了两次。这可以优化为只检查一次。
- 语法错误
- 在
hid.clicksV2 函数的printl 语句中,引号使用不正确,应为printl("连续点击v2: (" + x + ", " + y + ") " + times + "次, 按住" + press + "毫秒, 每次间隔" + delay + "毫秒"); 。
| |  | |  |
|