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 01 Python
python计算最大优先级队列实例
Dec 18 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python找出完数的方法
Nov 12 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
在python里面运用多继承方法详解
Jul 01 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python实现双色球随机选号
Jan 01 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
一个JS翻页效果
2007/07/23 Javascript
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
Python模块学习 filecmp 文件比较
2012/08/27 Python
Django与JS交互的示例代码
2017/08/23 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python文字转语音的实例代码分析
2019/11/12 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
入股协议书范本
2014/04/14 职场文书
平安工地汇报材料
2014/08/19 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015年团支部工作总结
2015/04/03 职场文书
小学运动会加油词
2015/07/18 职场文书
商场广播稿范文
2015/08/19 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
Nginx反向代理学习实例教程
2021/10/24 Servers
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
vue router 动态路由清除方式
2022/05/25 Vue.js