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从sqlite读取并显示数据的方法
May 08 Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
python基本语法练习实例
Sep 19 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
详解python之heapq模块及排序操作
Apr 04 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
五种Python转义表示法
Nov 27 Python
python 下载文件的几种方法汇总
Jan 06 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 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
ThinkPHP分页类使用详解
2014/03/05 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python入门篇之文件
2014/10/20 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python中几个比较常见的名词解释
2015/07/04 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python assert的用处示例详解
2019/04/01 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
法人授权委托书
2014/04/03 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
Python 阶乘详解
2021/10/05 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
MySQL数据库 任意ip连接方法
2022/05/20 MySQL