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 opencv实现旋转矩形框裁减功能
Jul 25 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
Python中turtle库的使用实例
Sep 09 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
django queryset相加和筛选教程
May 18 Python
python如何求100以内的素数
May 27 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 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中替换键名的简易方法示例详解
2014/01/07 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
web.py获取上传文件名的正确方法
2014/08/26 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python实现基于POS算法的区块链
2018/08/07 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
报社实习生自荐信
2014/01/24 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
酒店员工培训方案
2014/06/02 职场文书
网吧消防安全责任书
2014/07/29 职场文书
医生个人年终总结
2015/02/28 职场文书