[Lib] ObjToMenu() 读取对象到菜单

许多实用脚本和封装函数, 可以让您编写脚本更加便捷高效

Moderators: tmplinshi, arcticir

arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

[Lib] ObjToMenu() 读取对象到菜单

05 Sep 2014, 05:02

我的菜单模块就是以这个函数为基础建立起来的。
配合前面的读取INI到对象,就可以完成INI到菜单的转换了。

附赠读取文件目录到对象 :SubtreeToObj()
不过有些地方需要修改一二。

Code: Select all

Search:={google:"google.com",bing:"bing.com"}
images:={google:"google.com/images",bing:"bing.com/images"}
Network:={Search:Search,images:images}

ObjToMenu("测试",{Network:Network,Subtree:SubtreeToObj(A_ScriptDir)})

menu,测试, show

ObjToMenu(m,f,z:=""){
	for i,n in f
	if IsObject(n)
	h.=ObjToMenu(i,n,z m)
		else
	{
		Menu,% z m ,add,% i,Start
		h:=1
	}
	if h and z
	menu,% z?z:m,add,% m,% ":" z m
	return  h
}
return
Start:
SubtreeToObj(p,b*){
	if FileExist(p:=RTrim(p,"\"))
	{
		k:={(p):1},j:=f:=[]
		if b.MaxIndex()
		{
			Loop, %p%\*, , 1
			{
				if !k[A_LoopFileDir]
				{
					j:=f,k[A_LoopFileDir]:=1
					StringReplace, x, A_LoopFileDir, %p%\
					loop,parse,x,\
						IsObject(j[a_loopfield]) ? (j:=j[a_loopfield]) : (j:=j[a_loopfield]:=[])
				}
				j[A_LoopFileName]:={"":A_LoopFileLongPath}
				for i,n in b
					j.Insert(n,%n%)
			}
		}
		else	Loop, %p%\*, , 1
		{
			if !k[A_LoopFileDir]
			{
				j:=f,k[A_LoopFileDir]:=1
				StringReplace, x, A_LoopFileDir, %p%\
				loop,parse,x,\
					IsObject(j[a_loopfield]) ? (j:=j[a_loopfield]) : (j:=j[a_loopfield]:=[])
			}
			j[A_LoopFileName]:={"":A_LoopFileLongPath}
		}
		Return f
	}
}

Return to “脚本函数”

Who is online

Users browsing this forum: No registered users and 33 guests