| 1 |
ninoborges |
8 |
## Creates a task-bar icon. Run from Python.exe to see the
|
| 2 |
|
|
## messages printed.
|
| 3 |
|
|
##EBorges
|
| 4 |
|
|
##05.08.03
|
| 5 |
|
|
|
| 6 |
|
|
|
| 7 |
|
|
import win32api, win32con, win32gui
|
| 8 |
|
|
|
| 9 |
|
|
class Taskbar:
|
| 10 |
|
|
def __init__(self):
|
| 11 |
|
|
self.visible = 0
|
| 12 |
|
|
message_map = {
|
| 13 |
|
|
win32con.WM_DESTROY: self.onDestroy,
|
| 14 |
|
|
win32con.WM_USER+20 : self.onTaskbarNotify,
|
| 15 |
|
|
}
|
| 16 |
|
|
# Register the Window class.
|
| 17 |
|
|
wc = win32gui.WNDCLASS()
|
| 18 |
|
|
hinst = wc.hInstance = win32api.GetModuleHandle(None)
|
| 19 |
|
|
wc.lpszClassName = "PythonTaskbarDemo"
|
| 20 |
|
|
wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;
|
| 21 |
|
|
wc.hCursor = win32gui.LoadCursor( 0, win32con.IDC_ARROW )
|
| 22 |
|
|
wc.hbrBackground = win32con.COLOR_WINDOW
|
| 23 |
|
|
wc.lpfnWndProc = message_map # could also specify a wndproc.
|
| 24 |
|
|
classAtom = win32gui.RegisterClass(wc)
|
| 25 |
|
|
# Create the Window.
|
| 26 |
|
|
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
|
| 27 |
|
|
self.hwnd = win32gui.CreateWindow( classAtom, "Taskbar Demo", style, \
|
| 28 |
|
|
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
|
| 29 |
|
|
0, 0, hinst, None)
|
| 30 |
|
|
win32gui.UpdateWindow(self.hwnd)
|
| 31 |
|
|
|
| 32 |
|
|
def setIcon(self, hicon, tooltip=None):
|
| 33 |
|
|
self.hicon = hicon
|
| 34 |
|
|
self.tooltip = tooltip
|
| 35 |
|
|
|
| 36 |
|
|
def show(self):
|
| 37 |
|
|
"""Display the taskbar icon"""
|
| 38 |
|
|
flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE
|
| 39 |
|
|
if self.tooltip is not None:
|
| 40 |
|
|
flags |= win32gui.NIF_TIP
|
| 41 |
|
|
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, self.hicon, self.tooltip)
|
| 42 |
|
|
else:
|
| 43 |
|
|
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, self.hicon)
|
| 44 |
|
|
if self.visible:
|
| 45 |
|
|
self.hide()
|
| 46 |
|
|
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
|
| 47 |
|
|
self.visible = 1
|
| 48 |
|
|
|
| 49 |
|
|
def hide(self):
|
| 50 |
|
|
"""Hide the taskbar icon"""
|
| 51 |
|
|
if self.visible:
|
| 52 |
|
|
nid = (self.hwnd, 0)
|
| 53 |
|
|
win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)
|
| 54 |
|
|
self.visible = 0
|
| 55 |
|
|
|
| 56 |
|
|
def onDestroy(self, hwnd, msg, wparam, lparam):
|
| 57 |
|
|
self.hide()
|
| 58 |
|
|
win32gui.PostQuitMessage(0) # Terminate the app.
|
| 59 |
|
|
|
| 60 |
|
|
def onTaskbarNotify(self, hwnd, msg, wparam, lparam):
|
| 61 |
|
|
if lparam == win32con.WM_LBUTTONUP:
|
| 62 |
|
|
self.onClick()
|
| 63 |
|
|
elif lparam == win32con.WM_LBUTTONDBLCLK:
|
| 64 |
|
|
self.onDoubleClick()
|
| 65 |
|
|
return 1
|
| 66 |
|
|
|
| 67 |
|
|
def onClick(self):
|
| 68 |
|
|
"""Override in subclassess"""
|
| 69 |
|
|
pass
|
| 70 |
|
|
|
| 71 |
|
|
def onDoubleClick(self):
|
| 72 |
|
|
"""Override in subclassess"""
|
| 73 |
|
|
pass
|
| 74 |
|
|
|
| 75 |
|
|
|
| 76 |
|
|
if __name__=='__main__':
|
| 77 |
|
|
class DemoTaskbar(Taskbar):
|
| 78 |
|
|
|
| 79 |
|
|
def __init__(self):
|
| 80 |
|
|
Taskbar.__init__(self)
|
| 81 |
|
|
icon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
|
| 82 |
|
|
message = "Hey Fritz!"
|
| 83 |
|
|
self.setIcon(icon,message)
|
| 84 |
|
|
self.show()
|
| 85 |
|
|
|
| 86 |
|
|
def onClick(self):
|
| 87 |
|
|
print "you clicked"
|
| 88 |
|
|
|
| 89 |
|
|
def onDoubleClick(self):
|
| 90 |
|
|
print "you double clicked, bye!"
|
| 91 |
|
|
win32gui.PostQuitMessage(0)
|
| 92 |
|
|
|
| 93 |
|
|
t = DemoTaskbar()
|
| 94 |
|
|
win32gui.PumpMessages() # start demo
|