Tray API
系统托盘图标模块,用于在 Windows 任务栏显示托盘图标和弹出菜单。
Lua API
tray.create(tooltip)
创建一个新的托盘图标。
lua
local icon = tray.create("Wingman")参数:
tooltip- 鼠标悬停时显示的提示文本
返回: TrayIcon 对象
tray.get(id)
获取已创建的托盘图标。
lua
local icon = tray.get("main")tray.remove(id)
移除托盘图标。
lua
tray.remove("main")TrayIcon 对象方法
icon:setIcon(iconPath)
设置托盘图标的图标文件。
lua
icon:setIcon("C:/path/to/icon.ico")参数:
iconPath- .ico 文件路径
icon:setTooltip(tooltip)
设置鼠标悬停提示文本。
lua
icon:setTooltip("Wingman 自动化引擎")icon:addItem(id, label, callback)
添加菜单项。
lua
icon:addItem("start", "启动脚本", function()
print("启动脚本!")
end)参数:
id- 菜单项唯一标识label- 显示文本callback- 点击时调用的函数(可选)
icon:addSeparator(id)
添加分隔线。
lua
icon:addSeparator("sep1")icon:addSubmenu(id, label, items)
添加子菜单。
lua
icon:addSubmenu("scripts", "脚本", {
{id = "s1", label = "脚本1"},
{id = "s2", label = "脚本2"}
})icon:removeItem(id)
移除菜单项。
lua
icon:removeItem("start")icon:clearItems()
清空所有菜单项。
lua
icon:clearItems()icon:show()
显示托盘图标。
lua
icon:show()icon:hide()
隐藏托盘图标。
lua
icon:hide()icon:updateMenu()
更新菜单。
lua
icon:updateMenu()icon:isVisible()
检查托盘图标是否可见。
lua
if icon:isVisible() then
print("图标可见")
end返回: boolean
icon:destroy()
销毁托盘图标。
lua
icon:destroy()完整示例
lua
-- 创建托盘图标
local icon = tray.create("Wingman")
-- 设置图标
icon:setIcon("assets/icon.ico")
-- 添加菜单项
icon:addItem("start", "启动脚本", function()
print("启动脚本...")
end)
icon:addItem("stop", "停止脚本", function()
print("停止脚本...")
end)
-- 添加分隔线
icon:addSeparator("sep1")
-- 添加子菜单
icon:addSubmenu("tools", "工具", {
{id = "t1", label = "录制宏"},
{id = "t2", label = "查看日志"}
})
-- 添加退出项
icon:addItem("exit", "退出", function()
os.exit()
end)
-- 显示图标
icon:show()
-- 保持运行
while true do
util.sleep(1000)
endC++ API
创建托盘图标
cpp
#include "wingman/tray.hpp"
// 创建托盘图标
auto icon = std::make_shared<TrayIcon>("Wingman");
// 设置图标
icon->setIcon("assets/icon.ico");
// 添加菜单项
TrayItem startItem;
startItem.id = "start";
startItem.label = "启动脚本";
startItem.callback = []() {
std::cout << "启动脚本" << std::endl;
};
icon->addItem(startItem);
// 显示图标
icon->show();使用 TrayManager
cpp
// 创建并注册图标
auto icon = TrayManager::instance().createIcon("main", "Wingman");
icon->show();
// 获取图标
auto icon = TrayManager::instance().getIcon("main");
// 移除图标
TrayManager::instance().removeIcon("main");注意事项
- 图标文件必须是 .ico 格式
- 菜单回调在 UI 线程执行,避免耗时操作
- 托盘图标需要在消息循环中响应,确保程序保持运行