YYPOST群发软件 发表于 2026-6-16 06:57:25

安卓脚本HID节点查找完整方法示例

安卓脚本HID节点查找完整方法示例


// ==================== HID 节点查找完整方法示例 ====================
// 基于 查找节点_HID.js 的方法演示
// 🍎交流QQ群:711841924(群)
// 🍎交流QQ群:528816639(安卓内测群)
/**
* 封装的节点查找函数
* @param {Object} 查找 - hid.nodeSearch()返回的节点集合对象
* @param {Boolean} 是否点击 - 是否执行点击操作
* @param {Object} 节点返回 - 用于返回结果的容器对象
* @returns {Boolean} 查找是否成功
*/
function 查找节点_HID(查找, 是否点击, 节点返回) {
    try {
      // 初始化返回对象
      节点返回.数量 = 0;
      节点返回.数组 = null;
      节点返回.返回信息 = null;
      
      // 增强的安全检查
      if (!查找 || typeof 查找 === 'undefined' || 查找 === null) {
            return false;
      }
      
      // 检查是否有length方法并且可以调用
      if (typeof 查找.length !== 'function') {
            return false;
      }

      var a = 0;
      try {
            a = 查找.length();
      } catch (lenErr) {
            console.log("获取节点长度出错:", lenErr);
            return false;
      }
      
      if (a <= 0) {
            return false;
      }

      节点返回.数量 = a;
      节点返回.数组 = 查找;

      // 正序:获取第一个节点(索引0)
      let nodeObj = null;
      try {
            nodeObj = 查找.getNode(0);
      } catch (nodeErr) {
            console.log("获取节点对象出错:", nodeErr);
            return false;
      }
      
      if (!nodeObj) {
            return false;
      }

      节点返回.返回信息 = nodeObj;

      if (是否点击) {
            let 矩形区域 = null;
            try {
                矩形区域 = nodeObj.getBounds();
            } catch (boundsErr) {
                console.log("获取节点边界出错:", boundsErr);
                return false;
            }
            
            if (!矩形区域) {
                return false;
            }
            
            let x = 矩形区域.getLeft();
            let y = 矩形区域.getTop();
            let x1 = 矩形区域.getRight();
            let y1 = 矩形区域.getBottom();

            let 随机x, 随机y;

            if ((x1 - x) >= 20 && (y1 - y) >= 20) {
                let minX = Math.max(x + 10, 0);
                let maxX = Math.max(x1 - 10, 0);
                let minY = Math.max(y + 10, 0);
                let maxY = Math.max(y1 - 10, 0);
                随机x = 取随机数(minX, maxX);
                随机y = 取随机数(minY, maxY);
            } else {
                let 坐标返回 = String(nodeObj.getCenterPoint());
                let coordArr = 坐标返回.split(',');
                随机x = parseFloat(coordArr);
                随机y = parseFloat(coordArr);
            }

            // 使用原有的点击模式函数
            点击模式(随机x, 随机y, 设定模式);
      }

      return true;
    } catch (e) {
      console.log("查找节点_HID出错:", e);
      节点返回.数量 = 0;
      节点返回.数组 = null;
      节点返回.返回信息 = null;
      return false;
    }
}

// ==================== 示例演示 ====================

// 示例1: 点击"通知与状态栏"菜单项
function 示例1_点击通知与状态栏() {
    printl("\n===== 示例1: 点击'通知与状态栏'菜单项 =====");
   
    // 查找"通知与状态栏"节点
    var nodesObj = hid.nodeSearch(3000)
      .text("通知与状态栏")
      .id("title")
      .className("android.widget.TextView");
   
    if (nodesObj != '' && nodesObj.length() > 0) {
      printl("✓ 找到'通知与状态栏'节点");
      
      // 获取第一个节点对象
      var nodeObj = nodesObj.getNode(0);
      
      if (nodeObj) {
            printl("✓ 获取到节点对象");
            
            // 打印节点详细信息
            var nodeText = nodeObj.getText();
            printl("- 文本: " + (nodeText || "(空)"));
            printl("- 类名: " + nodeObj.getClassName());
            printl("- 可点击: " + nodeObj.isClickable());
            
            // 获取节点中心点坐标
            var centerPoint = nodeObj.getCenterPoint();
            var x = centerPoint.x();
            var y = centerPoint.y();
            
            printl("✓ 节点中心坐标: X=" + x + ", Y=" + y);
            
            // 使用HID执行点击
            hid.click(x, y);
            printl("✓ 已成功点击'通知与状态栏'");
            
            // 倒计时2秒
            printl("→ 倒计时2秒后返回...");
            sleep.second(秒=2);
            
            // 返回上一页
            printl("→ 正在返回上一页...");
            hid.back();
            sleep.millisecond(毫秒=1500);// 返回后等待1.5秒确保页面加载完成
            printl("✓ 已返回");
            
            return true;
      } else {
            printl("✗ 无法获取节点对象");
            return false;
      }
    } else {
      printl("✗ 未找到'通知与状态栏'节点");
      return false;
    }
}

// 示例2: 点击"显示与亮度"菜单项
function 示例2_点击显示与亮度() {
    printl("\n===== 示例2: 点击'显示与亮度'菜单项 =====");
   
    // 查找"显示与亮度"节点
    var nodesObj = hid.nodeSearch(3000)
      .text("显示与亮度")
      .id("title")
      .className("android.widget.TextView");
   
    if (nodesObj != '' && nodesObj.length() > 0) {
      printl("✓ 找到'显示与亮度'节点");
      
      // 获取第一个节点对象
      var nodeObj = nodesObj.getNode(0);
      
      if (nodeObj) {
            printl("✓ 获取到节点对象");
            
            // 打印节点详细信息
            var nodeText = nodeObj.getText();
            printl("- 文本: " + (nodeText || "(空)"));
            printl("- 类名: " + nodeObj.getClassName());
            
            // 获取节点中心点坐标
            var centerPoint = nodeObj.getCenterPoint();
            var x = centerPoint.x();
            var y = centerPoint.y();
            
            printl("✓ 节点中心坐标: X=" + x + ", Y=" + y);
            
            // 使用HID执行点击
            hid.click(x, y);
            printl("✓ 已成功点击'显示与亮度'");
            
            // 倒计时2秒
            printl("→ 倒计时2秒后返回...");
            sleep.second(秒=2);
            
            // 返回上一页
            printl("→ 正在返回上一页...");
            hid.back();
            sleep.millisecond(毫秒=1500);// 返回后等待1.5秒确保页面加载完成
            printl("✓ 已返回");
            
            return true;
      } else {
            printl("✗ 无法获取节点对象");
            return false;
      }
    } else {
      printl("✗ 未找到'显示与亮度'节点");
      return false;
    }
}

// 示例3: 点击"声音与触感"菜单项
function 示例3_点击声音与触感() {
    printl("\n===== 示例3: 点击'声音与触感'菜单项 =====");
   
    // 查找"声音与触感"节点
    var nodesObj = hid.nodeSearch(3000)
      .text("声音与触感")
      .id("title")
      .className("android.widget.TextView");
   
    if (nodesObj != '' && nodesObj.length() > 0) {
      printl("✓ 找到'声音与触感'节点");
      
      // 获取第一个节点对象
      var nodeObj = nodesObj.getNode(0);
      
      if (nodeObj) {
            printl("✓ 获取到节点对象");
            
            // 打印节点详细信息
            var nodeText = nodeObj.getText();
            printl("- 文本: " + (nodeText || "(空)"));
            printl("- 类名: " + nodeObj.getClassName());
            
            // 获取节点中心点坐标
            var centerPoint = nodeObj.getCenterPoint();
            var x = centerPoint.x();
            var y = centerPoint.y();
            
            printl("✓ 节点中心坐标: X=" + x + ", Y=" + y);
            
            // 使用HID执行点击
            hid.click(x, y);
            printl("✓ 已成功点击'声音与触感'");
            
            // 倒计时2秒
            printl("→ 倒计时2秒后返回...");
            sleep.second(秒=2);
            
            // 返回上一页
            printl("→ 正在返回上一页...");
            hid.back();
            sleep.millisecond(毫秒=1500);// 返回后等待1.5秒确保页面加载完成
            printl("✓ 已返回");
            
            return true;
      } else {
            printl("✗ 无法获取节点对象");
            return false;
      }
    } else {
      printl("✗ 未找到'声音与触感'节点");
      return false;
    }
}

// 示例4: 点击"桌面"菜单项
function 示例4_点击桌面() {
    printl("\n===== 示例4: 点击'桌面'菜单项 =====");
   
    // 查找"桌面"节点
    var nodesObj = hid.nodeSearch(3000)
      .text("桌面")
      .id("title")
      .className("android.widget.TextView");
   
    if (nodesObj != '' && nodesObj.length() > 0) {
      printl("✓ 找到'桌面'节点");
      
      // 获取第一个节点对象
      var nodeObj = nodesObj.getNode(0);
      
      if (nodeObj) {
            printl("✓ 获取到节点对象");
            
            // 打印节点详细信息
            var nodeText = nodeObj.getText();
            printl("- 文本: " + (nodeText || "(空)"));
            printl("- 类名: " + nodeObj.getClassName());
            
            // 获取节点中心点坐标
            var centerPoint = nodeObj.getCenterPoint();
            var x = centerPoint.x();
            var y = centerPoint.y();
            
            printl("✓ 节点中心坐标: X=" + x + ", Y=" + y);
            
            // 使用HID执行点击
            hid.click(x, y);
            printl("✓ 已成功点击'桌面'");
            
            // 倒计时2秒
            printl("→ 倒计时2秒后返回...");
            sleep.second(秒=2);
            
            // 返回上一页
            printl("→ 正在返回上一页...");
            hid.back();
            sleep.millisecond(毫秒=1500);// 返回后等待1.5秒确保页面加载完成
            printl("✓ 已返回");
            
            return true;
      } else {
            printl("✗ 无法获取节点对象");
            return false;
      }
    } else {
      printl("✗ 未找到'桌面'节点");
      return false;
    }
}

// ==================== 执行示例 ====================
printl("\n========== HID 节点查找方法演示 ==========\n");

// 按顺序执行所有示例
示例1_点击通知与状态栏();
示例2_点击显示与亮度();
示例3_点击声音与触感();
示例4_点击桌面();

printl("\n===========================================\n");
printl("✓ 所有示例演示完成!");


页: [1]
查看完整版本: 安卓脚本HID节点查找完整方法示例