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使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
Python网络编程详解
Oct 31 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
python web框架 django wsgi原理解析
Aug 20 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
关于Django Models CharField 参数说明
Mar 31 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Django实现随机图形验证码的示例
Oct 15 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/07/14 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
jQuery操作cookie
2016/08/08 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
javascript实现放大镜功能
2020/12/09 Javascript
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python Django的web开发实例(入门)
2019/07/31 Python
python超时重新请求解决方案
2019/10/21 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
考试没考好检讨书
2014/01/31 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
离婚协议书范本
2015/01/26 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
python中validators库的使用方法详解
2022/09/23 Python