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 27 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
jupyter安装小结
Mar 13 Python
Python 类的继承实例详解
Mar 25 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
Python中 map()函数的用法详解
Jul 10 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
python 装饰器功能与用法案例详解
Mar 06 Python
python实时监控logstash日志代码
Apr 27 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
python分分钟绘制精美地图海报
Feb 15 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
PHP实现变色验证码实例
2014/01/06 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
session 加入redis的实现代码
2016/07/15 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
python使用7z解压apk包的方法
2015/04/18 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python3对接mysql数据库实例详解
2019/04/30 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
python如何基于redis实现ip代理池
2020/01/17 Python
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
后备干部考察材料
2014/02/12 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript