# coding: cp936
import win32gui
import win32con
import time
class TestTaskbarIcon:
def __init__(self):
# 注冊一個窗口類
wc = win32gui.WNDCLASS()
hinst = wc.hInstance = win32gui.GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbarDemo"
wc.lpfnWndProc = {win32con.WM_DESTROY: self.OnDestroy, }
classAtom = win32gui.RegisterClass(wc)
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = win32gui.CreateWindow(classAtom, "Taskbar Demo", style,
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
0, 0, hinst, None)
hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
nid = (self.hwnd, 0, win32gui.NIF_ICON, win32con.WM_USER + 20, hicon, "Demo")
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
def showMsg(self, title, msg):
# 原作者使用Shell_NotifyIconA方法代替包裝后的Shell_NotifyIcon方法
# 據稱是不能win32gui structure, 我稀里糊塗搞出來了.
# 具體對比原代碼.
nid = (self.hwnd, # 句柄
0, # 托盤圖標ID
win32gui.NIF_INFO, # 標識
0, # 回調消息ID
0, # 托盤圖標句柄
"TestMessage", # 圖標字符串
msg, # 氣球提示字符串
0, # 提示的顯示時間
title, # 提示標題
win32gui.NIIF_INFO # 提示用到的圖標
)
win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, nid)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)
win32gui.PostQuitMessage(0) # Terminate the app.
if __name__ == '__main__':
t = TestTaskbarIcon()
t.showMsg("您有新的文件,請登錄查看", "Mr a2man!")
time.sleep(5)
win32gui.DestroyWindow(t.hwnd)