خوش آمدید عزیز

ارسال نوتیفیکیشن ویندوز در پایتون


سلاااام:)

میتونم قسم بخورم که چندین بار سعی کردید که یک نوتیفیکیشنی رو ارسال کنید

این قسمه برای افرادی مثل اوناییه که میخوان پیام رسان و اینا بسازنا :)

ببینید ارسال نوتیفیکیشن کاری بود که نزدیک 5 ماه وقت منو گرفت ولی آخرش به این نتیجه رسیدم از این سایتای مختلف استفاده کنم برای ارسال نوتیفیکیشن

ولی یکم فکر کردم دیدم یه شرکتی مثل تلگرام که در ثانیه ممکنه هزار یا ده هزار نوتیفیکیشن ارسال کنه که با این کار ورشکست میشه؟؟

پس بازم گشتم و چند تا چیز پیدا کردم که کاملا بهتون یاد میدم چه طوری باید بفرستید :

  • استفاده از کتابخونه ساخته شده برای این کار :

برای اینکه این کار رو انجام بدیم به کتابخونه ای نیاز داریم به اسم win10toast

برای نصب این کتابخونه باید بزنید :

pip install win10toast

بعد از نصبش نیاز دارید که اون رو ایمپورت کنید . برای ارسال نوتیفیکیشن باید این قسمتش رو ایمپورت کنید :

from win10toast import ToastNotifier

بعد یک متغیری بسازید که اون چیزی که ایمپورت کردیم رو صدا کنه :

toast = ToastNotifier()

و بعد با استفاده از متغیرمون بیایم نوتیفیکیشن رو ارسال کنیم :

toast.show_toast("تایتل","متن نوتیفیکیشن",duration=20)

و duration اینجا زمانه. میتونید تغییرش بدید که بفهمید چه طوری کار میکنه .

فکر کنم بیشتر از 20 ثانیه نره اون مقدار هم.

بقیش هم کاملا مشخصه.

نکته : این اسمش برای ویندوز 10 هست ولی من آزمایش کردم روی ویندوز 7 هم جوابگو هست

سورس کامل یک نوتیفیکیشن ساده :

from win10toast import ToastNotifier
toast = ToastNotifier()
toast.show_toast("سلام","اين براي اونه",duration=20)

 

  • روش دوم : ارسال بدون کتابخانه خاص

برای این کار ما از این فایل استفاده میکنیم که سورسش هم اینجا گذاشتم :

# -- coding: utf-8 --
 
from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time
 
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.OnDestroy,
}
# Register the Window class.
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow( classAtom, "Taskbar", style,
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
0, 0, hinst, None)
UpdateWindow(self.hwnd)
iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, iconPathName,
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY,
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,
hicon, "Balloon tooltip",msg,200,title))
# self.show_balloon(title, msg)
time.sleep(10)
DestroyWindow(self.hwnd)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0) # Terminate the app.
 
def balloon_tip(title, msg):
w=WindowsBalloonTip(title, msg)

برای استفاده از این باید حتما این رو بزاریم توی کدهامون و بعد به این صورت نوتیفیکیشن رو ارسال کنیم :

balloon_tip("تايتل", "متن نوتيفيکيشن")

چیزاش مشخصه چه طوریه

سورس کامل ارسال نوتیفیکیشن روش دوم :

from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time

class WindowsBalloonTip:
    def __init__(self, title, msg):
        message_map = {
                win32con.WM_DESTROY: self.OnDestroy,
        }
        # Register the Window class.
        wc = WNDCLASS()
        hinst = wc.hInstance = GetModuleHandle(None)
        wc.lpszClassName = "PythonTaskbar"
        wc.lpfnWndProc = message_map # could also specify a wndproc.
        classAtom = RegisterClass(wc)
        # Create the Window.
        style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
        self.hwnd = CreateWindow( classAtom, "Taskbar", style,
                0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
                0, 0, hinst, None)
        UpdateWindow(self.hwnd)
        iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
        icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
        try:
           hicon = LoadImage(hinst, iconPathName,
                    win32con.IMAGE_ICON, 0, 0, icon_flags)
        except:
          hicon = LoadIcon(0, win32con.IDI_APPLICATION)
        flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
        nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
        Shell_NotifyIcon(NIM_ADD, nid)
        Shell_NotifyIcon(NIM_MODIFY,
                         (self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,
                          hicon, "Balloon  tooltip",msg,200,title))
        # self.show_balloon(title, msg)
        time.sleep(10)
        DestroyWindow(self.hwnd)
    def OnDestroy(self, hwnd, msg, wparam, lparam):
        nid = (self.hwnd, 0)
        Shell_NotifyIcon(NIM_DELETE, nid)
        PostQuitMessage(0) # Terminate the app.

def balloon_tip(title, msg):
    w=WindowsBalloonTip(title, msg)

if __name__ == '__main__':
    balloon_tip("تايتل", "متن نوتيفيکيشن")

 

چند تا عکس : 

وین 10 :

https://i.stack.imgur.com/DuWIc.png

 

فقط وین 10 رو عکسش رو از خودشون برداشتم D:

موفق باشید و سوالی داشتید حتما بپرسید

 

Name

Email