autojs微信红包助手代码,供大家参考

// vx版本8.0.23(其他版本也可尝试),测试手机为红米note10 pro,autojsPro版本8.8.22-common
// 本代码只用于学习交流,严禁用于违法违规途径,后果自负
//前期在不同机型上运行,发现indexOf判断通知消息是否含有相关文字时报错,所以设置了indexOf和match两个方法供大家选择
//本人autojs刚入门,代码写得不好多多包涵,已基本可以运行,但还存在bug,可以自行测试修改




//UI主体
"ui";
ui.layout(

    <vertical>
        <appbar>
            <toolbar id="toolbar" title="某信红包助手" />
        </appbar>

        <vertical>
            //双大括号代表表达式,里面的内容通过计算赋给checked
            //autojs!=null,代表无障碍已经开启,返回true
            <text id="tiXing" text="请打开下列三个权限,使用时请设置屏幕长亮" textColor = "red"/>
            <linear>
                <Switch id="autoService" text="无障碍服务:" checked="{{auto.service != null}}" w="auto" />
            </linear>

            <linear>
                <Switch id="notificationReadPermissions" text="通知读取权限:" checked="{{notificationListenerEnable() != null}}" w="auto" />
            </linear>

            <linear>
                <Switch id="floatyPermission" text="悬浮窗权限" checked="{{floatyCheckPermission() != false}}" w="auto" />
            </linear>

            <checkbox id="xuanFuChuang" text="日志窗" checked="true" />
            <radiogroup>
                <radio text="match方法" id="matchMethod" checked="true" />
                <radio text="indexOf方法" />
            </radiogroup>
            
            <text text = "更多分享请关注微信gzh:咸散人士" textColor = "red"/>
            <text text = "已基本能运行,但存在的bug可自行修改" textColor = "blue"/>
        </vertical>

        <button id="bRunMyApp" text="开始运行" layout_gravity="center" w="100" />
    </vertical>
);


//解除autojspro无法在某些大厂app运行代码(适用8.0+)
function 解除限制() {
    importClass(com.stardust.autojs.core.accessibility.AccessibilityBridge.WindowFilter);
    let bridge = runtime.accessibilityBridge;
    let bridgeField = runtime.getClass().getDeclaredField("accessibilityBridge");
    let configField = bridgeField.getType().getDeclaredField("mConfig");
    configField.setAccessible(true);
    configField.set(bridge, configField.getType().newInstance());
    bridge.setWindowFilter(new JavaAdapter(AccessibilityBridge$WindowFilter, {
        filter: function (info) {
            return true;
        }
    }));
}

解除限制();

//显示在其他应用的上层
ui.floatyPermission.on("check", function (checked) {

    // log("允许显示在其他应用上层:" + floatyCheckPermission());
    // log(checked + "111111");
    if (checked && floatyCheckPermission() == false) {//checked && floatyCheckPermission() == false,如果ui界面的悬浮窗权限开关已开启但是悬浮窗权限未开启,则跳转到悬浮窗权限设置界面

        //这串代码的实现原理暂时不了解
        importClass(android.content.Intent);
        importClass(android.net.Uri);
        importClass(android.provider.Settings);
        var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + context.getPackageName()));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        app.startActivity(intent);

    } else if (!checked && floatyCheckPermission() == true) {//!checked && floatyCheckPermission() == true
        //因为暂时不知道如何用代码关闭悬浮窗权限,所以只能跳转页面让用户自己关

        importClass(android.content.Intent);
        importClass(android.net.Uri);
        importClass(android.provider.Settings);
        var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + context.getPackageName()));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        app.startActivity(intent);

    }

})

ui.autoService.on("check", function (checked) {
    //用户勾选无障碍服务的选项时,跳转到页面让用户去开启
    // log(checked + "+++++");
    // log(auto.service);
    if (checked && auto.service == null) {//checked && auto.service == null,如果ui界面的无障碍开关已开启但是无障碍服务未开启,则跳转到无障碍设置界面
        app.startActivity({
            action: "android.settings.ACCESSIBILITY_SETTINGS"
        });
    } else if (!checked && auto.service != null) {//!checked && auto.service != null,如果ui界面的无障碍开关未开启但是无障碍服务已开启,则将无障碍服务关闭
        auto.service.disableSelf();
    }
    // log(checked + "-----");
})

ui.notificationReadPermissions.on("check", function (checked) {

    // log(checked + "-----");
    if (checked && notificationListenerEnable() == null) {//checked && notificationListenerEnable() == null,如果ui界面的通知读取权限开关已开启但是通知读取权限未开启,则跳转到通知读取权限设置界面
        app.startActivity({
            action: "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS",
        });
    } else if (!checked && notificationListenerEnable() != null) {//!checked && notificationListenerEnable() != null
        //因为暂时不知道如何用代码关闭通知读取权限,所以只能跳转页面让用户自己关
        app.startActivity({
            action: "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS",
        });
    }

})

//监听当用户回到本界面时,resume事件会被触发,保持权限与开关的状态同步
ui.emitter.on("resume", function () {
    //此时根据无障碍服务的开启情况,同步开关的状态
    ui.autoService.checked = auto.service != null;
    ui.notificationReadPermissions.checked = notificationListenerEnable() != null;
    ui.floatyPermission.checked = floatyCheckPermission() != false;
})

ui.bRunMyApp.on("click", function () {

    // log(ui.autoService.checked);
    // log(ui.notificationReadPermissions.checked);

    if ((ui.autoService.checked && auto.service != null) && (ui.notificationReadPermissions.checked && notificationListenerEnable() != null) && (ui.floatyPermission.checked && floatyCheckPermission() != false)) {
        home();
        threads.start(function () {
            toastLog("运行中...");

            悬浮窗_权限()

            events.observeNotification();
            events.onNotification(function (notification) {
                var myText = notification.getText();
                var myPackageName = notification.getPackageName();
                // log(myText);
                // log(myPackageName);
                // log("监听到的消息内容是否包含 [微信红包]:" + myText.indexOf("[微信红包]") == -1);//监听到的消息内容是否包含[微信红包],-1为不包含
                //如果监听到的消息内容中包含[微信红包],而且发消息的app包名是微信,则点击消息
                if (ui.matchMethod.checked == true) {
                    if (myText.match("[微信红包]") != null && myPackageName == "com.tencent.mm") {

                        notification.click();

                        id("com.tencent.mm:id/by2").waitFor();//等待微信右上角三点出现,判断已经跳转到微信聊天窗口
                        // log(className("android.widgetFrameLayout").id("com.tencent.mm:id/b8g").find());
                        qiangHongBao();
                    }
                } else {
                    if (myText.indexOf("[微信红包]") != -1 && myPackageName == "com.tencent.mm") {

                        notification.click();

                        id("com.tencent.mm:id/by2").waitFor();//等待微信右上角三点出现,判断已经跳转到微信聊天窗口
                        // log(className("android.widgetFrameLayout").id("com.tencent.mm:id/b8g").find());
                        qiangHongBao();
                    }
                }

            });

        })


    } else {
        toast("请同时开启无障碍服务、通知读取权限和悬浮窗权限");
    }
});

var myTime = 100;
var 微信红包 = {
    "微信红包": [["className = android.widget.TextView", "text = 微信红包"], ["WXHB", ".parent().parent().parent()", myTime]]
}
var= {
    "开": [["className = android.widget.Button", "id = com.tencent.mm:id/gix"], ["KD", "", myTime]]
}

var 返回按钮 = {
    "返回按钮": [["className = android.widget.ImageView", "id = com.tencent.mm:id/k6t"], ["KD", "", myTime]]
}




function 悬浮窗_权限() {
    if (ui.xuanFuChuang.checked) {
        console.show();
        sleep(1000);
        console.setPosition(0, 0);
        console.setSize(450, 500);
    }
}


function qiangHongBao() {
    var results = 控件_查找_find(微信红包["微信红包"][0]);
    // log("页面上有多少个红包:" + results.size());
    for (var Num = 0; Num < results.length; Num++) {
        if (results[Num].parent().parent().parent().find(textStartsWith("已")).empty()) {
            // log("还有红包未领取");
            results[Num].parent().parent().parent().click();
            while (true) {
                // log("正在开红包");
                控件_查找完点击_findOnce(["开"][0],["开"][1][1],["开"][1][2]);
                控件_查找完点击_findOnce(返回按钮["返回按钮"][0], 返回按钮["返回按钮"][1][1], 返回按钮["返回按钮"][1][2]);
                if (className("android.widget.LinearLayout").id("com.tencent.mm:id/by2").exists()) {
                    // log("已经打开第一个红包");
                    break;
                }
            }
        }
    }
    home();
    toastLog("返回桌面...");
}




function 控件_查找_find(inputArr) {//clickOrSearch, 
    var myStr = "";
    for (var Num = 0; Num < inputArr.length; Num++) {
        myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
    }

    // log(myStr + "findOnce()");
    return eval(myStr + "find()");
}

function 控件_点击_find(kongJian, cengShu, shiJian) {
    if (kongJian.nonEmpty()) {
        for (Num = 0; Num < kongJian.length; Num++) {
            if (kongJian[Num]) {
                // log(eval("kongJian"));
                eval("kongJian[Num]" + cengShu + ".click();");
                sleep(shiJian);
                back();
                sleep(2000);
            }
        }
    } else {
        // log("没有找到控件");
    }
}


function 控件_查找_findOnce(inputArr) {//clickOrSearch, 
    var myStr = "";
    for (var Num = 0; Num < inputArr.length; Num++) {
        myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
    }

    // log(myStr + "findOnce()");
    return eval(myStr + "findOnce()");
}

function 控件_点击_finOnce(kongJian, cengShu, shiJian) {

    if (kongJian) {
        // log(eval("kongJian"));
        eval("kongJian" + cengShu + ".click();");
        sleep(shiJian);
    }

}
function 控件_查找完点击_findOnce(inputArr, cengShu, shiJian) {//clickOrSearch, 
    var myStr = "";
    for (var Num = 0; Num < inputArr.length; Num++) {
        myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
    }

    // log(myStr + "findOnce()");
    var kongJian = eval(myStr + "findOnce()");

    if (kongJian) {
        // log(eval("kongJian"));
        eval("kongJian" + cengShu + ".click();");
        sleep(shiJian);
    } else {
        // log("没有找到")
    }

}

function notificationListenerEnable() {
    let packageName = context.getPackageName();//获取app的包名
    // log(packageName);
    let data = android.provider.Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");//判断是否打开通知权限,有打开返回含app包名的对象
    // log(typeof (data));
    let enable = data.indexOf(packageName);
    // log(enable);
    if (enable != -1) {
        // log("已经打开通知权限");
        return data;
    } else {
        return null;
    }
}

function floatyCheckPermission() {
    importClass(android.provider.Settings);
    return Settings.canDrawOverlays(context.getApplicationContext());
};


  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值