autohotkey写的类似于资源管理器

autohotkey写类似于资源管理器
; 下面是一个比此页面顶部附近那个更精巧的可运行脚本.
; 它创建和显示包含了在所有用户开始菜单的所有文件夹的 TreeView.  当
; 用户选择文件夹时, 它的内容会显示在右边的 ListView (类似于 Windows 资源管理器).
; 此外, StatusBar 控件会显示当前选择文件夹的信息.

; 下面的文件夹为 TreeView 的根文件夹. 请注意如果指定
; 整个驱动器例如 C:\, 那么加载可能需要很长时间:
TreeRoot = %A_StartMenuCommon%
TreeViewWidth := 280
ListViewWidth := A_ScreenWidth - TreeViewWidth - 30

; 让用户可以最大化或拖动调整窗口大小:
Gui +Resize

; 创建图像列表并在其中放入一些标准的系统图标:
ImageListID := IL_Create(5)
Loop 5 
    IL_Add(ImageListID, "shell32.dll", A_Index)
; 创建 TreeView 和 ListView, 让它们像在 Windows 资源管理器中那样靠在一起:
Gui, Add, TreeView, vMyTreeView r20 w%TreeViewWidth% gMyTreeView ImageList%ImageListID%
Gui, Add, ListView, vMyListView r20 w%ListViewWidth% x+10, Name|Modified

; 设置 ListView 的列宽(可选的):
Col2Width = 70  ; 缩小到只显示 YYYYMMDD 部分.
LV_ModifyCol(1, ListViewWidth - Col2Width - 30)  ; 保留垂直滚动条的空间.
LV_ModifyCol(2, Col2Width)

; 创建状态栏, 显示文件夹数及其总大小的信息:
Gui, Add, StatusBar
SB_SetParts(60, 85)  ; 创建状态栏的三个部分(第三部分占用所有剩余宽度).

; 添加文件夹及其子文件夹到树中. 如果加载需要很长时间, 则显示提示信息:
SplashTextOn, 200, 25, TreeView and StatusBar Example, Loading the tree...
AddSubFoldersToTree(TreeRoot)
SplashTextOff

; 显示窗口并返回. 每当用户执行符合条件的动作时, 操作系统会通知脚本:
Gui, Show,, %TreeRoot%  ; 在标题栏中显示源目录(树的根目录).
return

AddSubFoldersToTree(Folder, ParentItemID = 0)
{
    ; 此函数添加指定文件夹中所有子文件夹到 TreeView.
    ; 它还可以调用自己来递归获取到任意深度的内嵌文件夹.
    Loop %Folder%*.*, 2  ; 获取所有文件夹的子文件夹.
        AddSubFoldersToTree(A_LoopFileFullPath, TV_Add(A_LoopFileName, ParentItemID, "Icon4"))
}

MyTreeView:  ; 此子程序处理用户的操作(例如点击).
if A_GuiEvent <> S  ; 即"选择树中的新项目"外的其他操作.
    return  ; 什么都不做.; 否则, 把选择的文件夹中的内容放入 ListView.; 首先确定选择的文件夹的完整路径:
TV_GetText(SelectedItemText, A_EventInfo)
ParentID := A_EventInfo
Loop  ; 建立到选择的文件夹的完整路径.
{
    ParentID := TV_GetParent(ParentID)
    if not ParentID  ; 没有更多的高层项目了.
        break
    TV_GetText(ParentText, ParentID)
    SelectedItemText = %ParentText%\%SelectedItemText%
}
SelectedFullPath = %TreeRoot%\%SelectedItemText%

; 把文件放入 ListView:
LV_Delete()  ; 清除所有行.
GuiControl, -Redraw, MyListView  ; 加载过程中禁用重绘来提升性能.
FileCount = 0  ; 为下面的循环进行初始化.
TotalSize = 0
Loop %SelectedFullPath%*.*  ; 为了简化, 这里省略了文件夹, 所以只在 ListView 中显示文件.
{
    LV_Add("", A_LoopFileName, A_LoopFileTimeModified)
    FileCount += 1
    TotalSize += A_LoopFileSize
}
GuiControl, +Redraw, MyListView

; 更新状态栏的三个部分, 让它们显示当前选择的文件夹的信息:
SB_SetText(FileCount . " files", 1)
SB_SetText(Round(TotalSize / 1024, 1) . " KB", 2)
SB_SetText(SelectedFullPath, 3)
return

GuiSize:  ; 当用户改变窗口大小时扩展/收缩 ListView 和 TreeView.
if A_EventInfo = 1  ; 窗口被最小化了.无需进行操作.
    return
; 否则, 窗口的大小被调整过或被最大化了. 调整控件大小以适应.
GuiControl, Move, MyTreeView, % "H" . (A_GuiHeight - 30)  ; 预留 30 用于状态栏和边距.
GuiControl, Move, MyListView, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewWidth - 30)
return

GuiClose:  ; 当用户关闭 TreeView 所在的 GUI 窗口时退出脚本.
ExitApp

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

自己写一个资源管理器

2018-1-5 16:11:18

其他

AHK实现在任务栏上滚动鼠标来调节音量

2018-1-5 16:30:26

5 条回复 A文章作者 M管理员
  1. 逐叶

    学习!!

  2. 123

    您好,您制作的这个资源管理器非常好,我认为有以下几个亮点:1.无任何学习成本,total commander固然是神器,但不容易入门;2.界面简洁,windows自带的资源管理器,有些复杂,尤其是在我只有利用它整理文件的时候;3.脚本本身占用的系统资源非常小,且文件资料仍然是存储在电脑上,不担心安全问题。4.自带的树状文件目录,整理文件会更直观。

    该脚本优点非常多,但我自身在使用的过程中还发现有几个小点,希望您能帮忙修改:1.左边树状目录里可以自由添加或删除目录;2.在点击了左边目录后,如果其下还有子目录,也能在右边区域显示出来,并且在右边点击该文件夹后,可以直接进入下一级目录;3.右边区域内可以自由添加或删除文件;4.添加文件的右键菜单同电脑本身的右键菜单一样;5.右边区域内的文件可以以文件本身自定的打开方式打开;6.右边区域文件的排列方式可以按电脑本身的排列方式来多种排列;7.排列项可自由添加或删减。8.是否可以内置everthing 或listary,按下指定的快捷键,便可以在限定的目录内快速搜索。
    PS:提的要求有些多,本来是和作者商量,希望能给作者一些辛苦费,但作者念我刚工作不久,没啥积蓄,就免费帮我制作。谢谢河许人。希望您的网站越办越好。

    • 河许人

      不好意思,这一段时间一直被各种事情耽搁,所以一直拖到现在,我尝试帮你完善一下。我大致看了一下1-6要求就是要达到系统自带的水平,后边两项是拔高需求。一时半会很难完善起来。

    • Learner

      群主,MarkDown编辑器关闭了吗?最近想更新一下一篇文章,结果发现找不到入口了。

    • 河许人

      不过我也会抽时间完善一下,放在商店里,就不开源了!

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