2

私のプログラムでは、フォルダーとそのサブフォルダーに基づくサブメニューを含むメニューを作成したいと考えています。

最初の関数は正常menu_fromfilesに動作します。

しかし、2 番目の関数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 に答える