文件夹中的动态菜单

时间:2013-07-09 15:58:29

标签: menu autohotkey

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

第一个函数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/

1 个答案:

答案 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/