longforus 发表于 2024-6-7 19:00

Directory Opus 13.6 可用的apk文件右键菜单脚本

本帖最后由 longforus 于 2024-6-11 10:28 编辑

Directory Opus 13.6 可用的apk文件右键菜单脚本:

```js
// apk文件的右键经过adb安装的脚本,可以在多个设备中选择

function OnClick(clickData) {
    try {
      
                // 检查是否选中了文件
      if (clickData.func.sourcetab.selected_files.count == 0) {
            DOpus.Output("没有选中任何文件");
            return;
      }
      // 获取选中的文件名
      var selectedFile = clickData.func.sourcetab.selected_files(0).realpath;
      DOpus.Output("选中的文件: " + selectedFile);
      // 创建 WScript.Shell 对象
      var WshShell = new ActiveXObject("WScript.Shell");
      // 调试输出,确认 WshShell 对象是否创建成功
      DOpus.Output("WshShell 对象创建成功");

      // 使用完整路径或确保 adb 在环境变量路径中
      var adbPath = "adb"; // 如果 adb 在环境变量中
      var adbExec = WshShell.Exec(adbPath + " devices -l");
      // 调试输出,确认命令是否成功执行
      DOpus.Output("adb 命令已执行");

      // 等待命令执行完成
      while (adbExec.Status == 0) {
            DOpus.Output("等待 adb 命令完成...");
            DOpus.Delay(500);
      }

      // 输出命令的退出代码
      DOpus.Output("adb 命令退出代码: " + adbExec.ExitCode);
      // 输出命令的标准输出
      var output = adbExec.StdOut.ReadAll();
      DOpus.Output("adb 命令输出: " + output);
      // 输出命令的错误输出
      var errorOutput = adbExec.StdErr.ReadAll();
      if (errorOutput) {
            DOpus.Output("adb 命令错误输出: " + errorOutput);
      }

      // 解析 adb 命令的输出,提取设备信息
      var deviceList = [];
      var lines = output.split('\n');
      for (var i = 1; i < lines.length; i++) {
            var line = lines;
            if (line) {
                var parts = line.split(/\s+/);
                if (parts.length > 2) {
                  var deviceId = parts;
                  var model = "";
                  for (var j = 0; j < parts.length; j++) {
                        if (parts.indexOf("model:") === 0) {
                            model = parts.split(':');
                            break;
                        }
                  }
                                        DOpus.Output("deviceId "+deviceId+" model"+model);
                  deviceList.push({id: deviceId, model: model});
                }
            }
      }
      // 如果没有设备,输出提示信息
      if (deviceList.length === 0) {
            DOpus.Output("没有检测到设备"+deviceList);
            return;
      }

      // 创建选择对话框
      var dlg = clickData.func.dlg;
      dlg.title = "选择设备";
      dlg.message = "请选择一个设备进行安装:";
      var buttons = "";
       for (var k = 0; k < deviceList.length; k++) {
            if (buttons.length > 0) {
                buttons += "|";
            }
            buttons += deviceList.model;
      }
                buttons+="|Cancel";
                DOpus.Output("buttons = "+buttons);
      dlg.buttons = buttons;
      dlg.Show();

         var selectedIndex = dlg.result;
               DOpus.Output("selectedIndex = "+selectedIndex);
      if (selectedIndex < 1) {
            DOpus.Output("用户未选择任何设备");
            return;
      }
      // 根据选择的索引获取设备ID
      var deviceId = deviceList.id;
      // 执行 adb install 命令
      var apkPath = selectedFile; // 使用选中的 APK 文件路径
      var installCmd = adbPath + " -s " + deviceId + " install " + apkPath;
      DOpus.Output("执行命令: " + installCmd);
      var installExec = WshShell.Exec(installCmd);
      // 等待安装命令完成
      while (installExec.Status == 0) {
            DOpus.Output("等待 adb install 命令完成...");
            DOpus.Delay(500);
      }

      // 输出安装命令的退出代码
      DOpus.Output("adb install 命令退出代码: " + installExec.ExitCode);
         // 输出安装命令的标准输出
      var installOutput = installExec.StdOut.ReadAll();
      DOpus.Output("adb install 命令输出: " + installOutput);
      // 输出安装命令的错误输出
      var installErrorOutput = installExec.StdErr.ReadAll();
      if (installErrorOutput) {
            DOpus.Output("adb install 命令错误输出: " + installErrorOutput);
      }
    } catch (e) {
      // 捕获并输出错误信息
      DOpus.Output("发生错误: " + e.message);
    }
}

```

2024年6月11日, AM 10:28:05 重新修改了一下,添加取消按钮, 修复单设备下可能出现的错误

### 安装方法

1.Directory Opus 13.6 设置->文件类型:

2. 搜索apk

   

3. 选择新建

   

### 使用





选择对应的设备就可以了,存在的问题是会弹出命令行的黑框.但是比输序号还是要方便,优雅一些

longforus 发表于 2024-6-7 19:03

另外有双击选择安装的版本   https://www.52pojie.cn/thread-1549989-1-1.html

lisoloist 发表于 2024-6-11 10:37

这个软件有很多定制化的东东啊,可惜基本不会,目前都是用的原始默认的!
发现一个小问题,若窗口用满了右键无粘贴选项,请问如何再在此已满窗口目录下粘贴新文件呢

lxyi 发表于 2024-6-7 20:47

学习大佬方法了

wakin20 发表于 2024-6-7 22:17

膜拜大佬,謝謝分享!

wait4wuai 发表于 2024-6-7 22:45

但是,windows又不支持。

woainizmb 发表于 2024-6-7 23:22

66666666666666666

longforus 发表于 2024-6-11 10:29

wait4wuai 发表于 2024-6-7 22:45
但是,windows又不支持。

这个软件就是win平台的,支持

leestef 发表于 2024-6-11 15:05


学习大佬方法了

iamlimeng 发表于 2024-6-12 14:20

国内为DO写代码真是太少了,可能使用DO的群体本来就小。虽然用不上,但必须支持!
页: [1] 2
查看完整版本: Directory Opus 13.6 可用的apk文件右键菜单脚本