Python實現Windows上氣泡提醒效果的方法

來源:互聯網
上載者:User
本文執行個體講述了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程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.