首页 > 解决方案 > 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#winapinotifyiconwinui-3

解决方案


推荐阅读