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入门基础之用户输入与模块初认识
Nov 14 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python实现通讯录功能
Feb 22 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python3安装crypto出错及解决方法
Jul 30 Python
Pytorch之卷积层的使用详解
Dec 31 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
Django如何实现防止XSS攻击
Oct 13 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
PHP中的self关键字详解
2019/06/23 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
Python中return函数返回值实例用法
2020/11/19 Python
行政经理岗位职责
2013/11/09 职场文书
会计专业自我评价
2014/02/12 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
2014年医生工作总结
2014/11/21 职场文书
合同纠纷调解书
2015/05/20 职场文书
学校元旦晚会开场白
2015/05/29 职场文书