Menu 文件夹中的动态菜单

Menu 文件夹中的动态菜单,menu,autohotkey,Menu,Autohotkey,在我的程序中,我想根据文件夹及其子文件夹创建一个带有子菜单的菜单 文件中的第一个功能菜单\u工作正常 但是文件夹中的第二个功能菜单\u一直给我一个错误:子菜单不存在-我无法找到它。有什么线索吗 这是我的密码: #SingleInstance force RButton:: menu_fromfolders("filelist", "File List", "c:\test", "*.txt", "thismenu") menu, thismenu, show Return --------

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

文件中的第一个功能
菜单\u
工作正常

但是文件夹中的第二个功能
菜单\u
一直给我一个错误:
子菜单不存在
-我无法找到它。有什么线索吗

这是我的密码:

 #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%
[更新]

请参阅下面我的解决方案。你可以在这里找到完整而精练的脚本:

啊,算了吧

菜单\u fromfiles
循环搜索文件时,如果没有找到与掩码匹配的文件,则不会向菜单添加任何内容

现在,您不能创建一个子菜单中没有任何内容。因此,如果未向子菜单添加任何项,则不会创建子菜单

它只是在目录中间歇工作,目录中的文件夹包含与掩码匹配的文件。当没有匹配的文件(或目录为空)时,函数尝试添加不存在的菜单

解决方案是添加一种检测是否确实创建了menuitem的方法:

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
}

如果有人感兴趣,我改进了这段代码以显示所有文件夹。您可以在这里找到完整的脚本:

请发布更详细的错误消息。发布一个sscce。您缺少函数
文件\u exist(whatdir)
。对此表示抱歉。我添加了您要求的两个。让我重新表述一下:编写一个示例,复制错误,但尽可能小。好的,如果您将其粘贴到脚本文件中,这应该可以工作-没有更多依赖项。我已经很快地过了一遍,我认为您的处理程序、子菜单。。这些东西混在一起了/不见了。