YYPOST群发软件 发表于 2026-2-2 09:10:54

AIWROK软件苹果系统点击方法综合示例



AIWROK软件苹果系统点击方法综合示例
// AIWROK苹果系统点击方法综合示例
// 🍎交流QQ群711841924群一,苹果内测群,528816639
// 本文件整合了所有点击相关的操作方法


function sleep(ms) {
    var start = new Date().getTime();
    while (new Date().getTime() - start < ms) {
    }
}

function main() {
    printl("========== AIWROK苹果系统点击方法综合示例 ==========\n");

    demoHidClickMethods();         // 示例1: HID基础点击方法
    demoHidPercentClickMethods();    // 示例2: HID百分比点击方法
    demoHidDoubleClickMethods();      // 示例3: HID双击方法
    demoOcrClickMethods();            // 示例4: OCR识别后点击方法
    demoImageFindClickMethods();      // 示例5: 找图后点击方法
    demoUIClickMethods();             // 示例6: UI组件点击方法
    demoMouseClickMethods();          // 示例7: 鼠标操作方法
    demoAdvancedClickMethods();       // 示例8: 高级点击方法
    demoPracticalClickExamples();   // 示例9: 实用点击场景

    printl("\n========== 所有示例执行完毕 ==========");
}

// ========== 示例1: HID基础点击方法 ==========
function demoHidClickMethods() {
    printl("【示例1】HID基础点击方法");
    printl("说明:使用hid.click()在指定坐标位置点击");

    try {
      var x = 500;
      var y = 800;
      printl("点击坐标: x=" + x + ", y=" + y);
      hid.click(x, y);
      printl("✓ 点击成功");
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例2: HID百分比点击方法 ==========
function demoHidPercentClickMethods() {
    printl("【示例2】HID百分比点击方法");
    printl("说明:使用hid.clickPercent()在屏幕百分比位置点击");

    try {
      var xPercent = 0.5;
      var yPercent = 0.5;
      printl("点击百分比坐标: x=" + xPercent + ", y=" + yPercent);
      hid.clickPercent(xPercent, yPercent);
      printl("✓ 点击屏幕中心成功");
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例3: HID双击方法 ==========
function demoHidDoubleClickMethods() {
    printl("【示例3】HID双击方法");
    printl("说明:使用hid.doubleClick()和hid.doubleClickPercent()执行双击操作");

    try {
      printl("方式1: 绝对坐标双击");
      var x = 500;
      var y = 800;
      hid.doubleClick(x, y);
      printl("✓ 绝对坐标双击成功: (" + x + ", " + y + ")");

      sleep(1000);

      printl("方式2: 百分比坐标双击");
      hid.doubleClickPercent(0.5, 0.5);
      printl("✓ 百分比坐标双击成功: (0.5, 0.5)");
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例4: OCR识别后点击方法 ==========
function demoOcrClickMethods() {
    printl("【示例4】OCR识别后点击方法");
    printl("说明:先使用OCR识别文本,然后点击识别到的文本位置");

    try {
      var ocrResult = screen.ocr(0, 0, 1, 1);

      printl("方式1: 精确查找文本并点击中心点");
      var target1 = ocrResult.findText("设置", );
      if (target1 != null) {
            var centerX = target1.x + target1.width / 2;
            var centerY = target1.y + target1.height / 2;
            printl("找到文本 '设置',点击中心点");
            hid.click(centerX * device.width, centerY * device.height);
            printl("✓ 点击成功");
      } else {
            printl("未找到文本 '设置'");
      }

      sleep(1000);

      printl("方式2: 查找包含特定文本并随机点击");
      var target2 = ocrResult.findIncludeText("日志", );
      if (target2 != null) {
            printl("找到包含 '日志' 的文本");
            target2.clickRandom();
            printl("✓ 随机点击成功");
      } else {
            printl("未找到包含 '日志' 的文本");
      }

      sleep(1000);

      printl("方式3: 使用正则表达式查找并点击");
      var targets = ocrResult.findTextWithRegex("\\d+", );
      if (targets != null && targets.length > 0) {
            printl("找到 " + targets.length + " 个包含数字的文本");
            targets.clickRandom();
            printl("✓ 点击第一个匹配项成功");
      } else {
            printl("未找到包含数字的文本");
      }

      sleep(1000);

      printl("方式4: 遍历所有文本并点击符合条件的文本");
      var allDetects = ocrResult.getAllDetect();
      for (var i = 0; i < allDetects.length; i++) {
            var textStr = String(allDetects.text);
            if (textStr.indexOf("设置") !== -1) {
                printl("找到包含 '设置' 的文本");
                allDetects.clickRandom();
                printl("✓ 点击成功");
                break;
            }
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例5: 找图后点击方法 ==========
function demoImageFindClickMethods() {
    printl("【示例5】找图后点击方法");
    printl("说明:先使用OpenCV查找图片,然后点击找到的图片位置");

    try {
      printl("方式1: 使用findImagesEx查找单个图片并点击");
      var detects1 = opencv.findImagesEx('图色769598.cv');
      if (detects1 != null && detects1.length > 0) {
            printl("找到目标,数量: " + detects1.length);
            detects1.clickRandom();
            printl("✓ 点击第一个目标成功");
      } else {
            printl("未找到目标");
      }

      sleep(1000);

      printl("方式2: 查找多个相同图片并批量点击");
      var detects2 = opencv.findImagesEx('图色769598.cv');
      if (detects2 != null && detects2.length > 0) {
            printl("找到 " + detects2.length + " 个相同目标");
            for (var i = 0; i < detects2.length; i++) {
                printl("点击目标 " + (i + 1) + "/" + detects2.length);
                detects2.clickRandom();
                sleep(300);
            }
            printl("✓ 批量点击完成");
      } else {
            printl("未找到目标");
      }

      sleep(1000);

      printl("方式3: 使用templateMatch查找并点击");
      var image = screen.screenShotFull();
      var mat = image.getMat();
      var templates = ['图色769598.cv', '图色769599.cv'];
      var matchResults = opencv.templateMatch(mat, templates, 0.8, , false);
      
      if (matchResults != null && matchResults.length > 0) {
            printl("模板匹配找到 " + matchResults.length + " 个目标");
            matchResults.clickRandom();
            printl("✓ 点击第一个匹配目标成功");
      } else {
            printl("未找到匹配目标");
      }
      
      mat.close();
      image.close();

      sleep(1000);

      printl("方式4: 指定区域找图并点击");
      var region = ;
      printl("在区域 [" + region.join(", ") + "] 内查找");
      var regionResults = opencv.findImages(['图色769598.cv'], 0.7, 3000, 1, region);
      
      if (regionResults != null && regionResults.length > 0) {
            printl("在指定区域内找到目标");
            regionResults.clickRandom();
            printl("✓ 点击成功");
      } else {
            printl("指定区域内未找到目标");
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例6: UI组件点击方法 ==========
function demoUIClickMethods() {
    printl("【示例6】UI组件点击方法");
    printl("说明:使用UI组件的onClick方法处理点击事件");

    try {
      printl("方式1: 按钮点击事件");
      var button = new Button();
      button.setText("点击我");
      button.setColor(0, 150, 0);
      button.onClick(() => {
            printl("按钮被点击了!");
            hid.clickPercent(0.5, 0.5);
      });
      printl("✓ 按钮点击事件已设置");

      printl("方式2: 复选框点击事件");
      var checkBox = new CheckBox();
      checkBox.setText("启用选项");
      checkBox.onClick(() => {
            printl("复选框状态: " + (checkBox.isSelect() ? "选中" : "未选中"));
      });
      printl("✓ 复选框点击事件已设置");

      printl("方式3: 标签点击事件(通过Button模拟)");
      var labelButton = new Button();
      labelButton.setText("标签按钮");
      labelButton.setColor(100, 100, 100);
      labelButton.onClick(() => {
            printl("标签按钮被点击");
      });
      printl("✓ 标签按钮点击事件已设置");

      printl("方式4: 闭包保存参数的点击事件");
      for (var i = 0; i < 3; i++) {
            var btn = new Button();
            btn.setText("按钮" + i);
            btn.setColor(50 + i * 50, 100, 150);
            (function(index) {
                btn.onClick(() => {
                  printl("按钮" + index + "被点击");
                  hid.clickPercent(0.3 + index * 0.2, 0.5);
                });
            })(i);
      }
      printl("✓ 闭包参数点击事件已设置");
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例7: 鼠标操作方法 ==========
function demoMouseClickMethods() {
    printl("【示例7】鼠标操作方法");
    printl("说明:使用鼠标相关方法进行点击和移动操作");

    try {
      printl("方式1: 鼠标按下");
      hid.mouseDown();
      printl("✓ 鼠标按下");
      sleep(500);

      printl("方式2: 鼠标抬起");
      hid.mouseUp();
      printl("✓ 鼠标抬起");
      sleep(500);

      printl("方式3: 鼠标移动(相对位置)");
      hid.mouseMove(10, 10);
      printl("✓ 鼠标向右移动10,向下移动10");
      sleep(500);

      printl("方式4: 鼠标回到主页");
      hid.mouseHome();
      printl("✓ 鼠标回到主页");
      sleep(500);

      printl("方式5: 移动到绝对坐标");
      hid.moveToRealPoint(500, 500);
      printl("✓ 鼠标移动到坐标(500, 500)");
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例8: 高级点击方法 ==========
function demoAdvancedClickMethods() {
    printl("【示例8】高级点击方法");
    printl("说明:组合使用多种点击方法实现复杂操作");

    try {
      printl("方式1: 点击指定区域内的随机点");
      function clickRandomInRegion(x1, y1, x2, y2) {
            var randomX = x1 + Math.random() * (x2 - x1);
            var randomY = y1 + Math.random() * (y2 - y1);
            printl("点击随机点: (" + randomX.toFixed(2) + ", " + randomY.toFixed(2) + ")");
            hid.clickPercent(randomX, randomY);
      }
      clickRandomInRegion(0.3, 0.3, 0.7, 0.7);
      printl("✓ 区域内随机点击成功");

      sleep(1000);

      printl("方式2: 连续点击多个位置");
      var clickPoints = [
            ,
            ,
            
      ];
      for (var i = 0; i < clickPoints.length; i++) {
            printl("点击位置 " + (i + 1) + ": (" + clickPoints + ", " + clickPoints + ")");
            hid.clickPercent(clickPoints, clickPoints);
            sleep(500);
      }
      printl("✓ 连续点击完成");

      sleep(1000);

      printl("方式3: 等待目标出现后点击");
      function waitForTargetAndClick(targetText, maxWaitTime) {
            var startTime = Date.now();
            while (Date.now() - startTime < maxWaitTime) {
                try {
                  var ocrResult = screen.ocr(0, 0, 1, 1);
                  var target = ocrResult.findIncludeText(targetText, );
                  if (target != null) {
                        printl("✓ 目标 '" + targetText + "' 已出现,点击");
                        target.clickRandom();
                        return true;
                  }
                  sleep(500);
                } catch (e) {
                  printl("查找出错: " + e);
                }
            }
            printl("✗ 超时,目标未出现");
            return false;
      }
      waitForTargetAndClick("设置", 5000);

      sleep(1000);

      printl("方式4: 查找并点击最接近指定坐标的目标");
      function findAndClickNearestTarget(cvFile, targetX, targetY) {
            var detects = opencv.findImagesEx(cvFile);
            if (detects == null || detects.length === 0) {
                printl("未找到目标");
                return false;
            }
            
            var nearestIndex = 0;
            var minDistance = Number.MAX_VALUE;
            
            for (var i = 0; i < detects.length; i++) {
                var centerX = detects.x + detects.width / 2;
                var centerY = detects.y + detects.height / 2;
                var distance = Math.sqrt(Math.pow(centerX - targetX, 2) + Math.pow(centerY - targetY, 2));
               
                if (distance < minDistance) {
                  minDistance = distance;
                  nearestIndex = i;
                }
            }
            
            printl("找到最近的目标,距离: " + minDistance.toFixed(2));
            detects.clickRandom();
            return true;
      }
      findAndClickNearestTarget('图色769598.cv', 500, 500);

      sleep(1000);

      printl("方式5: 批量点击所有匹配目标");
      function clickAllTargets(detects) {
            if (detects == null || detects.length === 0) {
                printl("没有可点击的目标");
                return;
            }
            
            printl("准备点击 " + detects.length + " 个目标");
            for (var i = 0; i < detects.length; i++) {
                printl("点击目标 " + (i + 1) + ": x=" + detects.x + ", y=" + detects.y);
                detects.clickRandom();
                sleep(300);
            }
            printl("✓ 所有目标点击完成");
      }
      var allDetects = opencv.findImagesEx('图色769598.cv');
      if (allDetects != null && allDetects.length > 0) {
            clickAllTargets(allDetects);
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 示例9: 实用点击场景 ==========
function demoPracticalClickExamples() {
    printl("【示例9】实用点击场景");
    printl("说明:实际应用中的点击操作场景");

    try {
      printl("场景1: 3x3区域点击网格");
      for (var y = 0; y < 3; y++) {
            for (var x = 0; x < 3; x++) {
                var clickX = 0.25 + x * 0.25;
                var clickY = 0.25 + y * 0.25;
                printl("点击区域 (" + x + "," + y + ") - 坐标 (" + clickX.toFixed(2) + "," + clickY.toFixed(2) + ")");
                hid.clickPercent(clickX, clickY);
                sleep(300);
            }
      }
      printl("✓ 3x3网格点击完成");

      sleep(1000);

      printl("场景2: 随机点击屏幕");
      for (var i = 0; i < 5; i++) {
            var randomX = Math.random();
            var randomY = Math.random();
            printl("随机点击 " + (i + 1) + "/5: (" + randomX.toFixed(2) + ", " + randomY.toFixed(2) + ")");
            hid.clickPercent(randomX, randomY);
            sleep(800);
      }
      printl("✓ 随机点击完成");

      sleep(1000);

      printl("场景3: 边缘点击(测试边界)");
      try {
            var edgePoints = [
                ,    // 左上
                ,    // 右上
                ,    // 左下
                   // 右下
            ];
            for (var i = 0; i < edgePoints.length; i++) {
                printl("点击边缘点 " + (i + 1) + ": (" + edgePoints + ", " + edgePoints + ")");
                hid.clickPercent(edgePoints, edgePoints);
                sleep(500);
            }
            printl("✓ 边缘点击完成");
      } catch (e) {
            printl("边缘点击出错: " + e);
      }

      sleep(1000);

      printl("场景4: OCR锁定后多次点击");
      try {
            OCR.lockOCR();
            printl("OCR结果已锁定");
            
            var image = screen.screenShotFull();
            var result1 = image.ocr(0, 0, 1, 1);
            var target1 = result1.findIncludeText("设置", );
            if (target1 != null) {
                target1.clickRandom();
                printl("✓ 第一次点击成功");
            }
            
            var result2 = image.ocr(0, 0, 1, 1);
            var target2 = result2.findIncludeText("日志", );
            if (target2 != null) {
                target2.clickRandom();
                printl("✓ 第二次点击成功");
            }
            
            image.close();
            OCR.unLock();
            printl("OCR结果已解锁");
      } catch (e) {
            printl("OCR锁定点击出错: " + e);
            try {
                OCR.unLock();
            } catch (unlockError) {
                printl("解锁错误: " + unlockError);
            }
      }

      sleep(1000);

      printl("场景5: 综合自动化流程");
      try {
            printl("步骤1: 查找并点击 '设置'");
            var ocrResult1 = screen.ocr(0, 0, 1, 1);
            var settingTarget = ocrResult1.findIncludeText("设置", );
            if (settingTarget != null) {
                settingTarget.clickRandom();
                printl("✓ 点击设置成功");
                sleep(2000);

                printl("步骤2: 查找并点击 '日志'");
                var ocrResult2 = screen.ocr(0, 0, 1, 1);
                var logTarget = ocrResult2.findIncludeText("日志", );
                if (logTarget != null) {
                  logTarget.clickRandom();
                  printl("✓ 点击日志成功");
                } else {
                  printl("未找到文本 '日志'");
                }
            } else {
                printl("未找到包含 '设置' 的文本");
            }
            printl("✓ 综合流程完成");
      } catch (e) {
            printl("综合流程错误: " + e);
      }
    } catch (e) {
      printl("错误: " + e);
    }
    printl("");
}

// ========== 辅助函数 ==========

function getTargetCenter(detect) {
    if (detect == null) {
      return null;
    }
    return {
      x: detect.x + detect.width / 2,
      y: detect.y + detect.height / 2
    };
}

function isTargetInRegion(detect, region) {
    if (detect == null) {
      return false;
    }
    var centerX = detect.x + detect.width / 2;
    var centerY = detect.y + detect.height / 2;
    return centerX >= region && centerX <= region &&
         centerY >= region && centerY <= region;
}

function safeFindImage(cvFile, maxRetries) {
    for (var retry = 0; retry < maxRetries; retry++) {
      try {
            printl("查找图片: " + cvFile + " (尝试 " + (retry + 1) + "/" + maxRetries + ")");
            var detects = opencv.findImagesEx(cvFile);
            
            if (detects != null && detects.length > 0) {
                printl("✓ 找到目标");
                return detects;
            }
            
            if (retry < maxRetries - 1) {
                printl("未找到,等待重试...");
                sleep(1000);
            }
      } catch (error) {
            printl("查找出错: " + error);
            if (retry < maxRetries - 1) {
                sleep(2000);
            }
      }
    }
    printl("✗ 未找到图片: " + cvFile);
    return null;
}

// ========== 方法总结 ==========

function printMethodSummary() {
    printl("\n========== 点击方法总结 ==========");
    printl("\n【HID点击方法】");
    printl("1. hid.click(x, y) - 在指定坐标位置点击");
    printl("2. hid.clickPercent(xPercent, yPercent) - 在屏幕百分比位置点击");
    printl("3. hid.doubleClick(x, y) - 在指定坐标位置双击");
    printl("4. hid.doubleClickPercent(xPercent, yPercent) - 在屏幕百分比位置双击");

    printl("\n【OCR点击方法】");
    printl("1. target.clickRandom() - 在OCR识别到的文本区域内随机点击");
    printl("2. 通过计算中心点后使用hid.click()点击 - 精确点击文本中心");

    printl("\n【找图点击方法】");
    printl("1. detects.clickRandom() - 在找到的图片区域内随机点击");
    printl("2. opencv.findImagesEx() - 查找单个图片");
    printl("3. opencv.findImages() - 查找多个图片");
    printl("4. opencv.templateMatch() - 模板匹配查找");

    printl("\n【UI组件点击方法】");
    printl("1. button.onClick(callback) - 按钮点击事件");
    printl("2. checkBox.onClick(callback) - 复选框点击事件");

    printl("\n【鼠标操作方法】");
    printl("1. hid.mouseDown() - 鼠标按下");
    printl("2. hid.mouseUp() - 鼠标抬起");
    printl("3. hid.mouseMove(x, y) - 移动鼠标相对位置");
    printl("4. hid.mouseHome() - 鼠标回到主页");
    printl("5. hid.moveToRealPoint(x, y) - 移动到绝对坐标");

    printl("\n【高级点击方法】");
    printl("1. 区域内随机点击 - 在指定区域内随机选择位置点击");
    printl("2. 连续点击多个位置 - 按顺序点击多个坐标点");
    printl("3. 等待目标出现后点击 - 轮询查找目标直到超时");
    printl("4. 查找并点击最近目标 - 计算距离选择最近的目标点击");
    printl("5. 批量点击所有匹配目标 - 遍历所有找到的目标并点击");

    printl("\n【实用场景】");
    printl("1. 3x3区域点击网格 - 测试屏幕不同区域");
    printl("2. 随机点击屏幕 - 模拟用户随机操作");
    printl("3. 边缘点击 - 测试边界区域");
    printl("4. OCR锁定后多次点击 - 提高效率避免重复识别");
    printl("5. 综合自动化流程 - 模拟实际应用操作流程");

    printl("\n========== 方法总结完毕 ==========\n");
}

// 执行主函数
main();

// 打印方法总结
printMethodSummary();


页: [1]
查看完整版本: AIWROK软件苹果系统点击方法综合示例