Python实现Windows上气泡提醒效果的方法


Posted in Python onJune 03, 2015

本文实例讲述了Python实现Windows上气泡提醒效果的方法。分享给大家供大家参考。具体实现方法如下:

# -*- encoding: gbk -*- 
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, 
   self.dwState, 
   self.dwStateMask, 
   self.szInfo, 
   self.uTimeoutOrVersion, 
   self.szInfoTitle, 
   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, title, msg, duration=3): 
  # Register the Window class. 
  wc = WNDCLASS() 
  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, hinst, None 
  ) 
  UpdateWindow(self.hwnd) 
  iconPathName = os.path.abspath(os.path.join(sys.prefix, "pyc.ico"))
  icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE 
  try: 
   hicon = LoadImage(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") 
  Shell_NotifyIcon(NIM_ADD, nid) 
  self.show_balloon(title, msg) 
  time.sleep(duration) 
  DestroyWindow(self.hwnd) 
 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__': 
 MainWindow("您有一条短消息", "您该睡觉了")

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中dictionary items()系列函数的用法实例
Aug 21 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
python正则实现提取电话功能
Feb 24 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
python关于变量名的基础知识点
Mar 03 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 #Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 #Python
Python fileinput模块使用实例
Jun 03 #Python
以windows service方式运行Python程序的方法
Jun 03 #Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 #Python
python中list常用操作实例详解
Jun 03 #Python
python中argparse模块用法实例详解
Jun 03 #Python
You might like
PHP网站提速三大“软”招
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
vue中路由跳转不计入history的操作
2020/09/21 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
详细分析python3的reduce函数
2017/12/05 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
python元组拆包实现方法
2021/02/28 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
打架检讨书100字
2014/01/19 职场文书
合作意向书
2014/07/30 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
学生会招新宣传语
2015/07/13 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
公司年会主持词范文!
2019/05/07 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
使用Ajax实现无刷新上传文件
2022/04/12 Javascript
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL