windows API 创建系统托盘图标

创建带自定义右键菜单的Windows系统托盘图标 本文还有配套的精品资源,点击获取 简介:本开发项目演示了如何在Windows系统托盘区域添加自定义右键菜单功能,通过使用Visual Studio 2008和Win32 API。开发者上传了包含自定义注释的代码至优快云,以便初学者理解和学习实现系统托盘图标及右键菜单。项目涉及的知识点包括Win32 API的使用、消息处理机制、菜单创建与管理、资源管理以及可能用到的MFC库... 阅读详情

系统托盘在我们使用的程序中很普遍,下面我们来看一个很不错的例子,使用Win32 API实现,对理解系统托盘有些帮助。

#include <windows.h>
#define IDR_PAUSE 12
#define IDR_START 13
/*
#include <shellapi.h>
#pragma   comment(lib,   "shell32.lib") 
*/
LPCTSTR szAppName = TEXT("服务程序");
LPCTSTR szWndName = 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, szAppName);
		Shell_NotifyIcon(NIM_ADD, &nid);
		hmenu=CreatePopupMenu();//生成菜单
		AppendMenu(hmenu,MF_STRING,IDR_PAUSE,"暂停服务");//为菜单添加两个选项
		AppendMenu(hmenu,MF_STRING,IDR_START,"恢复服务");
		break;
	case WM_USER://连续使用该程序时候的消息.
		if (lParam == WM_LBUTTONDOWN)
			MessageBox(hwnd, TEXT("Win32 API 实现系统托盘程序,双击托盘可以退出!"), szAppName, 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);//显示菜单并获取选项ID
			if(xx==IDR_PAUSE) MessageBox(hwnd, TEXT("111"), szAppName, MB_OK);
			if(xx==IDR_START) MessageBox(hwnd, TEXT("222"), szAppName, 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 WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   LPSTR szCmdLine, int iCmdShow)
{
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;

	HWND handle = FindWindow(NULL, szWndName);
	if (handle != NULL)
	{
		MessageBox(NULL, TEXT("Application is already running"), szAppName, MB_ICONERROR);
		return 0;
	}

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hInstance = hInstance;
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = szAppName;

	if (!RegisterClass(&wndclass))
	{
		MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
		return 0;
	}

	// 此处使用WS_EX_TOOLWINDOW 属性来隐藏显示在任务栏上的窗口程序按钮
	hwnd = CreateWindowEx(WS_EX_TOOLWINDOW,
		szAppName, szWndName,
		WS_POPUP,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}


C#实现Windows托盘图标动态旋转示例 本文还有配套的精品资源,点击获取 简介:本示例展示了如何在C#中使用.NET Framework API在Windows系统托盘区域创建并动态旋转自定义图标。通过结合 System.Windows.Forms.NotifyIcon 类、 System.Windows.Forms.Timer 控件以及自定义 UserControl 绘... 阅读详情

相关推荐

Axure RP9汉化+授权全攻略:从下载到激活一步到位(附最新授权码)

本文提供Axure RP9从下载安装到界面汉化的完整指南,帮助设计师和产品经理快速上手这款原型设计工具。详细讲解了如何安全获取软件、执行汉化操作、理解核心界面布局,并介绍了创建交互原型和生成HTML文件的基础步骤,助力用户高效开展设计工作。

cuda7parallel的博客 1139

win32系统托盘图标,对vc编程很有帮助

很不错的一个例子,对理解系统托盘很有帮助,以后实验用得着的。 #include &lt;windows.h&gt; #define IDR_PAUSE 12 #define IDR_START 13 /* #include &lt;shellapi.h&gt; #pragma comment(lib, "shell32.lib") */ LPCTSTR szAppName...

weixin_34054931的博客 335

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 412

Win32 API 实现系统托盘程序

托盘程序就是运行在系统托盘区域的程序,显示为桌面右下角显示区域的一个小图标。通常托盘程序带有几种功能:托盘菜单,托盘图标,气泡提示,托盘提示。例如QQ收到消息后,会在系统右下角显示闪动QQ图标。 主程序Tray.cpp #include &lt;windows.h&gt; #include "resource.h" #define WM_TRAY (WM_USER + 100) #def...

ve12345的博客 1081

噪声整形与过采样实战:从N-bit ADC到DSM的SQNR优化指南

本文深入探讨了噪声整形与过采样技术在DSM(Delta-Sigma调制器)中的应用,重点分析了量化器位数(N)、滤波器阶数(L)和过采样率(OSR)对SQNR优化的影响。通过实战案例和参数协同优化策略,帮助工程师在音频处理和通信系统设计中实现更优的信号质量。

weixin_42561040的博客 339

ESP32 LVGL开发板例程使用记录:自制常用汉字字库(二)

1、将下载的文件移入工程文件中 ,路径为项目文件中 ”......\lib\lvgl\src\font“文件夹下。3、修改字库配置文件,文件名为lv_conf.h中的内容,向其中加入下面内容(位置可搜索注释块来找到地方)修改完成可以编译试试,看是否成功,如字库较大时编译出错,请使能:LV_FONT_FMT_TXT_LARGE。2、打开此文件,修改包含头文件的路径,不然会报错,修改方法可对照自己库中其他字库文件中的包含路径。导入完成后在VSCode工程中可以查看到此文件。上次说完了如何制作 字库.c 文件。

qq_43279097的博客 1956

C++ Win32创建托盘运行的程序

#include "stdafx.h" #include "StudyDuilib.h" #include <shellapi.h> HMENU hMenu; LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { NOTIFYICONDATA nid; UINT WM_TASKBARCREATED; POINT pt; int xx; // 不要修改TaskbarCrea.

wangyi463295828的博客 2390

高云FPGA开发实战:手把手教你用ModelSim做功能仿真与时序分析(附Testbench写法)

本文详细介绍了高云FPGA开发中如何使用ModelSim进行功能仿真与时序分析,包括环境搭建、Testbench编写、波形调试和时序优化等实战技巧。通过具体案例和代码示例,帮助开发者掌握FPGA仿真验证的核心方法,提升设计可靠性。特别针对高云GW5A系列器件提供了专业的仿真库配置指南和时序分析策略。

weixin_30412167的博客 466

Python实现将程序添加到Windows系统托盘+开始菜单+桌面快捷方式

亲测有效,小白过坑指南

2302_80197042的博客 2925

在Ubuntu 22.04上搞定CanFestival主站:从源码下载到SocketCAN配置的保姆级教程

本文提供在Ubuntu 22.04上配置CanFestival主站的详细教程,涵盖从源码下载、SocketCAN配置到实战测试的全过程。针对工业自动化领域的CANopen协议需求,介绍如何优化编译环境、解决常见问题,并通过虚拟CAN接口验证功能完整性。

weixin_29192365的博客 403

逻辑回归:利用Python实现二分类算法

通过使用Python编写的代码,我们可以训练逻辑回归模型并进行预测。接下来,我们将实现逻辑回归算法的训练函数。训练函数将接受训练数据集X和对应的标签y,以及学习率alpha和迭代次数num_iterations。训练完成后,我们可以使用训练得到的参数theta来进行预测。在这个例子中,我们有一个包含4个样本的训练数据集X,每个样本有两个特征。在这个例子中,如果预测概率大于等于0.5,则预测为类别1,否则预测为类别0。现在,我们可以使用训练函数来训练模型。根据给定的样本x_new,预测函数将返回相应的类别。

XlltEditor的博客 326

基于pywin32+tkinter构造托盘程序

思路 1.首先安装win32包,包括win32api等,具体方法自行百度 2.将自己的tkinter界面程序嵌入到main函数中,也就是注释中说明的'tkinter界面设定'部分 3.程序中有一些图标地址,可自行修改路径或者删去。 源码(亲测调通) import os import win32api import win32con import win32gui_struct impo...

马飞飞的博客 3848

OpenClaw 实战:7个真实场景的多 Agent 落地经验

《OpenClaw实战:7个真实场景的多Agent落地经验》摘要: 作者Maynor分享了从单Agent转向多Agent架构的实战经验。最初遇到的单Agent记忆混乱问题(如Flutter助手被C++话题干扰),通过拆分专项Agent(flutter-tutor/cpp-tutor等)并配置独立workspace解决。随后面临的技能调用混乱问题,采用"基础通用能力+专属能力"分层策略,通过Clawhub管理工具市场,将工具调用准确率从60%提升至95%。最后探讨多Agent协同方案,引入

Maynor的博客 1411

VC中使程序最小化到系统托盘区

//定义托盘图标结构体 NOTIFYICONDATA nid;  #define WM_ICONNOTIFY  WM_USER + 909 //图标响应消息(lParam) #define ID_TASKBARICON 100           //参数(wParam) //初始化系统托盘图标    void OnBtnMinimize()  {         //初始化

Joshua's SAP territory 2765

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++ Windows API 系统托盘

/ 函数之前的 Win32 系统兼容时,才需要此函数及其用法。// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)// 将实例句柄存储在全局变量中。// 函数: InitInstance(HINSTANCE, int)// 在此函数中,我们在全局变量中保存实例句柄并。// TODO: 在此添加任意绘图代码...// WM_COMMAND - 处理应用程序菜单。// WM_PAINT - 绘制主窗口。// TODO: 在此放置代码。

2502_92636479的博客 1131

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

推荐文章:pystray - 跨平台系统托盘图标解决方案

在众多的应用程序中,有一个功能虽小但极为实用——那就是系统托盘图标。它能够让应用优雅地驻留在用户的任务栏或通知区域,实现快速访问和状态提醒。而**pystray**正是这样一个专注于创建系统托盘图标的Python库,它让跨平台开发变得简单易行。无论是Linux下的Xorg、GNOME、Ubuntu,还是macOS以及Windows操作系统,pystray都能轻松应对,为开发者提供了一把解锁桌面集成

gitblog_00468的博客 640

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GUI 剖析之 系统托盘图标的实现

系统托盘图标的实现           #include #pragma comment(lib,"comctl32.lib")//导入库comctl32.lib #include #define ID_TASKBARICON 100 #define WM_ICONNOTIFY          (WM_USER + 101)     case WM_ICONNOTIFY:

在梦中享一刻静谧,等待梦中的你 684

Infi.systray:一款实用的Windows系统托盘图标开源项目

Infi.systray:一款实用的Windows系统托盘图标开源项目 Infi.systray 是一个开源项目,它允许开发者轻松地为Windows应用程序创建系统托盘图标和上下文菜单。该项目主要使用 Python 编程语言实现。 项目基础介绍 Infi.systray 是一个简单的Python库,旨在帮助开发者快速实现Windows系统托盘图标功能。它为开发者提供了一套易于使用的API,可以创建...

gitblog_00091的博客 465

MFC系统托盘的实现

怎么实现呢?这里需要运用到的Windows API函数: BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata );           函数了里面的参数对于实现不同的效果尤其重要,包括托盘图标、托盘菜单等等。那么我们来了解一下两个参数吧: dwMessage可以取以下值: NIM_ADD

安卓世界库 585

系统托盘编程完全指南(一)

原文 http://www.vckbase.com/document/viewdoc/?id=492 下载本文例子源代码 http://www.vckbase.com/code/downcode.asp?id=1717 自从Windows 95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱。使用系统托盘UI的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较

humanzt的专栏 458

系统托盘编程完全指南

自从Windows 95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱。使用系统托盘UI的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较系统地描述托盘应用的编程。并创建自己的C++类来增强系统托盘应用的特性。读完这些文章,再参照例子,相信读者能轻松自如地在自己

qq1134993111的专栏 1324

多平台任务栏指示器:一款跨平台的系统托盘图标库

多平台任务栏指示器:一款跨平台的系统托盘图标库 项目介绍 在软件开发中,我们经常需要为应用程序添加一个系统托盘图标,以便在不占用主屏幕空间的同时提供便捷的功能访问。Multi-platform Tray Indicator 是一个用 Rust 编写的库,它允许你在 Linux、Windows 和 macOS 系统上创建和管理这些系统托盘图标。这个项目特别强调其跨平台兼容性和易于使用的特性,尽管目前...

gitblog_00073的博客 545
上一篇: BYTE,WORD,DWORD的大小及一些特殊的"高低位宏"
下一篇: windows注册表 api
hhgo
博客等级 码龄15年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值