例如,假设我在某处有文本(记事本、Word......):
转至目录目录:, 然后...
我想选择粗体内容,右键单击并显示菜单项“转到 C:\Program Files“。
有没有任何扩展(或者可能是 Windows 方式)可以实现这个功能?
答案1
除非有人制作了一个应用程序来执行您所描述的操作(我不知道有任何应用程序),否则解决方案将涉及编码或脚本。
据我了解,问题分为两部分:
1)如何从选定的文本中打开路径
2)如何将#1添加到上下文菜单。
对于 #1(编写动作):
这可以通过多种语言以编程方式实现。我个人会使用 Autohotkey 脚本,但也可以采用其他方式实现。
以下脚本在 Autohotkey L (1.1) 下对我有用,可在此处找到 https://www.autohotkey.com/download/
目前,我已将其绑定到 F3 键。但可以根据此处的语法将其调整为任何键: https://www.autohotkey.com/docs/Hotkeys.htm
安装 AHK_L 然后保存为 openSelPath.ahk:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; test folder D:\Downloads
; test file D:\Dev\YOmDuDV.jpg
; no-existent path D:\Dev\doesnotexist.foo
~F3::
openSelectedPath()
return
openSelectedPath() {
send, ^c
sleep, 200
strPath := Clipboard
intLen := StrLen(strPath)
if ( intLen > 0) {
;check if path exists
strResult := FileExist(strPath)
if ( "" == strResult) {
msgbox, 48, Error:, Path "%strPath%" not found.
return
}
isDir := (0 != InStr(strResult, "D"))
if ( 1 == isDir ) {
Run, explorer.exe "%strPath%"
return
}
intLastSlash := InStr(strPath, "\", false, 0)
if ( 0 == intLastSlash ) {
msgbox, 48, Error:, Path "%strPath%" not found.
return
}
strParentDir := SubStr(strPath, 1, intLastSlash- 1)
;check if path exists
strResult := FileExist(strParentDir)
if ( "" == strResult) {
msgbox, 48, Error:, Path "%strParentDir%" not found.
return
}
isDir := (0 != InStr(strResult, "D"))
if ( 1 == isDir ) {
Run, explorer.exe "%strParentDir%"
return
}
}
return
}
对于 #2(添加到上下文菜单):
我看到其中一个标签是“上下文菜单”...我承认,我不确定您是否会从上下文菜单中执行此操作;根据描述,听起来您想直接从记事本/写字板/等中执行此操作。对上下文菜单的支持是特定于程序的。
我认为您无法从任何 Microsoft 应用程序(Notepad/Wordpad/Word/Excel/等)的上下文菜单中访问它,因为它们是闭源的。您也许可以为 Office 应用程序做一些插件,但我认为这需要编程。
我知道一些开源应用程序(例如 Notepad++)支持通过 XML 等定义快捷方式(我认为 NPP 也可能支持上下文菜单选项,但这可能需要用 C++ 编写插件)。
如果您正在谈论 Windows 资源管理器/文件资源管理器,则可以添加上下文菜单动词,但对于我来说,在这种情况下这样做没有意义,因为您可能会从其他程序启动。