Joined
Last Online
Recent Posts
posted in 技术交流 read more

在AutoXJS中,使用findOne方法来查找控件时,如果返回结果是一个空对象 {},通常表示没有找到符合条件的控件。这可能是因为条件不匹配或者控件暂时不可见等原因导致的。

下面是一些常见的情况和解决方法:

  1. 检查条件匹配: 确保你传入的条件是正确的。例如,如果你要查找一个按钮,你可能需要传入按钮的文本、ID、类名等信息。
const button = findOne({ className: 'buttonClassName' });
  1. 等待控件出现: 有时候控件可能需要一些时间才能加载出来,可以使用wait方法等待控件出现再进行查找。
const button = wait({ className: 'buttonClassName' });
  1. 检查控件是否可见: 有时候控件是存在的,但是被隐藏了,可以尝试使用visible: true条件来查找可见的控件。
const visibleButton = findOne({ className: 'buttonClassName', visible: true });
posted in 技术交流 read more

在JavaScript中,dialogs.singleChoice通常是一个阻塞式的对话框,也就是说它会等待用户的交互才会继续执行后续的代码。如果你希望在弹窗后自动进行后续的代码执行,可以考虑使用threads来创建一个新的线程来执行后续的代码,这样就不会受到阻塞。

下面是一个简单的示例代码,展示了如何在弹窗后使用新的线程来执行后续的代码:

var threads = require('threads');

// 创建新线程
var thread = threads.start(function() {

  //后续的代码
  //判断项
  var Room = dialogs.singleChoice("请选择类别",["有","无"] );
  var oneForm = dialogs.singleChoice("是否含",["含","不含"] );
  })

// 在主线程中继续执行
sleep(1000);
while(!click("buhegeweixuan", 0));

在这个示例中,我们使用了threads模块来创建一个新线程,来执行弹窗后的后续代码。这样可以避免在弹窗中被阻塞,可以让代码自动继续执行。

posted in 技术交流 read more

试试这个监听剪贴板的示例代码:

var lastClip = "";

// 启动监听剪贴板
threads.start(function() {
    while (true) {
        var clip = getClip();
        if (clip && clip != lastClip) {
            lastClip = clip;
            toast("剪贴板内容变化:" + clip);
            // 在这里可以对剪贴板的内容进行处理
        }
        sleep(1000); // 每隔1秒检查一次
    }
});

在这段代码中,我们启动一个线程来监听剪贴板内容的变化。当剪贴板内容发生变化时,会弹出一个Toast提示,并且可以在对应的位置处理剪贴板中的内容。

posted in 技术交流 read more

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监听剪贴板的变化,并在变化发生时获取剪贴板的内容。你可以将该代码集成到你的项目中,以实现剪贴板内容的监控和获取。

posted in 技术交流 read more

在 Auto.js 中实现应用内更新新版本需要以下步骤:

  1. 下载新版本的应用安装文件(APK 文件)到设备中。可以通过网络请求从服务器端获取新版本的下载链接,然后使用 Auto.js 提供的 HTTP 模块进行下载。

  2. 安装新版本的应用。您可以使用 Auto.js 提供的 app.openUrl 方法,将 APK 文件的本地路径传递给该方法,以触发安装新版本的应用。

以下是一个简单的示例代码,供您参考:

var url = 'http://your-server.com/your-app-new-version.apk'; // 新版本应用的下载链接
var newVersionPath = '/sdcard/Download/your-app-new-version.apk'; // 新版本应用的本地保存路径

// 下载新版本应用
var res = http.get(url);
if (res.statusCode == 200) {
  files.writeBytes(newVersionPath, res.body.bytes());
  toastLog("New version APK downloaded successfully.");
} else {
  toastLog("Failed to download new version APK.");
}

// 安装新版本应用
app.openUrl('file://' + newVersionPath);

请注意,上述代码仅是一个简单的示例,实际情况中您可能需要添加错误处理,权限请求,下载进度显示等功能。同时,确保在进行更新操作时遵守相关法律和隐私政策,确保用户知晓并同意应用的更新操作。

posted in 技术交流 read more

autox.js 是一个自动化测试工具,用于模拟用户操作,执行测试用例等。如果您想要使用 autox.js 来模拟跳转到指定应用的自启动权限页面,您可以按照以下步骤进行:

  1. 首先需要确保您的设备已经root,因为访问自启动权限页面通常需要特殊的权限。

  2. 使用 autox.js 的模拟点击功能,通过模拟用户操作来打开设置应用,然后导航到指定应用的自启动权限页面。

下面是一个示例代码,仅供参考:

const { adb } = require('autox');

adb.shell('am start -a android.settings.APPLICATION_DETAILS_SETTINGS -d package:com.example.yourapp');
adb.shell('input tap x y'); // 模拟点击自启动权限设置按钮

在这个示例中,adb.shell 用于执行 adb shell 命令来启动应用信息页面,并通过 input tap 来模拟点击操作。

请注意,由于设备和权限的差异,实际的操作可能会有所不同。同时,请务必确保您的操作遵守您所在地区的法律和相关规定,确保获得必要的授权和许可。

posted in 技术交流 read more

以下是一个用 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(),如果捕获到异常,则检查无障碍权限,并在无障碍未开启时执行相应的处理逻辑。

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

posted in 技术交流 read more

在autox.js中接入Lua的API,可以使用autox.js提供的engine.call()方法来调用Lua的函数以实现数值的漂移。以下是一个简单的示例:

首先,在Lua代码中编写一个用于数值漂移的函数:

-- Lua代码
function driftValue(x, y)
    return x + y
end

然后,在autox.js中调用该Lua函数来实现数值的漂移:

// 使用autox.js的engine.call()方法调用Lua函数
var result = engine.call("driftValue", 10, 20);
// 这里的10和20是要传递给Lua函数的参数
// result会收到Lua函数返回的结果
console.log("The drifted value is: " + result);

在这个示例中,我们使用engine.call()方法调用Lua中的driftValue函数,并传递了参数10和20。然后将Lua函数的返回值打印到控制台中。

这样,你就可以通过autox.js调用Lua的API来实现数值的漂移。希望对你有所帮助。如果有其他问题,欢迎随时提问。

posted in 技术交流 read more

在autox.js中,如果你希望悬浮窗不具有焦点,并且点击或移动悬浮窗时不影响下层应用的触摸,你可以尝试使用以下代码示例来实现:

var window = floaty.window(
    <frame gravity="center">
        <text id="text" textSize="16sp" textColor="white">这是一个悬浮窗</text>
    </frame>
);

// 设置悬浮窗的触摸事件
window.setTouchable(false);

// 悬浮窗的触摸事件处理
window.text.setOnTouchListener(function(view, event){
    // 在这里处理悬浮窗的触摸事件,例如移动悬浮窗位置等
    return true; // 返回true表示消费了触摸事件,不会传递到下层应用
});

// 显示悬浮窗
window.setPosition(100, 200);

上面的示例中,通过调用setTouchable(false)方法来设置悬浮窗不接收触摸事件,然后通过setOnTouchListener方法手动处理悬浮窗的触摸事件,这样点击或移动悬浮窗时不会传递触摸事件到下层应用。

希望这个示例可以帮助你实现你的需求。

posted in 技术交流 read more

在auto.js中,模拟长按音量的方式可以通过调用Shell命令来实现。同时,退出TalkBack可以通过模拟点击设备的返回键来实现。需要注意的是,模拟按键和触摸操作通常需要获取超级用户权限(root权限)。

下面是模拟长按音量减并退出TalkBack的示例代码:

// 模拟按住音量减键3秒
shell("input keyevent --longpress KEYCODE_VOLUME_DOWN 3", true);
sleep(3000); // 等待3秒

// 退出TalkBack
back();

上述示例中,通过shell函数模拟长按音量减键3秒,然后使用back函数模拟点击返回键退出TalkBack。

需要注意的是,针对特定的设备和环境,可能需要进行适当的调整。另外,模拟按键和触摸操作可能需要在特定的场景和权限下才能够使用,建议在执行前确认设备已获取超级用户权限或者相应的权限设置。