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实现比较两段文本不同之处的方法
May 30 Python
对python判断是否回文数的实例详解
Feb 08 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
Python selenium自动化测试模型图解
Apr 15 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
Python爬虫开发与项目实战
Dec 16 Python
python urllib和urllib3知识点总结
Feb 08 Python
Django 如何实现文件上传下载
Apr 08 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 If Else(elsefi) 语句
2013/04/07 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
JavaScript静态的动态
2006/09/18 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
Vue表单实例代码
2016/09/05 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python 串口读写的实现方法
2019/06/12 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
长青弘远的面试题
2012/06/09 面试题
JAVA软件工程师测试题
2014/07/25 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
承诺书范本
2015/01/21 职场文书
冰雪公主观后感
2015/06/16 职场文书
返乡农民工证明
2015/06/24 职场文书
初中语文教学反思范文
2016/03/03 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Python学习之异常中的finally使用详解
2022/03/16 Python