文件夹路径创建Menu实例2

FileSelectFolder, path, , , 选择一个文件夹
if !path
	ExitApp

FileMenu(path)
Menu, % UID(path), show
ExitApp
;文件夹路径创建Menu函数
FileMenu(folder){
static FileUID := []
;文件夹
folders := cmd("dir /AD /b /s """ folder "*""")
folders .= "`n" folder
;首先建立所有menu
Loop, Parse, folders, `n, `r
{
	UID := UID(A_LoopField)
	FileUID[UID] := A_LoopField
	Menu, % UID, add,
	Menu, % UID, DeleteAll
}
;关联上级菜单
Loop, Parse, folders, `n, `r
{
	StringGetPos, pos, A_LoopField, , R
	if !Errorlevel
	{
		SplitPath, A_LoopField, path2, path1
		path1UID := UID(path1)
		If !IsEmptyFolder(A_LoopField)
			Menu, % path1UID, add, % path2, % ":" UID(A_LoopField)
		else
			Menu, % path1UID, add, % path2, FileHandle
		Menu, % path1UID, Icon, % path2, shell32.dll, 4
	}
}
;文件
files := cmd("dir /A-D /b /s """ folder "*""")
Loop, Parse, files, `n, `r
{
	StringGetPos, pos, A_LoopField, , R
	if !Errorlevel
	{
		SplitPath, A_LoopField, path2, path1
		path1UID := UID(path1)
		Menu, % path1UID, add, % path2, FileHandle
		SplitPath, A_LoopField, , , ext
		if !ext
		{
			Menu, % path1UID, Icon, % path2, shell32.dll, 1
			continue
		}
		if (ext="exe")
		{
			try
				Menu, % path1UID, Icon, % path2, % A_LoopField
			catch e
				Menu, % path1UID, Icon, % path2, shell32.dll, 3
			continue
		}
		if (StrLen(icon :=GetFileAssocIcon(ext))>2)
		{
			Icon := StrSplit(icon,",")
			try
				Menu, % path1UID, Icon, % path2, % Icon[1], % Icon[2] ? Icon[2] : ""
			catch e
				Menu, % path1UID, Icon, % path2, shell32.dll, 1
			continue
		}
		Menu, % path1UID, Icon, % path2, shell32.dll, 1
	}
}


;解析句柄 修改此处决定如何处理文件
FileHandle:
	if A_ThisMenuItem
		MsgBox % FileUID[A_ThisMenu] "" A_ThisMenuItem
return
}



UID(string)
{
static table := []
static id
for k,v in table
{
	if (v=string)
		return k
}
id++
table["u" id] := string
return "u" id
}

cmd(command){
static i
i++
RunWait, %ComSpec% /c %command% >%A_Temp%cmd%i%.tmp, , Hide
FileRead, content, %A_Temp%cmd%i%.tmp
StringReplace, content, content, `r, , All
return content
}

IsEmptyFolder(path){
loop, %path%*
	return
return 1
}

GetFileAssocIcon(ext){ ;txt
;缓存设置
static Icons := []
;是否缓存
if Icons[ext]
	return Icons[ext]
else
{
	RegRead,  Name, HKCR, .%ext%,
	if ErrorLevel
		return
	RegRead, DefaultIcon, HKCR, %Name%DefaultIcon,
	if ErrorLevel
		return
	a := StrSplit(DefaultIcon,",")
	DefaultIcon := a[1] "," a[2]+1
	Icons[ext] := DefaultIcon
	return DefaultIcon
}
}


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

文件夹路径创建Menu实例

2020-3-9 3:07:44

其他

文件自动分类整理

2020-3-9 3:09:44

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