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实现的阳历转阴历(农历)算法
Apr 25 Python
使用python遍历指定城市的一周气温
Mar 31 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Python使用functools实现注解同步方法
Feb 06 Python
numpy matrix和array的乘和加实例
Jun 28 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
对python中Json与object转化的方法详解
Dec 31 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Django集成MongoDB实现过程解析
Dec 01 Python
Python使用protobuf序列化和反序列化的实现
May 19 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学习之数据类型之间的转换代码
2011/05/29 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
php递归创建目录的方法
2015/02/02 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
JS中的BOM应用
2018/02/02 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Python函数参数分类原理详解
2020/05/28 Python
python中round函数如何使用
2020/06/19 Python
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
环境建设实施方案
2014/03/14 职场文书
计算机系本科生求职信
2014/05/31 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
文明单位创建材料
2014/12/24 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书