当前位置: 首页 > news >正文

vs2010 win32做成后台常驻和系统托盘

1. 定义托盘消息和托盘图标 ID

vswinapp.cpp顶部加:

#include <shellapi.h> #define WM_TRAYICON (WM_USER + 1) #define ID_TRAY_EXIT 1001 #define ID_TRAY_SHOW 1002 NOTIFYICONDATA g_nid;

2. 添加托盘图标函数

放到WndProc前面:

void AddTrayIcon(HWND hWnd) { memset(&g_nid, 0, sizeof(g_nid)); g_nid.cbSize = sizeof(NOTIFYICONDATA); g_nid.hWnd = hWnd; g_nid.uID = 1; g_nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; g_nid.uCallbackMessage = WM_TRAYICON; g_nid.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_VSPRINTPLOT)); _tcscpy_s(g_nid.szTip, _T("vsprintplot 后台运行中")); Shell_NotifyIcon(NIM_ADD, &g_nid); } void RemoveTrayIcon() { Shell_NotifyIcon(NIM_DELETE, &g_nid); }

3. 启动时加入托盘

修改InitInstance()

找到:

ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);

改成:

ShowWindow(hWnd, SW_HIDE); // 启动隐藏 UpdateWindow(hWnd); AddTrayIcon(hWnd);

这样程序启动后不显示窗口,只在托盘运行。


4. 修改关闭按钮行为(不退出,只隐藏)

WndProc()中添加:

case WM_CLOSE: ShowWindow(hWnd, SW_HIDE); return 0;

5. 处理托盘点击事件

WndProc()里加:

case WM_TRAYICON: { if (lParam == WM_LBUTTONDBLCLK) { // 双击托盘图标显示窗口 ShowWindow(hWnd, SW_SHOW); SetForegroundWindow(hWnd); } else if (lParam == WM_RBUTTONUP) { // 右键菜单 POINT pt; GetCursorPos(&pt); HMENU hMenu = CreatePopupMenu(); AppendMenu(hMenu, MF_STRING, ID_TRAY_SHOW, _T("显示")); AppendMenu(hMenu, MF_STRING, ID_TRAY_EXIT, _T("退出")); SetForegroundWindow(hWnd); TrackPopupMenu( hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL); DestroyMenu(hMenu); } } break;

6. 处理托盘菜单命令

修改WM_COMMAND

加入:

case ID_TRAY_SHOW: ShowWindow(hWnd, SW_SHOW); SetForegroundWindow(hWnd); break; case ID_TRAY_EXIT: DestroyWindow(hWnd); break;

7. 退出时删除托盘图标

修改:

case WM_DESTROY: PostQuitMessage(0); break;

改为:

case WM_DESTROY: RemoveTrayIcon(); PostQuitMessage(0); break;

如果想开机自动启动并后台常驻,再加注册表。然后在:InitInstance()里调用:SetAutoRun();即可。这样电脑开机后自动在后台运行。

void SetAutoRun()
{
HKEY hKey;

if (RegOpenKeyEx(
HKEY_CURRENT_USER,
_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0,
KEY_SET_VALUE,
&hKey) == ERROR_SUCCESS)
{
TCHAR path[MAX_PATH];

GetModuleFileName(NULL, path, MAX_PATH);

RegSetValueEx(
hKey,
_T("vswinapp"),
0,
REG_SZ,
(BYTE*)path,
(_tcslen(path) + 1) * sizeof(TCHAR));

RegCloseKey(hKey);
}
}

http://www.jsqmd.com/news/866965/

相关文章:

  • Windows curl证书错误SEC_E_UNTRUSTED_ROOT解决方案
  • 中国工业新闻网:罗兰艺境:中国B2B制造业GEO市占率48%,覆盖80+行业、60+世界500强,复购率98% - 罗兰艺境GEO
  • PC微信小程序wxapkg解包原理与七步可执行逆向流程
  • DM8 dexp/dimp 逻辑导入导出
  • CyberChef:如何在浏览器中实现400+种数据操作的终极解决方案
  • 基于Nuclei的自动化漏洞监测告警平台
  • PyTorch DataLoader 内存不足怎么办?教你一招避坑
  • Pikachu靶场搭建与Web渗透实战指南
  • 2026年5月最新太原黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • Windows下curl报SEC_E_UNTRUSTED_ROOT的5种正确解决方法
  • DeepSeek API接入全链路实战:从注册到高并发部署的7个关键步骤
  • 魔兽争霸III终极优化指南:5步解决宽屏黑边、FPS限制与地图加载问题
  • 微信小程序wxapkg文件结构解析与源码还原实战
  • 2026年5月最新鹤壁黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • 【LangGraph】House_Agent 实战(一):架构与环境配置
  • 从0到1的开源入门实战指南
  • 2026 北京本土口碑好 GEO 优化公司权威 TOP10 排名,含北京服务商选型指南 +FAQ - 资讯纵览
  • 服务器禁Ping实战指南:5种生产环境验证的ICMP过滤方法
  • Next.js授权绕过漏洞CVE-2025-29927深度解析
  • 2026年5月最新泰安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • Unity TextMeshPro中文与特殊字符显示为方块的终极解决方案
  • 2026年5月最新鹤岗黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • Unity卡牌翻转与翻书效果实现原理与性能优化
  • 2026沧州灶台贴膜,专业团队这样选才靠谱 - 品牌企业推荐师(官方)
  • Next.js App Router权限绕过漏洞CVE-2025-29927深度解析
  • 宿迁黄金回收正规门店盘点|恒顺、金佑福领衔,全城 20 分钟可达 - 资讯纵览
  • 让老Mac焕发新生:OpenCore Legacy Patcher完整升级指南
  • 2026年5月最新泰州黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 检测回收中心
  • Windows热键冲突终极指南:如何用Hotkey Detective一键定位占用程序
  • 普宁月子中心收费标准|套餐里到底包含哪些项目 - 品牌观察