2

在我的程序中,我想创建一个带有基于文件夹及其子文件夹的子菜单的菜单。

第一个功能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/

4

1 回答 1

1

啊,想通了。

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/

于 2013-07-10T14:16:45.890 回答