c# - WinUI 3 中的 Shell_NotifyIcon
问题描述
我正在尝试使用通知图标(系统托盘图标)构建 WinUI 3 应用程序。因此我使用的是 Win32-Api:https ://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shell_notifyicona
到目前为止,我的图标可以正常工作,但知道我正在尝试在其上获取上下文菜单。我找到了它的示例,但都使用了 Windows 窗体(如 Github Project EarTrumpet)。我找不到处理回调的解决方案。(类似于 WndProc 方法)
到目前为止,这是我的代码:
public void NotifyIcon(IntPtr parent)
{
var _data = new NotifyIconData();
_data.cbSize = Marshal.SizeOf(typeof(NotifyIconData));
_data.uID = 1;
_data.uFlags = 0x8 | 0x2 | 0x1; //NIF_STATE | NIF_ICON | NIF_MESSAGE
_data.dwState = 0x0;
_data.hIcon = SystemIcons.Information.Handle;
_data.hWnd = parent;
_data.uCallbackMessage = 0x5700;
Shell_NotifyIcon(0x0, ref _data);
}
struct NotifyIconData
{
public System.Int32 cbSize;
public System.IntPtr hWnd; // HWND
public System.Int32 uID; // UINT
public System.Int32 uFlags; // UINT
public System.Int32 uCallbackMessage; // UINT
public System.IntPtr hIcon; // HICON
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public System.String szTip; // char[128]
public System.Int32 dwState; // DWORD
public System.Int32 dwStateMask; // DWORD
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public System.String szInfo; // char[256]
public System.Int32 uTimeoutOrVersion; // UINT
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public System.String szInfoTitle; // char[64]
public System.Int32 dwInfoFlags; // DWORD
public Guid guidItem;
public IntPtr hBalloonIcon; //HIcon
}
我试图在父窗口中处理回调。
如果您需要更多信息,我很乐意提供。这是我在这里的第二篇文章,所以我很新:)
解决方案
推荐阅读
- c# - 如何读取没有一些文本的文本文件
- go - Go generics:是否可以嵌入泛型结构?
- visual-studio-code - 在 Rust 和 VSCode 的新行中继续 Docstring
- kubernetes-pvc - 使用卷的 pvc 标签创建 pod
- sql-server - 增加数据库服务器日志文件的大小
- javascript - 如何将 API 结果显示在屏幕上?
- laravel - 如何使用 OR 代码处理 where 括号?
- joomla - 可自定义字段未保存到 Joomla 中的数据库中
- mysql - 用户使用类似查询的 sql 搜索多个值
- python - Tabula-py:输出文件为空