【发布时间】: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
}
我正在尝试处理父窗口中的回调。
如果您需要更多信息,我很乐意提供。这是我在这里的第二篇文章,所以我很新:)
【问题讨论】:
-
您可以get the
HWNDoff of aCoreWindow。我不知道这是否能让你更接近解决方案。我也不知道使用 WinUI3 或 Windows App SDK 的客户端可以使用多少原始消息调度。
标签: c# winapi notifyicon winui-3