首页 > 编程 > Python > 正文

Python实现Windows上气泡提醒效果的方法

2020-02-23 01:32:48
字体:
来源:转载
供稿:网友

本文实例讲述了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("您有一条短消息", "您该睡觉了")            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表