 | |  |  |
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("设置", [0, 0, 1, 1]);
- 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("日志", [0, 0, 1, 1]);
- if (target2 != null) {
- printl("找到包含 '日志' 的文本");
- target2.clickRandom();
- printl("✓ 随机点击成功");
- } else {
- printl("未找到包含 '日志' 的文本");
- }
- sleep(1000);
- printl("方式3: 使用正则表达式查找并点击");
- var targets = ocrResult.findTextWithRegex("\\d+", [0, 0, 1, 1]);
- if (targets != null && targets.length > 0) {
- printl("找到 " + targets.length + " 个包含数字的文本");
- targets[0].clickRandom();
- printl("✓ 点击第一个匹配项成功");
- } else {
- printl("未找到包含数字的文本");
- }
- sleep(1000);
- printl("方式4: 遍历所有文本并点击符合条件的文本");
- var allDetects = ocrResult.getAllDetect();
- for (var i = 0; i < allDetects.length; i++) {
- var textStr = String(allDetects[i].text);
- if (textStr.indexOf("设置") !== -1) {
- printl("找到包含 '设置' 的文本");
- allDetects[i].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[0].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[i].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, [0, 0, 1, 1], false);
-
- if (matchResults != null && matchResults.length > 0) {
- printl("模板匹配找到 " + matchResults.length + " 个目标");
- matchResults[0].clickRandom();
- printl("✓ 点击第一个匹配目标成功");
- } else {
- printl("未找到匹配目标");
- }
-
- mat.close();
- image.close();
- sleep(1000);
- printl("方式4: 指定区域找图并点击");
- var region = [0.2, 0.2, 0.8, 0.8];
- printl("在区域 [" + region.join(", ") + "] 内查找");
- var regionResults = opencv.findImages(['图色769598.cv'], 0.7, 3000, 1, region);
-
- if (regionResults != null && regionResults.length > 0) {
- printl("在指定区域内找到目标");
- regionResults[0].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 = [
- [0.2, 0.2],
- [0.5, 0.5],
- [0.8, 0.8]
- ];
- for (var i = 0; i < clickPoints.length; i++) {
- printl("点击位置 " + (i + 1) + ": (" + clickPoints[i][0] + ", " + clickPoints[i][1] + ")");
- hid.clickPercent(clickPoints[i][0], clickPoints[i][1]);
- 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, [0, 0, 1, 1]);
- 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[i].x + detects[i].width / 2;
- var centerY = detects[i].y + detects[i].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[nearestIndex].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[i].x + ", y=" + detects[i].y);
- detects[i].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 = [
- [0.1, 0.1], // 左上
- [0.9, 0.1], // 右上
- [0.1, 0.9], // 左下
- [0.9, 0.9] // 右下
- ];
- for (var i = 0; i < edgePoints.length; i++) {
- printl("点击边缘点 " + (i + 1) + ": (" + edgePoints[i][0] + ", " + edgePoints[i][1] + ")");
- hid.clickPercent(edgePoints[i][0], edgePoints[i][1]);
- 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("设置", [0, 0, 1, 1]);
- if (target1 != null) {
- target1.clickRandom();
- printl("✓ 第一次点击成功");
- }
-
- var result2 = image.ocr(0, 0, 1, 1);
- var target2 = result2.findIncludeText("日志", [0, 0, 1, 1]);
- 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("设置", [0, 0, 1, 1]);
- if (settingTarget != null) {
- settingTarget.clickRandom();
- printl("✓ 点击设置成功");
- sleep(2000);
- printl("步骤2: 查找并点击 '日志'");
- var ocrResult2 = screen.ocr(0, 0, 1, 1);
- var logTarget = ocrResult2.findIncludeText("日志", [0, 0, 1, 1]);
- 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[0] && centerX <= region[2] &&
- centerY >= region[1] && centerY <= region[3];
- }
- 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[i].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();
复制代码
| |  | |  |
|