Advertisement

屏幕截图

阅读量:

截图分为两步:

  1. 获取截图权限
复制代码
    /* 请求截图权限 */
    if(!requestScreenCapture())
    {
    toast("请求截图失败!");
    exit();
    }
  1. 进行截图
复制代码
    captureScreen(path);

问题1
在 autojs 中,调用 requestScreenCapture 函数,系统会弹出询问框,问是否允许 autojs 截图,此时脚本就会阻塞,直到手动点击“取消”或“立即开始”按钮才会继续运行。
这个情况,会导致定时脚本无法完全脱离人工进行操作了。
在这里插入图片描述

方案
思路上,通过点击“立即开始”,就可以允许脚本继续往下跑了,但是由于此时脚本已经阻塞,所以它自己是点不了自己的了。所以,通过新建一个线程,让那个线程帮忙点,那就可以了。

复制代码
    /* 开启线程,找到并点击立即开始,并且触发事件(只需要执行一次就可以) */
    threads.start(function () {
       var beginBtn;
      if (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000)) {
          beginBtn.click();
      }
      });

问题2
截图时captureScreen(path)中的path是指截图保存的文件名称,包括路径名和文件名,为了便于查找,我们希望把截图放在相机文件夹下;同时,为了防止文件名重复,可以用当前日期时间对截图的文件进行命名。

方案

相机的文件夹路径为:
/DCIM/Camera/

获取当前网络时间:

复制代码
    function IntTime() {
    try {
        var recode_suning = http.get("http://quan.suning.com/getSysTime.do");
        var suningTime = recode_suning.body.json();
        return suningTime.sysTime1;
    } catch (e) {}
    }
    
    var myDateTime = IntTime();

详见文章“获取当前时间


下面是打开支付宝首页进行截图的例子:

复制代码
    toast("begin");
    app.launchApp('支付宝');
    sleep(1500);
    
    /* 获取日期用于生成截图文件名 */
    function IntTime() {
    try {
        var recode_suning = http.get("http://quan.suning.com/getSysTime.do");
        var suningTime = recode_suning.body.json();
        return suningTime.sysTime1;
    } catch (e) {}
    }
    var myDateTime = IntTime();
    
    /* 开启线程,找到并点击立即开始,并且触发事件(只需要执行一次就可以) */
    threads.start(function () {
       var beginBtn;
      if (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000)) {
          beginBtn.click();
      }
      });
    
    /* 请求截图权限 */
    if(!requestScreenCapture())
    {
    toast("请求截图失败!");
    exit();
    }
    
    /* 截图 */
    var path = files.getSdcardPath() + "/DCIM/Camera/" + myDateTime + ".png";
    sleep(1000);
    captureScreen(path);
    
    toast("end");

全部评论 (0)

还没有任何评论哟~