我遇到了zroya,它是Windows 10通知的包装器。我注意到它还为每个新通知创建了一个空的托盘图标,所以我一直在尝试将其与my existing tray icon code合并,希望它能解决这个问题。
不幸的是,现在我添加了基本功能,我发现它没有,并且想知道是否有人可以分享我可以做的任何提示。
我认为引起问题的代码部分就是这个,每次创建通知时都会调用它:
nid = (self.hwnd, notification_id, flags, win32con.WM_USER + 1, icon, 'Tooltip')
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, (
self.hwnd, notification_id, win32gui.NIF_INFO,
win32con.WM_USER + 1,
icon,
'Tooltip',
message,
0,
title,
additional_flags
))
这是我创建我想要使用的实际托盘图标的方式,它非常相似,但没有传入通知ID:
flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER + 20, hicon, self.program_name)
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
如果我删除通知代码的前两行,并将notification_id
更改为0
,那么它会修复该特定问题,而不是通知事件(WM_USER+1
),它在托盘图标事件(WM_USER+20
)下运行。我检查了l_param
对win32con
的ID,发现以这种方式触发的唯一事件是绘制矩形,所以我无法运行任何回调函数。
我主要是通过试验和错误来解决这个问题,因为两个代码都非常相似,而且我没有使用Windows API,但这一点让我感到难过。我不建议看起来像是一团糟,但这是我merge attempt的当前阶段。回调正在运行,但只能使用单独的托盘图标。