[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种方法)
![](https://img.haomeiwen.com/i14875935/2d4f4f6fdf41422d.jpg)