使用情景:
bat、ahk等文件,在用左键双击的时候,会运行。如果是需要编辑的时候,就要在右键菜单里找打开方式或者拖文件到编辑器内
此方法可以在选中的文件上直接双击右键,用指定的应用来打开文件
缺点:
此方法会对正常的右键造成一定的延时,对在文件上长按右键后拖动的操作造成影响,或者一些其他我未发现的影响
效果:
代码:
; 此处用来指定打开文件用的应用
; 格式: 扩展名 = 软件完整路径 (多种类型文件用同一个软件的情况,多个扩展名用逗号隔开如 ahk,ah2 )
; 每个软件写一行,写在下面的括号对内,整体格式如下
; 此例中,ahk/ah2扩展名文件用vsc打开,jpg/png/jpeg/gif扩展名文件用看图王打开
ZhiDingRuanJian =
(
ahk,ah2=C:\Users\JiangShi\AppData\Local\Programs\Microsoft VS Code\Code.exe
jpg,png,jpeg,gif=C:\Program Files (x86)\PicViewer\2345PicViewer.exe
)
; Original_Double("双击对应的函数/标签", "单击对应的函数/标签【留空为单击执行按键原功能】")
$RButton::Original_Double("TryOpen")
; 处理文件打开
TryOpen(){
global
SuoYouJianQieBan := ClipboardAll ; 这是通过复制的方式获取文件路径,处理一下clipboard, 尽量减少污染剪切板
; 保存剪切板所有内容到变量 SuoYouJianQieBan
Clipboard = ; 清空一次剪切板
Send, ^c ; 复制【对文件复制,剪切板内含当前文件的完整路径】
ClipWait, 0.5 ; 等待剪切板变化
RegExMatch(Clipboard, "(?<=\.)[^.]+$", KuoZhanMing) ; 取当前文件扩展名,存入KuoZhanMing【参RegExMatch函数】
Loop, Parse, ZhiDingRuanJian, `n, `r ; 逐行解析用来预设应用的字符串ZhiDingRuanJian
{
WenJian := RegExReplace(A_LoopField,"\=.+") ; 取当前行=左侧内容 【预设的扩展名】
RuanJian := RegExReplace(A_LoopField,"^.+\=") ; 取当前行=右侧内容 【预设的软件】
IF KuoZhanMing in %WenJian% ; 如果当前选中文件的扩展名【KuoZhanMing】包含于【预设的扩展名】
{
If (RuanJian ~= "图库") ; 对于此处,在结尾做说明
Chakanqi()
Else
Run, %RuanJian% "%Clipboard%" ; 用【预设的软件】打开当前选中的软件
}
}
Clipboard := "" ; 打开动作完成,清空一次剪切板
Clipboard := SuoYouJianQieBan ; 把之前存到变量的所有剪切板内容恢复到剪切板
SuoYouJianQieBan := "" ; 清空变量
return
}
Chakanqi(){
RegRead, vPath, HKEY_CURRENT_USER\Control Panel\Desktop, Wallpaper
Run, rundll32.exe "%A_ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll"`, ImageView_Fullscreen %Clipboard%
}
; 这是以文档中settimer下的一个实现多击的实例为基础改的一个函数
Original_Double(Double_BiaoQian, Click_BiaoQian := ""){
Global
Original_Double_DanJi := RegExReplace(Trim(A_ThisHotkey, "$"), "^([\^\+!]*)([a-zA-Z0-9]+$)", "$1{$2}")
Original_Double_DanJiBQ := Click_BiaoQian
Original_Double_ShuangJiBQ := Double_BiaoQian
if Key_presses > 0
{
Key_presses += 1
return
}
Key_presses = 1
SetTimer, KeyClick, 250
return
KeyClick:
if Key_presses = 1
{
If (!Original_Double_DanJiBQ)
{
Send % Original_Double_DanJi
}
Else
SetTimer, %Original_Double_DanJiBQ%, -1
}
else if Key_presses = 2
{
SetTimer, %Original_Double_ShuangJiBQ%, -1
}
Key_presses = 0
Return
}
关于上面代码中“图库”的说明:
win10是以“照片”应用打开图片,找不到“照片”的exe,没法像其他应用一样打开
所以用函数Chakanqi()内的方式以“照片查看器”预览图片
?哇~后面解释得好详细!!可以好好研究研究了!不愧是大神作品,我还在用着软件加空格加双引号文件形式打开第二软件呢
打开的方式跟你那个一样,就是一个固定写好,一个在打开的时候自动获取一下
~Ctrl::
指定打开软件 =
(
dwg=C:QCCADReader.exe.lnk
pdf=C:QC工程易览PDF.exe.lnk
jpg,jpeg,png=C:QCPhotoshop.lnk
)
if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 300)
{
原始剪切板 := ClipboardAll ; 这是通过复制的方式获取文件路径,处理一下clipboard
Clipboard = ; 清空一次剪切板
Send, ^c ; 复制【对文件复制,剪切板内含当前文件的完整路径】
ClipWait, 0.5 ; 等待剪切板变化
RegExMatch(Clipboard, "(?<=.)[^.]+$", KuoZhanMing) ; 取当前文件扩展名,存入KuoZhanMing【参RegExMatch函数】
Loop, Parse, 指定打开软件, `n, `r ; 逐行解析用来预设应用的字符串ZhiDingRuanJian
{
WenJian := RegExReplace(A_LoopField,"=.+") ; 取当前行=左侧内容 【预设的扩展名】
WenJian := StrReplace(WenJian,A_Tab) ; 取左侧内容清理tab 【预设的扩展名】
RuanJian := RegExReplace(A_LoopField,"^.+=") ; 取当前行=右侧内容 【预设的软件】
IF KuoZhanMing in %WenJian% ; 如果当前选中文件的扩展名【KuoZhanMing】包含于【预设的扩展名】
{
Run, %RuanJian% "%Clipboard%" ; 用【第2个软件】打开当前选中的软件
}
}
Clipboard := "" ; 打开动作完成,清空一次剪切板
Clipboard := 原始剪切板 ; 把之前存到变量的所有剪切板内容恢复到剪切板
原始剪切板 := "" ; 清空变量
return
}
在楼主的启发下,改为ctrl双击打开软件。只需要修改「指定打开软件」的内容即可。