0-0 发布的最佳帖子
发布在 技术交流 阅读更多

AutoXJS是一个基于JavaScript的自动化工具,提供了一组API用于操作Windows系统和浏览器。要监听剪贴板变化并获取内容,你可以使用AutoXJS提供的剪贴板API。

以下是一个使用AutoXJS来监听剪贴板变化并获取内容的例子:

// 导入AutoXJS模块
const { clipboard } = require('autoxjs');

// 监听剪贴板变化
clipboard.on('change', (text) => {
  console.log('剪贴板内容变化:', text);
  // 在这里可以对剪贴板的内容进行处理
});

// 获取当前剪贴板内容
const currentText = clipboard.getText();
console.log('当前剪贴板内容:', currentText);

以上代码演示了如何使用AutoXJS监听剪贴板的变化,并在变化发生时获取剪贴板的内容。你可以将该代码集成到你的项目中,以实现剪贴板内容的监控和获取。

发布在 bug、问题、建议 阅读更多

在JavaScript中,变量的作用域是由函数决定的,而不是线程。因此,无论是主线程还是子线程,它们都能访问相同的全局变量。如果你希望在不同的线程中使用各自独立的变量,可以考虑使用JavaScript的闭包来达到这个目的。下面是一个修改后的示例代码:

var p1 = threads.start(function() {
    var c; // 在线程1中定义私有变量c
    var d;
    a(1, c);
    toastLog("第一个" + d)
});
var p2 = threads.start(function() {
    var c; // 在线程2中定义私有变量c
    var d;
    a(2, c);
    toastLog("第二个" + d)
});

function a(b, c) {
    c = b + 1; // 在各自的线程中设置局部变量c
    var d = c + 1; // 在函数内部定义局部变量d
    return d; // 返回局部变量d的值
}

在修改后的代码中,我们在每个线程中都定义了私有的变量c和d,这样确保了线程1和线程2里的变量不会相互影响。

通过使用闭包,我们可以确保在不同的线程中使用各自独立的变量,避免了变量通用的问题。希望这个方法能够解决你的问题!

发布在 技术交流 阅读更多

在Auto.js中,如果text().findOne()无法找到控件,而你确定控件是存在的,可能有一些原因和解决方法:

  1. 等待时间:有时候在界面元素完全加载之前就调用findOne()方法会导致控件未被找到。你可以尝试使用waitFor()来等待控件出现,示例如下:

    var target = text("目标文本").findOne(5000); // 等待最多5秒
    if (target) {
        // 控件找到了
    } else {
        // 没找到
    }
    
  2. UI层级变化:可能你的目标控件在较深的层级中,或者它有变化,比如状态不同(例如文本的字体、颜色等)。你可以使用其他选择器,比如id()选择器来增加查找的确定性:

    var target = id("控件ID").findOne();
    
  3. 动态加载的元素:在某些情况下,界面元素是在特定操作后动态加载的。确保在目标控件显现之后再进行查找。

  4. 控件不可见:控件虽然存在,但可能由于某些原因不可见(如隐藏、透明度等)。可以通过检查属性来验证这一点。

  5. 使用更通用的选择器:假如text()选择器没有匹配到控件,尝试使用更通用的选择器,比如className()或者desc()等:

    var target = className("控件类名").findOne();
    
  6. 调试信息:开启显示UI层级的调试信息,就可以查看所有控件。你可以使用auto()函数并实时观察,这有助于识别控件是否存在以及它的完整属性:

    auto();
    
  7. 不同的界面或模式:确认你测试的界面和实际运行时的界面是一致的。有时界面可能会因为不同的状态而略有不同。

如果尝试了这些方法仍然无法解决问题,可以尝试提供更多的具体信息,可能包括代码片段或者控件的具体属性,这样更容易诊断问题的根源。

发布在 技术交流 阅读更多

以下是一个用 Auto.js 编写的示例代码,其中包含了一个主函数和一个用于检查无障碍权限的辅助函数。代码使用try-catch块来捕获无障碍未开启的情况。

// 主函数
function mainFunction() {
    // 在这里编写主函数的逻辑
    console.log("执行主函数");
}

// 检查无障碍权限的函数
function checkAccessibilityPermission() {
    var cmd = "settings get secure enabled_accessibility_services";
    var result = shell(cmd, true);
    if (!result.error) {
        var output = result.result;
        if (output && output.indexOf("com.yourpackage/.YourAccessibilityService") != -1) {
            console.log("无障碍权限已开启");
            return true;
        } else {
            console.log("无障碍权限未开启");
            return false;
        }
    } else {
        console.error("执行shell命令时出错: " + result.error);
        return false;
    }
}

// 调用主函数,捕获无障碍权限未开启的情况
try {
    mainFunction();
} catch (e) {
    console.error("捕获到异常: " + e);
    if (!checkAccessibilityPermission()) {
        // 无障碍权限未开启,执行相应操作
        console.log("执行无障碍权限未开启的处理逻辑");
        // 这里可以调用你的无障碍函数来模拟点击等操作
    }
}

请注意在上述代码中,"com.yourpackage/.YourAccessibilityService" 部分需要替换为你实际的辅助功能服务的包名和类名。

这段代码首先尝试调用主函数 mainFunction(),如果捕获到异常,则检查无障碍权限,并在无障碍未开启时执行相应的处理逻辑。

希望这个示例对你有帮助。如果你有其他问题或需要更多帮助,请随时告诉我。

发布在 技术交流 阅读更多

从你的描述中,我理解你想要通过autox.js来找到一些特定的控件,并使用它们的坐标信息。下面我将提供一个示例,演示如何使用autox.js来实现这一目标。

var targets = id("cn.damai:id/ll_perform_item").className("android.widget.LinearLayout").find()

var desiredObject; // 用于保存我们需要的 UiObject

// 遍历找到的所有 UiObject
for (var i = 0; i < targets.length; i++) {
    var obj = targets[i];
    if (obj.toString().indexOf("UiObject@781ff") !== -1) { // 对 UiObject 进行筛选
        desiredObject = obj; // 找到目标 UiObject,保存起来
        break; // 如果找到,提前结束遍历
    }
}

if (desiredObject) { // 如果找到了目标 UiObject
    log("Desired UiObject found: " + desiredObject.toString());
    // 这里可以使用 desiredObject 来获取坐标信息等等
    var boundsInScreen = desiredObject.getVisibleBounds(); // 获取目标 UiObject 的在屏幕上的坐标
    log("Bounds in screen: " + boundsInScreen.toString());
    // 在这里,你可以使用 desiredObject 的方法来执行你想要的操作
} else {
    log("Desired UiObject not found");
}

在这个代码示例中,我们首先使用 autox.js 的 find 方法找到了一些 UiObject,然后遍历这些 UiObject,通过判断每个 UiObject 的描述信息来找到我们需要的目标 UiObject,并保存起来。一旦找到目标 UiObject,我们就可以使用它来获取坐标信息,或执行其他想要的操作。

请根据你的具体需求和场景,对示例代码进行相应的调整和扩展。

希望这能够帮助你解决问题。