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 提取文件的小程序
Jul 29 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
Python中max函数用于二维列表的实例
Apr 03 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python 多维高斯分布数据生成方式
Dec 09 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Python字符串中删除特定字符的方法
Jan 15 Python
python实现滑雪游戏
Feb 22 Python
Python telnet登陆功能实现代码
Apr 16 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python区块链持久化和命令行接口实现简版
May 25 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数字游戏 计算24算法
2012/06/10 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
Python3匿名函数用法示例
2018/07/25 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
int在python中的含义以及用法
2019/06/27 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
销售自我评价
2013/10/22 职场文书
小松树教学反思
2014/02/11 职场文书
机关节能减排实施方案
2014/03/17 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
司考复习计划
2015/01/19 职场文书
经营场所证明范本
2015/06/19 职场文书