python实现桌面托盘气泡提示


Posted in Python onJuly 29, 2019

本文实例为大家分享了python实现桌面托盘气泡提示的具体代码,供大家参考,具体内容如下

# -*- encoding:utf-8 -*- 
##############################
#
# 程序名:python桌面托盘气泡
# 文件名:clsBubble.py
# 功能 :实现桌面托盘气泡提示功能
# modify:by adengou 2016.1.4
# program:python3.4.4
# 适用 :windowsXP -windows10
#
##############################
import sys 
import os 
import struct 
import time 
import win32con 
 
from win32api import * 
# Try and use XP features, so we get alpha-blending etc. 
try: 
 from winxpgui import * 
except ImportError: 
 from win32gui import * 
 
 
class PyNOTIFYICONDATA: 
 _struct_format = ( 
 "I" # DWORD cbSize; 结构大小(字节) 
 "I" # HWND hWnd; 处理消息的窗口的句柄 
 "I" # UINT uID; 唯一的标识符 
 "I" # UINT uFlags; 
 "I" # UINT uCallbackMessage; 处理消息的窗口接收的消息 
 "I" # HICON hIcon; 托盘图标句柄 
 "128s" # TCHAR szTip[128]; 提示文本 
 "I" # DWORD dwState; 托盘图标状态 
 "I" # DWORD dwStateMask; 状态掩码 
 "256s" # TCHAR szInfo[256]; 气泡提示文本 
 "I" # union { 
  # UINT uTimeout; 气球提示消失时间(毫秒) 
  # UINT uVersion; 版本(0 for V4, 3 for V5) 
  # } DUMMYUNIONNAME; 
 "64s" # TCHAR szInfoTitle[64]; 气球提示标题 
 "I" # DWORD dwInfoFlags; 气球提示图标 
 ) 
 _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 
 
 def pack(self): 
 return self._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): 
 # avoid wrong field names 
 if not hasattr(self, name): 
  raise (NameError, name) 
 self.__dict__[name] = value 
 
class MainWindow: 
 def __init__(self):
 #初始化变量
 self.title =""
 self.msg =""
 self.duration=5#延时5秒
 self.hwnd =None
 self.hinst =None
 self.regOk = False
 #self.creWind()
 
 
 def creWind(self):
  # Register the Window class.
 wc = WNDCLASS() 
 self.hinst = wc.hInstance = GetModuleHandle(None) 
 wc.lpszClassName = "PythonTaskbarDemo" # 字符串只要有值即可,下面3处也一样 
 wc.lpfnWndProc = { win32con.WM_DESTROY: self.OnDestroy } # could also specify a wndproc. 
 classAtom = RegisterClass(wc)
 # Create the Window. 
 style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU 
 self.hwnd = CreateWindow(classAtom, "Taskbar Demo", style, 
  0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 
  0, 0, self.hinst, None 
 )
 UpdateWindow(self.hwnd)
 #
 def startBubble(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, "Balloon tooltip demo") 
 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:
  return None
 
 
 def show_balloon(self, title, msg): 
 # For this message I can't use the win32gui structure because 
 # it doesn't declare the new, required fields
 
 nid = PyNOTIFYICONDATA() 
 nid.hWnd = self.hwnd 
 nid.uFlags = NIF_INFO 
 
 # type of balloon and text are random 
 #nid.dwInfoFlags = NIIF_INFO 
 nid.szInfo = msg[:64]
 nid.szInfoTitle = title[:256] 
 
 # Call the Windows function, not the wrapped one 
 from ctypes import windll 
 Shell_NotifyIcon = windll.shell32.Shell_NotifyIconA 
 Shell_NotifyIcon(NIM_MODIFY, nid.pack()) 
 
 def OnDestroy(self, hwnd, msg, wparam, lparam): 
 nid = (self.hwnd, 0) 
 Shell_NotifyIcon(NIM_DELETE, nid) 
 PostQuitMessage(0) # Terminate the app. 
 
if __name__=='__main__':
 msgTitle =u"您有一条短消息"
 msgContent =u"hello python"
 msgTitle =msgTitle
 bubble =MainWindow()
 bubble.startBubble(msgTitle,msgContent)
 bubble.startBubble(msgTitle,u"i'm a balloon")
 bubble.startBubble(msgTitle,u"how do u feel?")

本程序修改网上的程序,适用于WINDOWS平台,有兴趣的朋友还可以修改成最小化托盘程序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
35个Python编程小技巧
Apr 01 Python
python实现提取百度搜索结果的方法
May 19 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
python如何爬取个性签名
Jun 19 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
Win8下python3.5.1安装教程
Jul 29 Python
Python实现的特征提取操作示例
Dec 03 Python
Python 加密与解密小结
Dec 06 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
python 如何设置守护进程
Oct 29 Python
python实现桌面气泡提示功能
Jul 29 #Python
pycharm设置鼠标悬停查看方法设置
Jul 29 #Python
django rest framework vue 实现用户登录详解
Jul 29 #Python
python实现倒计时小工具
Jul 29 #Python
django rest framework 实现用户登录认证详解
Jul 29 #Python
pycharm重命名文件的方法步骤
Jul 29 #Python
PyQt5实现暗黑风格的计时器
Jul 29 #Python
You might like
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
ext 代码生成器
2009/08/07 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python实现函数极小值
2019/07/10 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
python各种excel写入方式的速度对比
2020/11/10 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
信息部岗位职责
2013/11/12 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
德劲DE1105机评
2022/04/05 无线电