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远程桌面协议RDPY安装使用介绍
Apr 15 Python
python计算方程式根的方法
May 07 Python
python构建基础的爬虫教学
Dec 23 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python基础之高级变量类型实例详解
Jan 03 Python
Python while循环使用else语句代码实例
Feb 07 Python
django 读取图片到页面实例
Mar 27 Python
20行Python代码实现视频字符化功能
Apr 13 Python
python自定义函数def的应用详解
Jun 03 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python 基于Apscheduler实现定时任务
Dec 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
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
php中this关键字用法分析
2016/12/07 PHP
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Python标准库shutil用法实例详解
2018/08/13 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
python TCP包注入方式
2020/05/05 Python
详细分析Python collections工具库
2020/07/16 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
安踏官方商城:anta.cn
2019/12/16 全球购物
开放系统互连参考模型
2016/06/29 面试题
建筑文秘专业个人求职信范文
2013/12/28 职场文书
企业宣传方案
2014/03/04 职场文书
和解协议书
2014/04/16 职场文书
2014年宣传工作总结
2014/11/18 职场文书
公务员处分决定书
2015/06/25 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
Python图像处理库PIL详细使用说明
2022/04/06 Python
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏