Есть ли способ отключить звук уведомлений в библиотеке python win10toast? - PullRequest
0 голосов
/ 21 июня 2019

Я использую win10toast, чтобы сделать всплывающее уведомление для Windows. Есть ли способ сделать уведомление молчанием? Другими словами, можно ли отключить звук для создаваемого уведомления? Можно ли альтернативно изменить звук?

Редактировать: добавлен пример кода

Мой пример кода:

from win10toast import ToastNotifier


toaster = ToastNotifier()
for i in range(0,70000000):
    pass
toaster.show_toast("Hey User",
                   "The program is running pretty well. You should try to disable audio on me next though!",
                   icon_path=None,
                   duration=5)

1 Ответ

0 голосов
/ 20 июля 2019

Вы должны изменить исходный код библиотеки, чтобы сделать это.Перейдите в папку, в которую была установлена ​​библиотека, и откройте файл «__init__.py».Вверху, после того, как все импорта "win32gui" помещены, напишите from win32gui import NIIF_NOSOUND.

После этого перейдите к строке 107, и вы должны увидеть этот фрагмент кода:

Shell_NotifyIcon(NIM_MODIFY, (self.hwnd, 0, NIF_INFO,
                                  WM_USER + 20,
                                  hicon, "Balloon Tooltip", msg, 200,
                                  title))

Послепараметр "title", поставьте "NIIF_NOSOUND", он должен выглядеть следующим образом:

Shell_NotifyIcon(NIM_MODIFY, (self.hwnd, 0, NIF_INFO,
                                  WM_USER + 20,
                                  hicon, "Balloon Tooltip", msg, 200,
                                  title, NIIF_NOSOUND))

Если вы хотите сделать это в качестве альтернативы, вы должны дополнительно изменить исходный код, вы можете добавить новый аргумент в show_toast метод.Примерно так:

# line 121
def show_toast(self, title="Notification", msg="Here comes the message",
                icon_path=None, duration=5, threaded=False, sound=False):

А также дополнительно отправьте параметр "sound":

 # line 130
 if not threaded:
     self._show_toast(title, msg, icon_path, duration, sound)
 else:
     if self.notification_active():
         # We have an active notification, let is finish so we don't spam them
         return False

     self._thread = threading.Thread(target=self._show_toast, args=(title, msg, icon_path, duration, sound))
     self._thread.start()
 return True

Затем добавьте аргумент в метод "hidden" _show_toast:

# line 63
def _show_toast(self, title, msg,
                icon_path, duration, sound):

И сделайте оператор if else, чтобы проверить, нужно ли добавлять флаг «NIIF_NOSOUND»:

# line 107
Shell_NotifyIcon(NIM_ADD, nid)
data = (self.hwnd, 0, NIF_INFO,
            WM_USER + 20,
            hicon, "Balloon Tooltip", msg, 200,
            title)
if not sound:
    data = data + (NIIF_NOSOUND,)
Shell_NotifyIcon(NIM_MODIFY, data)

Этот параметр ожидает комбинацию InfoFlags, которые изменяют поведение и внешний вид уведомления.Узнайте больше о NIIF_NOSOUND флаге и других флагах.Здесь вы можете увидеть, какие флаги «NIIF» доступны в документации «pywin32» pywin32 .

Подробнее о параметрах функции Shell_NotifyIcon можно узнать здесь pywin32 Shell_NotifyIcon .

Второй параметр функции Shell_NotifyIcon - это кортеж, представляющий объект "PyNOTIFYICONDATA", который принимает различные параметры, подробнее об этом объекте можно узнать здесь pywin32 PyNOTIFYICONDATA .

Примечание: это работало для меня в Windows 10.

...