美文网首页AHK程序设计
[AHK-lib分享] 用指定程序批量打开文档

[AHK-lib分享] 用指定程序批量打开文档

作者: d61f25068828 | 来源:发表于2018-11-17 18:57 被阅读1次

    [AHK-lib分享] 用指定程序批量运行文档

    使用场景

    我一直用WPS文字来记一些东西,因为有时候我需要用到它的多标签,但是我也喜欢Word上而一些特性,比如对于宏的支持更好。在我的电脑上Word而是默认的程序,如果我直接用AHK打开某文档的话,那么就只能选择Word。我希望运行的时候能够使用指定的程序,而不仅仅是默认程序。

    优缺点以及可能的改进

    现在完全满足了我的需求,缺点就是我没有在其他地方大规模试验,我不知道windows上的这个命令是不是也同样适用于别的软件(我只测试过WPS和Chrome)。

    关于

    如果您发现“库工作不正常”或“有更好的解决思路”,欢迎您和我交流,QQ2531574300。O(∩_∩)O~

    lib代码

    /*
    # Library 库名
    RunBySpecificSoftware
    
    # Specification(Default ParaMeters) 功能介绍(默认下)
    用户输入exe程序路径和文档路径(用‘|’分隔,支持批量)
    用指定exe打开这些文档
    
    # ParaMetersList    参数列表
    SoftPath - exe程序路径
    FileStringGroup - 文档路径(用‘|’分隔,支持批量)
    
    # Author    作者
    心如止水
    
    # AHK Version AHK版本
    1.1.30
    
    # Library Version 库版本
    %库版本%
    v1.0 : UseCMDRun 的第一个版本上线了 ^^
    
    # 依赖库 : 
        StringGroupParseToSimpleArray
        UseCMD3
    
    # Quality Test  出厂品控检测
    √ 合格
    
    # Copyright  版权声明
    如果我的分享侵犯了您的权利,请尽快联系我解决。
    欢迎转载/改变,如果您觉得我的分享有帮助,希望您能在作品上展示原文地址。
    */
    
    RunBySpecificSoftware(SoftPath,FileStringGroup){
        local
    
        if (IsObject(FileStringGroup)){
            ;# 如果发现本来就是数组,那么赋值就可以了
            FilePathArray:=FileStringGroup
        }
        else{
            ;# 如果传入的是StringGroup则转为数组
            FilePathArray:=StringGroupParseToSimpleArray(FileStringGroup,"`|")
        }
    
        ;# 用户输入软件路径之后合成Command头部
        FilePathString=
        (
    start "" %SoftPath%
        )
        Command:=FilePathString
    
    
        ;# 遍历数组合成最终Command
        loop % FilePathArray.Length(){
            ;# 字符串拼接
            ;# 用引号把每一个路径都包裹起来,并且在每一个的前面加入空格
            Command.=" "
            Command.="""" . FilePathArray[A_Index] . """"
    
        }
    
        UseCMD3(Command)
    
        ;## 运行结束返回
        return
    
    }
    
    

    lib依赖库

    /*
    
    【隐藏运行cmd命令并将结果存入剪贴板后取回 @hui-Zz】
      来源:https://autohotkey.com/boards/viewtopic.php?t=48132&p=215348
    
    */
    ;---------------------------------------------------------------------------------------------------------------
    UseCMD3(command){
        cmdInfo:=""
        Clip_Saved:=ClipboardAll
        try{
            Clipboard:=""
            Run,% ComSpec " /C " command " | CLIP", , Hide
            ClipWait,2
            cmdInfo:=Clipboard
        }catch{}
        Clipboard:=Clip_Saved
        return cmdInfo
    }
    
    
    ​```
    
    StringGroupParseToSimpleArray(HayStack,Delimiters:="`|",EnableThrow=true,EnableMsgBoxPrint:=false,EnableTrim:=true,EnableDelimitersSingle:=true){
        local
    
        ;# 检测是否为String,并且含有Delimiters 验收:
        ;# 如果EnableThrow开启的话就抛出异常,关闭就原样返回(默认抛出异常).
    
        ;## 检测是不是对象 
    
    if (IsObject(HayStack)){
            if (Enablethrow)
                throw Exception("First ParaMeter is not a String`r`n第一个参数并非字符串(但是是""对象"")")
            else
                return HayStack
        }
    
        ;## 检测一下String中是否含有分隔符 √
        if NOT InStr(HayStack, Delimiters){
            if (Enablethrow)
                throw Exception("Not Find Delimiters in HayStack`r`n在您输入的字符串中,没有发现分隔符")
            else
                return [HayStack]
        }
    
        ;# 确认无误之后,开始进行替换
    
        ;# 如果发现有重复的,先变成一个(选项开启时)
        if (EnableDelimitersSingle){
            HayStack := RegExReplace(Haystack,"\|{2,}" , Replacement := "|", OutputVarCount := "", Limit := -1, StartingPosition := 1)
        }
        ;# 如果发现头部和尾部有分隔符那么清除掉的(选项开启时)(清除两头的东西,要在清除重复的东西之后)
        ;## 不需要用 `| 因为在这里根本就没有其易用,和不用是一样的效果
        if (EnableTrim){
            HayStack :=  Trim(HayStack,"|")
        }
    
        ;## 建立空SimpleArray
        SimpleArray:=[]
    
        ;## 解析字符串
        loop,Parse,HayStack,%Delimiters%
        {
            ;## 加入数组中
            SimpleArray.Push(A_LoopField)
        }
    
    ​```
    

    lib实战案例

    WPSstart(){
    local 
    FileStringGroup=D:\后备资料站\MD输出者\新稿件.docm|D:\后备资料站\MD输出者\购物清单.docm|D:\后备资料站\MD输出者\收集箱|D:\后备资料站\MD输出者\[收集箱] 青蛙-待处理.docm|D:\后备资料站\MD输出者\收集箱处理临时区域.docm
    SoftPath="F:\WPSOffice2018\office6\wps.exe"
    RunBySpecificSoftware(SoftPath,FileStringGroup)
    return
    }
    
    

    End

    心如止水是Java/AHK的持续学习者,很欢迎您来和我探讨Java/AHK问题。 QQ:2531574300 ^_^

    更多文章

    [专栏] AHK程序设计 - SegmentFault 思否(优先持续更新)

    [基础] [GIF动图] 绕过中文输入法发送文本的3种方法)

    [基础] AHK函数对象系列-绑定方法对象)

    [基础] 代码语句与代码块

    作者:心如止水

    相关文章

      网友评论

        本文标题:[AHK-lib分享] 用指定程序批量打开文档

        本文链接:https://www.haomeiwen.com/subject/tsjifqtx.html