fso = new ActiveXObject("Scripting.FileSystemObject"); ws = new ActiveXObject("WScript.Shell"); function MenuManager() { this.index = 0; this.menus = new Array(); this.menus[0] = CreatePopupMenu(); this.actions = new Array(); this.actions[this.index++] = null; function _Add(name, action) { this.menus[0].Add(name, this.index); this.actions[this.index++] = action; } function _Track(arg) { var result = this.menus[0].Track(arg); if (this.actions[result] != null) { this.actions[result].invoke(); } } function _BeginSubmenu(name) { var parentMenu = this.menus[0]; var submenu = CreatePopupMenu(); parentMenu.AddPopup(name, submenu); this.menus.unshift(submenu); } function _EndSubmenu() { this.menus.shift(); } this.Add = _Add; this.Track = _Track; this.BeginSubmenu = _BeginSubmenu; this.EndSubmenu = _EndSubmenu; } function listFavorites(menu) { add = "に'" + editor.ActiveDocument.Name + "'を追加"; function ShellExecute(arg) { function _invoke() { ws.Run("\"" + this.arg + "\""); } this.invoke = _invoke; this.arg = arg; } function AddFavorite(arg) { function _invoke() { var link = ws.CreateShortcut(this.arg + "\\" + editor.ActiveDocument.Name + ".lnk"); link.Description = "EmEditor Favorite Shortcut"; link.Arguments = "\"" + editor.ActiveDocument.FullName + "\""; link.TargetPath = editor.FullName; link.WorkingDirectory = ws.CurrentDirectory; link.Save(); } this.invoke = _invoke; this.arg = arg; } var favFolder = ws.ExpandEnvironmentStrings("%APPDATA%") + "\\EmFavorites"; if (!fso.FolderExists(favFolder)) { fso.CreateFolder(favFolder); if (!fso.FolderExists(favFolder)) { alert(favFolder + " にフォルダを作ることができませんでした"); return; } } function listFolder(menu, path) { var folder = fso.GetFolder(path); var j = new Enumerator(folder.SubFolders); for (; !j.atEnd(); j.moveNext()) { var path = j.item().Path; var name = j.item().Name; menu.BeginSubmenu(name); menu.Add(name + "を編集", new ShellExecute(path)); if (!fso.FileExists(path + "\\" + editor.ActiveDocument.Name + ".lnk")) { menu.Add(name + add, new AddFavorite(path)); } listFolder(menu, path); menu.EndSubmenu(); } var i = new Enumerator(folder.Files); for (; !i.atEnd(); i.moveNext()) { var name = i.item().Name.replace(/\.lnk$/, ""); menu.Add(name, new ShellExecute(i.item().Path)); } } menu.Add("お気に入りを編集", new ShellExecute(favFolder)); if (!fso.FileExists(favFolder + "\\" + editor.ActiveDocument.Name + ".lnk")) { menu.Add("お気に入り" + add, new AddFavorite(favFolder)); } listFolder(menu, favFolder); } //メインの処理 var menu = new MenuManager(); listFavorites(menu); menu.Track( eePosMouse );