python实现桌面托盘气泡提示
本文实例为大家分享了python实现桌面托盘气泡提示的具体代码,供大家参考,具体内容如下
#-*-encoding:utf-8-*-
##############################
#
#程序名:python桌面托盘气泡
#文件名:clsBubble.py
#功能:实现桌面托盘气泡提示功能
#modify:byadengou2016.1.4
#program:python3.4.4
#适用:windowsXP-windows10
#
##############################
importsys
importos
importstruct
importtime
importwin32con
fromwin32apiimport*
#TryanduseXPfeatures,sowegetalpha-blendingetc.
try:
fromwinxpguiimport*
exceptImportError:
fromwin32guiimport*
classPyNOTIFYICONDATA:
_struct_format=(
"I"#DWORDcbSize;结构大小(字节)
"I"#HWNDhWnd;处理消息的窗口的句柄
"I"#UINTuID;唯一的标识符
"I"#UINTuFlags;
"I"#UINTuCallbackMessage;处理消息的窗口接收的消息
"I"#HICONhIcon;托盘图标句柄
"128s"#TCHARszTip[128];提示文本
"I"#DWORDdwState;托盘图标状态
"I"#DWORDdwStateMask;状态掩码
"256s"#TCHARszInfo[256];气泡提示文本
"I"#union{
#UINTuTimeout;气球提示消失时间(毫秒)
#UINTuVersion;版本(0forV4,3forV5)
#}DUMMYUNIONNAME;
"64s"#TCHARszInfoTitle[64];气球提示标题
"I"#DWORDdwInfoFlags;气球提示图标
)
_struct=struct.Struct(_struct_format)
hWnd=0
uID=0
uFlags=0
uCallbackMessage=0
hIcon=0
szTip=''
dwState=0
dwStateMask=0
szInfo=''
uTimeoutOrVersion=0
szInfoTitle=''
dwInfoFlags=0
defpack(self):
returnself._struct.pack(
self._struct.size,
self.hWnd,
self.uID,
self.uFlags,
self.uCallbackMessage,
self.hIcon,
self.szTip.encode("gbk"),
self.dwState,
self.dwStateMask,
self.szInfo.encode("gbk"),
self.uTimeoutOrVersion,
self.szInfoTitle.encode("gbk"),
self.dwInfoFlags
)
def__setattr__(self,name,value):
#avoidwrongfieldnames
ifnothasattr(self,name):
raise(NameError,name)
self.__dict__[name]=value
classMainWindow:
def__init__(self):
#初始化变量
self.title=""
self.msg=""
self.duration=5#延时5秒
self.hwnd=None
self.hinst=None
self.regOk=False
#self.creWind()
defcreWind(self):
#RegistertheWindowclass.
wc=WNDCLASS()
self.hinst=wc.hInstance=GetModuleHandle(None)
wc.lpszClassName="PythonTaskbarDemo"#字符串只要有值即可,下面3处也一样
wc.lpfnWndProc={win32con.WM_DESTROY:self.OnDestroy}#couldalsospecifyawndproc.
classAtom=RegisterClass(wc)
#CreatetheWindow.
style=win32con.WS_OVERLAPPED|win32con.WS_SYSMENU
self.hwnd=CreateWindow(classAtom,"TaskbarDemo",style,
0,0,win32con.CW_USEDEFAULT,win32con.CW_USEDEFAULT,
0,0,self.hinst,None
)
UpdateWindow(self.hwnd)
#
defstartBubble(self,title,msg,duration=3):
if(self.hwnd==None):
self.creWind()
self.title=title
self.msg=msg
self.duration=duration
iconPathName=os.path.abspath(os.path.join(sys.prefix,os.getcwd()+"\\pyc.ico"))
icon_flags=win32con.LR_LOADFROMFILE|win32con.LR_DEFAULTSIZE
try:
hicon=LoadImage(self.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,"Balloontooltipdemo")
try:
Shell_NotifyIcon(NIM_ADD,nid)
except:
self.hwnd==None
self.show_balloon(self.title,self.msg)
time.sleep(self.duration)
#ReleaseDC(self.hwnd,wc)
#DeleteDC(wc)
try:
DestroyWindow(self.hwnd)
self.hwnd==None
except:
returnNone
defshow_balloon(self,title,msg):
#ForthismessageIcan'tusethewin32guistructurebecause
#itdoesn'tdeclarethenew,requiredfields
nid=PyNOTIFYICONDATA()
nid.hWnd=self.hwnd
nid.uFlags=NIF_INFO
#typeofballoonandtextarerandom
#nid.dwInfoFlags=NIIF_INFO
nid.szInfo=msg[:64]
nid.szInfoTitle=title[:256]
#CalltheWindowsfunction,notthewrappedone
fromctypesimportwindll
Shell_NotifyIcon=windll.shell32.Shell_NotifyIconA
Shell_NotifyIcon(NIM_MODIFY,nid.pack())
defOnDestroy(self,hwnd,msg,wparam,lparam):
nid=(self.hwnd,0)
Shell_NotifyIcon(NIM_DELETE,nid)
PostQuitMessage(0)#Terminatetheapp.
if__name__=='__main__':
msgTitle=u"您有一条短消息"
msgContent=u"hellopython"
msgTitle=msgTitle
bubble=MainWindow()
bubble.startBubble(msgTitle,msgContent)
bubble.startBubble(msgTitle,u"i'maballoon")
bubble.startBubble(msgTitle,u"howdoufeel?")
本程序修改网上的程序,适用于WINDOWS平台,有兴趣的朋友还可以修改成最小化托盘程序。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。