在 Explorer 中模仿 TC 获取文件和文件夹路径的功能

来源:互联网 发布:趣学python编程 编辑:程序博客网 时间:2024/05/04 21:44
作者:2005ok

http://bbs.deepin.org/thread-1785189-1-1.html

TC 的强大让我离不开它,不过我还是不能抛弃 Explorer ,于是就有了以下这个脚本。

功能如下:
Alt + 1:复制选中的文件或文件夹的路径(不包含文件名)
Alt + 2:复制选中的文件或文件夹的名字(仅文件或文件夹名)
Alt + 3:复制选中的文件或文件夹的完整路径(包含文件名)

PS:可以多选。
PS2:以下代码在论坛的漂亮显示效果,来自 okey3m为ahk脚本生成 Disuz! 代码高亮,Thanks。


以下为 Explorer.ahk 中的内容。
;-------------------------------------------------------------------------------

#NoEnv
;~ #ErrorStdOut
#SingleInstance Force
;~ SetBatchLines -1
;~ SetKeyDelay -1
;~ SetMouseDelay -1
;~ SetDefaultMouseSpeed 0
;~ SetWinDelay -1
;~ SetControlDelay -1
;~ SetWorkingDir %A_ScriptDir%
SendMode InputThenPlay
SetTitleMatchMode Regex ;可以使用正则表达式对标题进行匹配

;-------------------------------------------------------------------------------

;~ 在 Explorer 中模仿 TC 获取文件和文件夹路径的功能。

; 下面的窗口类依次为:桌面、Win+D后的桌面、我的电脑、资源管理器、另存为等
#IfWinActive, ahk_class (Progman|WorkerW|CabinetWClass|ExploreWClass|#32770)
;~ 复制选中的文件或文件夹的路径(不包含文件名)
!1::
    GetPath("Dir", 1500)
Return


;~ 复制选中的文件或文件夹的名字(仅文件或文件夹名)
!2::
    GetPath("Name", 1500)
Return


;~ 复制选中的文件或文件夹的完整路径(包含文件名)
!3::
    GetPath("FullPath", 1500)
Return

;-------------------------------------------------------------------------------

#Include Function.ahk

;-------------------------------------------------------------------------------
以上为 Explorer.ahk 中的内容。


以下为 Function.ahk 中的内容。

;-------------------------------------------------------------------------------

;~ 以下是使用到的函数

;-------------------------------------------------------------------------------

;~ 获取选中的文件或文件夹的路径,复制到剪贴板
GetPath(Type = "FullPath", ShowTooltipTime = 0)
    {
        Clipboard =
        Send, ^c    ;这里的 c 写成大写 C 的话就不正常了,奇怪啊。。。
        ClipWait, 1
        If !ErrorLevel
        {
            Loop, Parse, Clipboard, `r, `n  ;windows 复制的时候,剪贴板会保存“路径”,可以当成字符串处理
            {
                If (Type = "Dir")
                {
                    SplitPath, A_LoopField,, Temp
                    Temp = %Temp%/             ;加 / 表明这是一个文件夹,不是无扩展名文件
                }

                If (Type = "Name")
                {
                    SplitPath, A_LoopField, Temp
                    If IsFolder(A_LoopField)
                    {
                        Temp = %Temp%/
                    }
                }

                If (Type = "FullPath")
                {
                    Temp = %A_LoopField%
                    If IsFolder(A_LoopField)
                    {
                        Temp = %Temp%/
                    }
                }

                FilePath = %FilePath%%Temp%`n
            }
            StringTrimRight, FilePath, FilePath, 1  ;去除后面多添加的一个换行符

            If (ShowTooltipTime > 0)                  ;控制弹出提示消息的时间长短
            {
                ToolTip, %FilePath%
                SetTimer, RemoveToolTip, 1500        ;1.5秒后移除提示信息
            }

            Clipboard = %FilePath%
            Return 1
        }
        Else
        {
            Return 0
        }
    }

;-------------------------------------------------------------------------------

;~ 判断选中的是否文件夹
IsFolder(Path)
    {
        FileGetAttrib, Attrib, %Path%   ;把 Path 指向的文件或文件夹的属性赋值给 Attrib
        IfInString, Attrib, D            ;如果在 Attrib 里有 D ,就表示这个路径代表的是文件夹,否则就是文件
        {
            Return 1
        }
        Else
        {
            Return 0
        }
    }

;-------------------------------------------------------------------------------

;~ 顾名思义,移除提示信息。
RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
Return

;-------------------------------------------------------------------------------
以上为 Function.ahk 中的内容。

原创粉丝点击