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 ExecuteCommandID(arg) { function _invoke() { editor.ExecuteCommandByID(this.arg); } this.invoke = _invoke; this.arg = arg; } function listTools() { var toolsreg; try { toolsreg = ws.RegRead("HKEY_CURRENT_USER\\Software\\EmSoft\\EmEditor v3\\Common\\Tools"); } catch(e) { alert("レジストリを開けませんでした"); return; } var bin = toolsreg.toArray(); bin.readWord = function() { var l; try { var l0 = this.shift(); var l1 = this.shift(); var l2 = this.shift(); var l3 = this.shift(); l = (((((l3 * 256) + l2) * 256) + l1) * 256) + l0; } catch(e) { return -1; } return l; } bin.skip = function(bytes) { for (var i = 0 ; i < bytes ; ++i) { this.shift(); } } bin.shiftString = function() { var result = "", c, l = this.readWord(); for (var i = 0 ; i < l ; ++i) { try { var c0 = this.shift(); var c1 = this.shift(); c = c0 + c1*256; } catch(e) { return result; } result += String.fromCharCode(c); } return result; } bin.skip(4); var num = bin.readWord(); var tools = new Array(); for (var i = 0 ; i < num ; ++i) { var tool = new Object(); tool.title = bin.shiftString(); tool.command = bin.shiftString(); tool.arg = bin.shiftString(); tool.dir = bin.shiftString(); tool.iconPath = bin.shiftString(); tool.iconIndex = bin.readWord(); tool.saveFile = bin.readWord(); tool.delegate = new ExecuteCommandID(8192 + i); tools.push(tool); } return tools; } var tools = listTools(); var menu = new MenuManager(); for (var i = 0 ; i < tools.length ; ++i) { menu.Add(tools[i].title, tools[i].delegate); } menu.Add("外部ツールの設定", new ExecuteCommandID(4324)); menu.Track(eePosMouse);