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 相关文章推荐
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
利用Python获取操作系统信息实例
Sep 02 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
python微信撤回监测代码
Apr 29 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
详解python如何引用包package
Jun 07 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 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
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP函数超时处理方法
2016/02/14 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php实现小程序支付完整版
2018/10/09 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
详解rem 适配布局
2018/10/31 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
大学生创业项目方案
2014/03/08 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
就业意向书范文
2014/04/01 职场文书
母校寄语大全
2014/04/10 职场文书
团队精神口号
2014/06/06 职场文书
施工工地安全标语
2014/06/07 职场文书
消防安全宣传口号
2014/06/10 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis