使用win32gui和python将自定义图标设置为气球工具提示?

时间:2016-06-15 08:42:13

标签: python windows notifications win32gui

我在其他语言中看到过很多帖子和问题,主要是C#,但不是在python中。

我正在使用Windows 10,在创建气球工具提示通知时,我使用的自定义图标显示模糊,并且周围有黑色字段,我尝试使用不同的图标,具有不同的图像高度和宽度并没有帮助,也没有帮助使用图像.ico或.png等。

我所看到的所有使用自定义图标都是关于使用我在win32gui documentation中看不到的选项或者扩展工具提示图标类,我认为你不能通过python做这些。

在另一个问题中有人说你必须使用完整路径而不是使用os.path来获取完整路径,但这没有帮助。

这是我的代码的一部分,我设置图标的部分:

        win32gui.UpdateWindow(self.hwnd)
        icon_path_name = os.path.abspath(os.path.join(sys.path[0],
                                                      "notif.ico"))
        icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
        try:
            hicon = win32gui.LoadImage(hinst, icon_path_name,
                                       win32con.IMAGE_ICON, 0, 0, icon_flags)
        except:
            hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
        flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP
        nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip1")
        win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
        win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY,
                                  (self.hwnd, 0, win32gui.NIF_INFO,
                                   win32con.WM_USER+20, hicon,
                                   "Notification", msg, 200, title))

1 个答案:

答案 0 :(得分:0)

要使用用户提供的图标作为通知弹出窗口(最近版本的Windows中气球工具提示的后续版本),在NOTIFYICONDATA中将图标句柄照常放在hIcon中,并放置一个您的NIIF_USER中的值为{dwInfoFlags}:

NIIF_USER = 4
# ...

win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY,
                                  (self.hwnd, 0, win32gui.NIF_INFO,
                                   win32con.WM_USER+20, hicon,
                                   "Notification", msg, 200, title, NIIF_USER))

docs for NOTIFYINFODATA

我不确定什么是模糊和&背景问题是;我可以建议的是确保图标文件中的位图具有适当的alpha蒙版,并且您希望系统托盘中有32x32位图,气球工具提示窗口需要更大的位图,并调整您的必要时icon_flags