右键双击,以非默认应用打开文件

使用情景:

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()内的方式以“照片查看器”预览图片

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他

SleepEx精准休眠函数

2021-12-9 17:14:49

其他

多进程共享函数通信 1.4

2021-12-10 0:01:25

4 条回复 A文章作者 M管理员
  1. 月下马

    ?哇~后面解释得好详细!!可以好好研究研究了!不愧是大神作品,我还在用着软件加空格加双引号文件形式打开第二软件呢

    • 僵尸牌木乃伊

      打开的方式跟你那个一样,就是一个固定写好,一个在打开的时候自动获取一下

  2. maxs

    ~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
    }

  3. maxs

    在楼主的启发下,改为ctrl双击打开软件。只需要修改「指定打开软件」的内容即可。

个人中心
购物车
优惠劵
有新私信 私信列表
搜索