在我的程序中,我想根据文件夹及其子文件夹创建一个带子菜单的菜单。
第一个函数menu_fromfiles
正常工作。
但是第二个函数menu_fromfolders
一直给我一个错误:submenu does not exist
- 我无法弄明白。有线索吗?
这是我的代码:
#SingleInstance force
RButton::
menu_fromfolders("filelist", "File List", "c:\test", "*.txt", "thismenu")
menu, thismenu, show
Return
-------------------------------------------------------------------
menu_fromfolders(submenuname, menutitle, whatdir, filemask="*", parentmenu="", whatsub="DONOTATHING"){
global
loop, %whatdir%\*, 1, 0
{
if(file_isfolder(A_LoopFileFullPath)){
menu_fromfiles(a_loopfilename, a_loopfilename, A_LoopFileFullPath, filemask, "", whatsub)
menu, %submenuname%, add, %a_loopfilename%, :%a_loopfilename%
}else{
menu, %submenuname%, add, %a_loopfilename%, %whatsub%
}
}
if(parentmenu){
menu, %parentmenu%, add, %menutitle%, :%submenuname%
}
return submenuname
}
menu_fromfiles(submenuname, menutitle, whatdir, filemask="*", parentmenu="", whatsub="DONOTATHING"){
loop, %whatdir%\%filemask%, 0, 0
{
menu, %submenuname%, add, %a_loopfilename%, %whatsub%
}
if(parentmenu){
menu, %parentmenu%, add, %menutitle%, :%submenuname%
}
return submenuname
}
;returns true if the item is a folder, false if is a file
file_isfolder(whatfile){
lastchar := substr(whatfile, 0, 1) ;fetch the last character from the string
if(lastchar != "\")
whatfile := whatfile . "\"
if(fileexist(whatfile))
return true
}
;empty command for the menu title
DONOTATHING:
return
以下是更详细的错误消息:
Error in ...script.ahk
Submenu does not exist
-->menu, %submenuname%, add, %a_loopfilename%, :%a_loopfilename%
[更新]
请参阅下面的解决方案。您可以在此处找到完整而精致的脚本:http://www.autohotkey.com/board/topic/95219-dynamicfilemenuahk/
答案 0 :(得分:0)
当menu_fromfiles
循环搜索文件时,如果没有发现与掩码匹配的文件,则不会向菜单添加任何内容。
现在,您无法创建其中没有任何内容的子菜单。因此,如果没有项目添加到子菜单,则不会创建子菜单。
它仅间歇性地用于包含包含与掩码匹配的文件的文件夹的目录。当没有匹配的文件(或目录为空)时,该函数试图添加一个不存在的菜单。
解决方案是添加一种检测菜单项确实已创建的方法:
menu_fromfiles(submenuname, menutitle, whatdir, filemask="*", parentmenu="", whatsub="DONOTATHING"){
menucount := 0
loop, %whatdir%\%filemask%, 0, 0
{
menu, %submenuname%, add, %a_loopfilename%, %whatsub%
menucount++
}
if(parentmenu && menucount){
menu, %parentmenu%, add, %menutitle%, :%submenuname%
}
return submenuname
}
如果有人有兴趣,我会优化此代码以显示所有文件夹。您可以在此处找到完整的脚本:http://www.autohotkey.com/board/topic/95219-dynamicfilemenuahk/