在python中赢得10个通知,每个通知都没有新的托盘图标

2024-09-27 09:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了zroya,它是windows10通知的包装器。我注意到它还为每个新通知创建了一个空托盘图标,所以我尝试将它与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)下运行。我检查了ID的l_param值和win32con,发现这种方式触发的事件只与绘制矩形有关,因此无法运行任何回调函数。你知道吗

我主要是通过试验和错误来实现这一点,因为这两段代码非常相似,而且我不熟悉windowsapi,但这段代码让我很困惑。我不建议你看起来一团糟,但这是我的merge attempt的当前阶段。回调正在工作,但只与单独的托盘图标。你知道吗


Tags: 代码selfidnotificationshell图标flagsnif

热门问题