【问题标题】:Shell_NotifyIcon in WinUI 3WinUI 3 中的 Shell_NotifyIcon
【发布时间】:2022-03-18 22:15:41
【问题描述】:

我正在尝试使用通知图标(系统托盘图标)构建 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# winapi notifyicon winui-3


【解决方案1】:

我知道在 WinUI 3 中以现成的 NuGet 库的形式对此进行了两种实现:

【讨论】:

  • 谢谢,这已经很有帮助了!您还创建了一个 WindowLess Example-App。这也可能在WinUI中吗?我还没有找到相当于 ShutDownMode :)
  • 目前没有什么意义。我还没有添加上下文菜单支持。你仍然可以这样做,你只需要不创建窗口,在应用程序的资源中声明一个 TaskbarIcon,并在 OnLaunched 中通过键显式调用它 - var taskbarIcon = Resources["TaskbarIcon"];
  • 我添加了简单的上下文菜单支持和 WinUI 无窗口示例应用程序:github.com/HavenDV/H.NotifyIcon/tree/master/src/apps/…
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2021-11-07
  • 2021-10-25
  • 2021-10-23
相关资源
最近更新 更多