|
|
我是用ahk实现的,快捷键用的f1,反正f1帮助在资源管理器里也没啥用,代码问的ai
- ; CabinetWClass 是 Windows 资源管理器主窗口的标准窗口类名(适用于 Windows 10 和 Windows 11)。
- ; 使用 #IfWinActive ahk_class CabinetWClass 可确保你的热键仅在资源管理器窗口处于活动状态时生效。
- ; 这比使用窗口标题(如 ahk_exe explorer.exe)更可靠,因为 explorer.exe 还可能用于桌面、任务栏等其他界面,而 CabinetWClass 特指文件浏览窗口。
- #IfWinActive ahk_class CabinetWClass
- F1::
- ResultPaths := GetFilePathsFromClipboard()
-
- if (ResultPaths != "")
- {
- ; 因为函数内部可能已经设置了 Clipboard,这里再次确认
- Clipboard := ResultPaths
- ToolTip, 路径已复制!
- SetTimer, RemoveToolTip, 1500
- }
- return
- #If
- ; ==========================================
- ; 函数定义:获取剪贴板中的文件路径
- ; ==========================================
- GetFilePathsFromClipboard()
- {
- ; 1. 保存当前剪贴板状态 (虽然这里主要是为了清空,但为了安全起见)
- ; 注意:在函数内部我们不恢复剪贴板,因为调用者可能需要把结果写入剪贴板
- ClipSaved := ClipboardAll
- Clipboard := ""
- Send ^c
- ClipWait, 1
-
- if (ErrorLevel)
- {
- Clipboard := ClipSaved
- ToolTip, 复制超时
- SetTimer, RemoveToolTip, 1500
- return ""
- }
- FinalPaths := ""
-
- ; 获取原始剪贴板内容
- RawData := Clipboard
- ; 按行分割处理
- Loop, Parse, RawData, `n, `r
- {
- Path := Trim(A_LoopField)
- if (Path = "")
- continue
- ; 检查是否是有效路径(存在 or 至少看起来像绝对路径)
- if (FileExist(Path) || RegExMatch(Path, "^[A-Za-z]:\\|^\\\\"))
- {
- ; 用双引号包裹每条路径
- if (FinalPaths != "")
- FinalPaths .= "`n"
- FinalPaths .= """" . Path . """"
- }
- else
- {
- ; 如果不是有效路径,可选择跳过或保留原样(根据需求)
- ; 这里保守处理:跳过无效路径
- }
- }
- if (FinalPaths != "")
- {
- Clipboard := FinalPaths
- ; 可选:显示成功提示
- ; ToolTip, 已获取 %ClipboardLines% 条路径
- ; SetTimer, RemoveToolTip, 1000
- }
- else
- {
- ToolTip, 无法获取有效路径
- SetTimer, RemoveToolTip, 1500
- }
- return FinalPaths
- }
- RemoveToolTip:
- SetTimer, RemoveToolTip, Off
- ToolTip
- return
复制代码 |
|