#include <windows.h>#define IDR_PAUSE 12
#define IDR_START 13
LPCTSTR szAppClassName  = TEXT("服务程序");
LPCTSTR szAppWindowName = TEXT("服务程序");
HMENU hmenu;//菜单句柄LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{NOTIFYICONDATA nid;UINT WM_TASKBARCREATED;POINT pt;//用于接收鼠标坐标int xx;//用于接收菜单选项返回值// 不要修改TaskbarCreated,这是系统任务栏自定义的消息WM_TASKBARCREATED = RegisterWindowMessage(TEXT("TaskbarCreated"));switch (message){case WM_CREATE://窗口创建时候的消息.nid.cbSize = sizeof(nid);nid.hWnd = hwnd;nid.uID = 0;nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;nid.uCallbackMessage = WM_USER;nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);lstrcpy(nid.szTip, szAppClassName);Shell_NotifyIcon(NIM_ADD, &nid);hmenu=CreatePopupMenu();//生成菜单AppendMenu(hmenu,MF_STRING,IDR_PAUSE,L"暂停服务");//为菜单添加两个选项AppendMenu(hmenu,MF_STRING,IDR_START,L"关于");break;case WM_USER://连续使用该程序时候的消息.if (lParam == WM_LBUTTONDOWN)MessageBox(hwnd, TEXT("Win32 API 实现系统托盘程序,双击托盘可以退出!"), szAppClassName, MB_OK);if (lParam == WM_LBUTTONDBLCLK)//双击托盘的消息,退出.SendMessage(hwnd, WM_CLOSE, wParam, lParam);if (lParam == WM_RBUTTONDOWN){GetCursorPos(&pt);//取鼠标坐标::SetForegroundWindow(hwnd);//解决在菜单外单击左键菜单不消失的问题EnableMenuItem(hmenu,IDR_PAUSE,MF_GRAYED);//让菜单中的某一项变灰xx=TrackPopupMenu(hmenu,TPM_RETURNCMD,pt.x,pt.y,NULL,hwnd,NULL);//显示菜单并获取选项IDif(xx==IDR_PAUSE) MessageBox(hwnd, TEXT("111"), szAppClassName, MB_OK);if(xx==IDR_START) MessageBox(hwnd, TEXT("222"), szAppClassName, MB_OK);if(xx==0) PostMessage(hwnd,WM_LBUTTONDOWN,NULL,NULL);//MessageBox(hwnd, TEXT("右键"), szAppName, MB_OK);}break;case WM_DESTROY://窗口销毁时候的消息.Shell_NotifyIcon(NIM_DELETE, &nid);PostQuitMessage(0);break;default:/** 防止当Explorer.exe 崩溃以后,程序在系统系统托盘中的图标就消失** 原理:Explorer.exe 重新载入后会重建系统任务栏。当系统任务栏建立的时候会向系统内所有* 注册接收TaskbarCreated 消息的顶级窗口发送一条消息,我们只需要捕捉这个消息,并重建系* 统托盘的图标即可。*/if (message == WM_TASKBARCREATED)SendMessage(hwnd, WM_CREATE, wParam, lParam);break;}return DefWindowProc(hwnd, message, wParam, lParam);
}int main()
{HWND hwnd;MSG msg;WNDCLASS wndclass;HWND handle = FindWindow(NULL, szAppWindowName);if (handle != NULL){MessageBox(NULL, TEXT("Application is already running"), szAppClassName, MB_ICONERROR);return 0;}wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = NULL;wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = szAppClassName;if (!RegisterClass(&wndclass)){MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppClassName, MB_ICONERROR);return 0;}// 此处使用WS_EX_TOOLWINDOW 属性来隐藏显示在任务栏上的窗口程序按钮hwnd = CreateWindowEx(WS_EX_TOOLWINDOW,szAppClassName, szAppWindowName,WS_POPUP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, NULL, NULL);ShowWindow(hwnd, 0);UpdateWindow(hwnd);//消息循环while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

创建windows系统托盘应用程序相关推荐

  1. QT系统托盘应用程序

    在QT中QSystemTrayIcon类提供了创建系统托盘程序的功能. QSystemTrayIcon类为系统托盘中的应用程序提供图标. 现代操作系统通常会在桌面上提供一个称为系统托盘(system ...

  2. 系统镜像_如何通过云服务器创建Windows系统镜像

    系统盘镜像是包含用户运行业务所需的操作系统.应用软件的镜像. 用户可以通过已安装Windows操作系统的云服务器来创建Windows系统盘镜像. 本指南以创建Windows系统盘镜像为例,指导您通过云 ...

  3. Windows系统及应用程序的安装设置

    Windows最大的问题就是默认所有缓存,应用程序及用户空间都存放在系统盘中.导致系统盘膨胀很快,甚至到容纳不下的程度.下面总结使用经验. 1.vs code缓存设置 vs code安装时可以选择安装 ...

  4. 关于Windows系统白名单程序(自动提权autoElevate)

    参考资料: https://technet.microsoft.com/zh-cn/magazine/2009.07.uac.aspx http://withinwindows.com/blog/20 ...

  5. windows系统托盘及托盘菜单

    window系统托盘及托盘菜单 下面是一个MFC写的wifi助手程序用于实现系统托盘的代码片段 void CWiFiAssistantDlg::OnClose() {  // TODO: 在此添加消息 ...

  6. windows系统托盘tray

    electron tray是一种方法. Add icons and context menus to the system's notification area. python调用win32api也 ...

  7. opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序

    OpenCV提供了一些基本的Webcam控制接口.用OpenCV C/C++或者Python,可以在任意平台快速创建一个摄像头预览应用.然而使用Java,情况就复杂的多,因为OpenCV Java并没 ...

  8. Windows系统提示应用程序无法正常启动(0xc0000142)解决方法

    在Windows中应用程序无法正常启动,显示错误代码0xc0000142,造成的原因通常是因为部分DLL文件未能被系统注册,导致动态库调用错误. 解决方法: 方法一: 在搜索框中输入"msc ...

  9. Windows系统托盘

    _NOIFYICONDATA结构体 //系统定义的结构体 typedef struct _NOTIFYICONDATA{DWORD cbSize;//以字节为单位的结构体大小HWND hWnd;//接 ...

最新文章

  1. IBM Cloud Speech to Text 语音识别
  2. jboss 7 as1 日志配置
  3. 李湘确逢“第二春” 1月已再婚11月便当妈(图)
  4. Table control中列隐藏实现方法
  5. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
  6. 查看linux显示文件大小,Linux下查看占用最大的文件和文件夹大小
  7. 学C/C++语言,32个必备修养!
  8. 分而治之_播放框架模块:分而治之
  9. element el-table加入固定列时 滚动条无法移动 失效的情况
  10. java 子类必须实现_Java学习之接口的子类必须实现接口的全部方法吗?
  11. 霍兰德教育CEO被曝卷钱逃回英国 欠款超千万
  12. About 日常生活感想
  13. Mac系统如何删除.DS_Store文件且不再生
  14. 北京飞马贸易借沟通CTBS实现总部与分公司同步做帐
  15. 斯皮尔曼相关系数计算的python代码
  16. 传感器技术—湿敏电阻式传感器(学习笔记五)
  17. 不开心就玩消消乐~~~正则表达式(1)
  18. jvm(一.基础入门)
  19. 蓝桥杯的比赛流程和必考点
  20. 河南python培训班

热门文章

  1. 支付宝支付、支付宝单笔转账-----后端综合集成
  2. (一)MkDocs 学习——快速开始
  3. android h xh xxh 分辨率,同步带(橡胶)[MXL、XL、L、H、XH、XXH]
  4. 【vue】html页面怎么设置页签图标?比如B站是个小电视的图标的效果
  5. 数字孪生技术研究综述
  6. 嵌入式软件开发工程师各个方向都有
  7. 机房监控系统标准和常见故障
  8. Altium Designer:AD绘制板边框之任意倒角
  9. 瓜子二手车html模板,以瓜子二手车为例,UI设计从C端到B端
  10. MOS管基本原理(整理)