Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Balloon tip module, Python, using win32gui.
# -- 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",title,200,msg))
# 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(msg, title)
@chriskiehl

This comment has been minimized.

Copy link

commented Aug 15, 2012

Awesome! Just the thing I was looking for!

@clippit

This comment has been minimized.

Copy link

commented Aug 27, 2012

Thanks! But why * missed on L3-4 and __init__ shows incorrectly?

@boppreh

This comment has been minimized.

Copy link

commented Nov 2, 2012

Title and msg seem swapped, too, and there's a typo in the main function name ( ballon ). I've forked this Gist with the corrections: https://gist.github.com/4000505

@brousch

This comment has been minimized.

Copy link

commented Sep 11, 2013

I PEPped up @boppreh's version a bit and fixed the "no 2nd notification" issue that @endolith reported. It still has one issue, which is that only one notification at a time can display, so if a 2nd notification is attempted before the 1st has finished, the 2nd is ignored. https://gist.github.com/brousch/6523559

@endolith

This comment has been minimized.

@davidcorbin

This comment has been minimized.

Copy link

commented Nov 21, 2015

Ayy great in Windows 10!

@Thomas-Rudge

This comment has been minimized.

Copy link

commented Dec 1, 2015

Hi, this looks really great. But in windows 10 the notification does not persist in the action center. And if I try to call balloon_tip more than once I get an error:

Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
  File "C:\Users\Lenovo\Documents\Python\temp.py", line 54, in balloon_tip
    w=WindowsBalloonTip(msg, title)
  File "C:\Users\Lenovo\Documents\Python\temp.py", line 26, in __init__
    classAtom = RegisterClass(wc)
pywintypes.error: (1410, 'RegisterClass', 'Class already exists.')
@DarkRedman

This comment has been minimized.

Copy link

commented Jan 2, 2016

It doesn't work, I get an error.

from win32api import *
ImportError: DLL load failed: %1 is not a Win32 valid application.

@aswinpj

This comment has been minimized.

Copy link

commented Mar 29, 2016

How do I change the Icon on the balloon tip? It doesnt work even after adding a .ico file by the name balloontip.ico on the root directory.

@Aanand-Kainth

This comment has been minimized.

Copy link

commented Jun 9, 2016

Can somebody please fork a copy in which notifications are persistent? I know this would include registering the program outside of the class, and unregistering it with with atexit, but I am unable to do so myself.

@deeman30rus

This comment has been minimized.

Copy link

commented Aug 17, 2016

thanks man, that worked for me!

@abhijeetsc

This comment has been minimized.

Copy link

commented Mar 12, 2017

when I am running the same code I am not getting any type of notification only.
I am using Python 3.5 on Windows 10.

@jithurjacob

This comment has been minimized.

Copy link

commented May 29, 2017

Hi guys, I've created this as an easy to use package

https://github.com/jithurjacob/Windows-10-Toast-Notifications

@guyverone

This comment has been minimized.

Copy link

commented Jun 27, 2017

here to say thank you.

@danielfain

This comment has been minimized.

Copy link

commented Mar 23, 2018

Works great on Windows 10. Thanks man!

@imachug

This comment has been minimized.

Copy link

commented Sep 1, 2018

In case you have "win32api" module missing, try pip install pypiwin32.

@frakman1

This comment has been minimized.

Copy link

commented Nov 27, 2018

To use this feature, you would write code like this:

import balloontip as bt

bt.balloon_tip("My Title", "My Message")

and get something that looks like this (on Windows 7):

image

@vineethpisvas1

This comment has been minimized.

Copy link

commented Nov 30, 2018

Can anyone please tell me how to add a click bind to this notification. I want to open a website or do some task on the click and I am not able to bind it in the message map. Please help!

@vineethpisvas1

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.