AHK程序设计

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

2018-11-17  本文已影响1人  d61f25068828

[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函数对象系列-绑定方法对象)

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

作者:心如止水
上一篇 下一篇

猜你喜欢

热点阅读