--[===[ Author: YoucefHam Modified: 调整显示格式,将"内存记录名称"作为标题,描述放在状态信息下方 功能:在编辑菜单添加"快捷键管理器",支持查看/启用/禁用/移除所有快捷键 ]===] -- 菜单名称(避免冲突) local HotkeysManagerName = 'miCustomHotkeyManager_v4' local HotkeysManagerCaption = '&快捷键管理器' -- 按键代码映射表(中文显示) local _KeyCode = { [1]="左键",[2]="右键",[3]="取消",[4]="中键",[5]="X1键",[6]="X2键", [8]="退格",[9]="Tab",[12]="清除",[13]="回车",[16]="Shift",[17]="Ctrl",[18]="Alt", [19]="暂停",[20]="大小写锁定",[27]="ESC",[32]="空格",[33]="PageUp",[34]="PageDown",[35]="End", [36]="Home",[37]="左箭头",[38]="上箭头",[39]="右箭头",[40]="下箭头",[45]="插入",[46]="删除", [48]="0",[49]="1",[50]="2",[51]="3",[52]="4",[53]="5",[54]="6",[55]="7",[56]="8",[57]="9", [65]="A",[66]="B",[67]="C",[68]="D",[69]="E",[70]="F",[71]="G",[72]="H",[73]="I",[74]="J", [75]="K",[76]="L",[77]="M",[78]="N",[79]="O",[80]="P",[81]="Q",[82]="R",[83]="S",[84]="T", [85]="U",[86]="V",[87]="W",[88]="X",[89]="Y",[90]="Z",[91]="左Win",[92]="右Win",[93]="菜单键", [96]="小键盘0",[97]="小键盘1",[98]="小键盘2",[99]="小键盘3",[100]="小键盘4", [101]="小键盘5",[102]="小键盘6",[103]="小键盘7",[104]="小键盘8",[105]="小键盘9", [106]="小键盘*",[107]="小键盘+",[109]="小键盘-",[110]="小键盘.",[111]="小键盘/", [112]="F1",[113]="F2",[114]="F3",[115]="F4",[116]="F5",[117]="F6",[118]="F7",[119]="F8", [120]="F9",[121]="F10",[122]="F11",[123]="F12",[144]="NumLock",[145]="ScrollLock", [160]="左Shift",[161]="右Shift",[162]="左Ctrl",[163]="右Ctrl",[164]="左Alt",[165]="右Alt", [186]=";",[187]="=",[188]=",",[189]="-",[190]=".",[191]="/",[192]="`" } -- 全局变量存储窗口实例,避免重复创建 local hotkeyForm = nil -- 自定义消息窗口(500x800) local function showCustomMessage(title, content) -- 关闭已存在的窗口 if hotkeyForm and hotkeyForm.Visible then hotkeyForm.Close() hotkeyForm = nil end -- 创建新窗口 hotkeyForm = createForm() hotkeyForm.Caption = title hotkeyForm.Width = 500 -- 窗口宽度 hotkeyForm.Height = 800 -- 窗口高度 hotkeyForm.Position = poScreenCenter -- 居中显示 hotkeyForm.Visible = false -- 先隐藏,避免显示冲突 -- 添加滚动条文本框 local memo = createMemo(hotkeyForm) memo.Parent = hotkeyForm memo.Align = alClient -- 充满窗口 memo.ScrollBars = ssVertical -- 垂直滚动 memo.ReadOnly = true -- 只读 memo.Lines.Text = content -- 设置内容 -- 添加关闭按钮 local btn = createButton(hotkeyForm) btn.Parent = hotkeyForm btn.Caption = "关闭" btn.Align = alBottom btn.Height = 30 btn.OnClick = function() hotkeyForm.Close() hotkeyForm = nil -- 释放引用 end -- 窗口关闭时的处理 hotkeyForm.OnClose = function() hotkeyForm.Visible = false hotkeyForm = nil -- 释放引用 end -- 显示窗口(非模态,避免冲突) hotkeyForm.Visible = true end -- 获取动作名称(改进动作代码显示) function getActionName(actionCode) local actionMap = { [0] = "切换激活状态", [1] = "切换激活(允许增加)", [2] = "切换激活(允许减少)", [3] = "设置为激活", [4] = "设置为禁用", [5] = "设置值", [6] = "增加值", [7] = "减少值", ["mrhToggleActivation"] = "切换激活状态" -- 新增对特殊动作的支持 } return actionMap[actionCode] or ("动作代码:" .. tostring(actionCode)) end -- 获取所有快捷键(含值和描述) function GetHotkeys() local mr = getAddressList() if mr.Count == 0 then showMessage("没有找到内存记录!") return end local result = "快捷键详细列表:\n\n" local hasHotkeys = false for _Record = 0, mr.Count - 1 do local record = mr[_Record] local name = record.getDescription() or "未命名内存记录" local hkCount = record.HotkeyCount if hkCount > 0 then hasHotkeys = true -- 添加分隔线 result = result .. string.rep("-", 50) .. "\n" -- 将内存记录名称作为标题放在最上方 result = result .. "内存记录名称:" .. name .. "\n\n" for _HK = 0, hkCount - 1 do local hk = record.Hotkey[_HK] local keys = hk.Keys local keyStr = "" -- 解析按键组合 for i = 1, #keys do local kc = keys[i] local kn = _KeyCode[kc] or ("VK" .. kc) keyStr = keyStr .. (i > 1 and " + " or "") .. kn end -- 拼接快捷键信息,将描述放在状态信息下方 result = result .. string.format( " 快捷键 #%d:%s\n 动作:%s\n 关联值:%s\n 状态:%s\n 描述:%s\n\n", _HK + 1, keyStr, getActionName(hk.action), hk.value or "无值", hk.Active and "启用" or "禁用", record.Description or "无描述" ) end end end if not hasHotkeys then showMessage("未找到任何快捷键!") else showCustomMessage("快捷键列表", result) -- 使用自定义窗口 end end -- 移除所有快捷键 function removeAllHotkeys() local mr = getAddressList() local count = 0 for _Record = 0, mr.Count - 1 do local record = mr[_Record] for _HK = record.HotkeyCount - 1, 0, -1 do record.Hotkey[_HK].Destroy() count = count + 1 end end local msg = count > 0 and ("已移除所有快捷键,共" .. count .. "个") or "未找到可移除的快捷键!" showMessage(msg) end -- 启用全部快捷键 function enableAllHotkeys() local mr = getAddressList() local count = 0 for _Record = 0, mr.Count - 1 do local record = mr[_Record] for _HK = 0, record.HotkeyCount - 1 do local hk = record.Hotkey[_HK] if not hk.Active then hk.Active = true count = count + 1 end end end local msg = count > 0 and ("已启用所有快捷键,共" .. count .. "个(已启用的未重复计数)") or "没有可启用的快捷键!" showMessage(msg) end -- 禁用全部快捷键 function disableAllHotkeys() local mr = getAddressList() local count = 0 for _Record = 0, mr.Count - 1 do local record = mr[_Record] for _HK = 0, record.HotkeyCount - 1 do local hk = record.Hotkey[_HK] if hk.Active then hk.Active = false count = count + 1 end end end local msg = count > 0 and ("已禁用所有快捷键,共" .. count .. "个(已禁用的未重复计数)") or "没有可禁用的快捷键!" showMessage(msg) end -- 添加菜单项 local function addMenuItem(parent, caption, onClick) local item = createMenuItem(parent) item.Caption = caption item.OnClick = onClick parent.add(item) return item end -- 创建快捷键管理器菜单 local function addHotkeysManagerMenu() local mainForm = getMainForm() local editMenu = mainForm.ComponentByName['Edit3'] or mainForm.Menu.Items -- 检查是否已存在同名菜单,存在则先移除 local existing = mainForm.ComponentByName[HotkeysManagerName] if existing then existing.destroy() end -- 添加分隔线 local sep = createMenuItem(editMenu) sep.Caption = '-' editMenu.add(sep) -- 创建主菜单 local managerMenu = createMenuItem(editMenu) managerMenu.Name = HotkeysManagerName managerMenu.Caption = HotkeysManagerCaption editMenu.add(managerMenu) -- 添加子菜单 addMenuItem(managerMenu, "&获取所有快捷键(含值)", GetHotkeys) addMenuItem(managerMenu, "-") addMenuItem(managerMenu, "&启用全部快捷键", enableAllHotkeys) addMenuItem(managerMenu, "&禁用全部快捷键", disableAllHotkeys) addMenuItem(managerMenu, "-") addMenuItem(managerMenu, "&移除所有快捷键", removeAllHotkeys) end -- 执行菜单创建 addHotkeysManagerMenu()