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使用Flask框架获取当前查询参数的方法
Mar 21 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
python代码实现ID3决策树算法
Dec 20 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
Python3+Appium安装使用教程
Jul 05 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Keras实现将两个模型连接到一起
May 23 Python
Python如何解除一个装饰器
Aug 07 Python
Python 列表推导式需要注意的地方
Oct 23 Python
浅谈python数据类型及其操作
May 25 Python
Python中requests做接口测试的方法
May 30 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中取得image按钮传递的name值
2006/10/09 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
python自动格式化json文件的方法
2015/03/11 Python
python中循环语句while用法实例
2015/05/16 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
深入浅出学习python装饰器
2017/09/29 Python
Python线性方程组求解运算示例
2018/01/17 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
医院护理人员的自我评价分享
2013/10/04 职场文书
服务之星事迹材料
2014/05/03 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL