有一个小需求希望在wx下建立的托盘区图标上显示气球消息,很尴尬的是wx.TaskBarIcon不像wx.Window等有GetHandle方法,无法直接获得句柄.解决的办法1.自己重写TaskBarIcon... 2.直接遍历找到句柄(更通用麻烦些).据说wxpython在2.9后会加一个wx.NotificationMessage方法,但是2.9....哪年月有动静呢?
#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("出来吧!", "奥特曼!") time.sleep(5) win32gui.DestroyWindow(t.hwnd)
1. 除了算法设计时, 使用python真的很简单.
2. 会用python没什么, 还得会用千奇百怪的东西, 比如这个
3. 不经常对windows开发的人,还是常备msdn和baidu/google才不会慌马脚..
程序有改动,尽量缩减,原文请见: