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)
。对此表示抱歉。我添加了您要求的两个。让我重新表述一下:编写一个示例,复制错误,但尽可能小。好的,如果您将其粘贴到脚本文件中,这应该可以工作-没有更多依赖项。我已经很快地过了一遍,我认为您的处理程序、子菜单。。这些东西混在一起了/不见了。