c# 如何给托盘程序发送消息
时间: 2023-07-27 20:11:10 浏览: 84
可以使用 Windows API 中的 Shell_NotifyIcon 函数来给托盘程序发送消息。
首先需要定义一个 NOTIFYICONDATA 的结构体,用于传递托盘图标的信息。示例代码如下:
```
[StructLayout(LayoutKind.Sequential)]
public struct NOTIFYICONDATA
{
public int cbSize;
public IntPtr hWnd;
public int uID;
public int uFlags;
public int uCallbackMessage;
public IntPtr hIcon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szTip;
}
```
其中,cbSize 表示结构体的大小;hWnd 表示托盘程序的窗口句柄;uID 表示托盘图标的 ID;uFlags 表示托盘图标的属性;uCallbackMessage 表示托盘程序接收消息的消息 ID;hIcon 表示托盘图标的句柄;szTip 表示鼠标悬停在托盘图标上时显示的提示文本。
接下来,可以使用 Shell_NotifyIcon 函数来发送消息。示例代码如下:
```
[DllImport("shell32.dll", CharSet = CharSet.Auto)]
public static extern bool Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA pnid);
public const int NIM_ADD = 0x00000000;
public const int NIM_MODIFY = 0x00000001;
public const int NIM_DELETE = 0x00000002;
public const int WM_USER = 0x0400;
public const int WM_APP = 0x8000;
public void SendMessageToTray(int uID, int uMsg)
{
NOTIFYICONDATA nid = new NOTIFYICONDATA();
nid.cbSize = Marshal.SizeOf(nid);
nid.hWnd = this.Handle;
nid.uID = uID;
nid.uFlags = 0;
nid.uCallbackMessage = WM_USER + uMsg;
Shell_NotifyIcon(NIM_MODIFY, ref nid);
}
```
其中,dwMessage 参数表示要执行的操作,可以是 NIM_ADD(添加托盘图标)、NIM_MODIFY(修改托盘图标)或 NIM_DELETE(删除托盘图标);pnid 参数表示托盘图标的信息。在这个示例代码中,SendMessageToTray 方法用于向托盘程序发送消息,uID 参数表示托盘图标的 ID,uMsg 参数表示要发送的消息 ID。
注意,在使用 Shell_NotifyIcon 函数时,必须先将 NOTIFYICONDATA 结构体的 cbSize 字段设置为结构体的大小,以便系统识别结构体的大小。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)