Python實(shí)現(xiàn)Windows上氣泡提醒效果的方法
本文實(shí)例講述了Python實(shí)現(xiàn)Windows上氣泡提醒效果的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
# -*- 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; 結(jié)構(gòu)大小(字節(jié))
"I" # HWND hWnd; 處理消息的窗口的句柄
"I" # UINT uID; 唯一的標(biāo)識(shí)符
"I" # UINT uFlags;
"I" # UINT uCallbackMessage; 處理消息的窗口接收的消息
"I" # HICON hIcon; 托盤(pán)圖標(biāo)句柄
"128s" # TCHAR szTip[128]; 提示文本
"I" # DWORD dwState; 托盤(pán)圖標(biāo)狀態(tài)
"I" # DWORD dwStateMask; 狀態(tài)掩碼
"256s" # TCHAR szInfo[256]; 氣泡提示文本
"I" # union {
# UINT uTimeout; 氣球提示消失時(shí)間(毫秒)
# UINT uVersion; 版本(0 for V4, 3 for V5)
# } DUMMYUNIONNAME;
"64s" # TCHAR szInfoTitle[64]; 氣球提示標(biāo)題
"I" # DWORD dwInfoFlags; 氣球提示圖標(biāo)
)
_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("您有一條短消息", "您該睡覺(jué)了")
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python如何使用requests提交post請(qǐng)求并上傳文件(multipart/form-data)
這篇文章主要給大家介紹了關(guān)于python如何使用requests提交post請(qǐng)求并上傳文件(multipart/form-data)的相關(guān)資料,Python有許多庫(kù)支持,它們可以簡(jiǎn)化HTTP上的數(shù)據(jù)傳輸,requests庫(kù)是最受歡迎的Python包之一,因?yàn)樗诰W(wǎng)絡(luò)刮削中被大量使用,需要的朋友可以參考下2023-11-11
Python反爬蟲(chóng)技術(shù)之防止IP地址被封殺的講解
今天小編就為大家分享一篇關(guān)于Python反爬蟲(chóng)技術(shù)之防止IP地址被封殺的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
快速解決pandas.read_csv()亂碼的問(wèn)題
今天小編就為大家分享一篇快速解決pandas.read_csv()亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python實(shí)現(xiàn)希爾排序,歸并排序和桶排序的示例代碼
希爾、歸并、快速排序算法可歸為同一類(lèi),它們的共同點(diǎn)都是建立在分治思想之上。把大問(wèn)題分拆成小問(wèn)題,解決所有小問(wèn)題后,再合并每一個(gè)小問(wèn)題的結(jié)果,最終得到對(duì)原始問(wèn)題的解答。本文將介紹這三種算法的實(shí)現(xiàn)代碼,需要的可以參考一下2022-04-04
Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)殘差塊
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)殘差塊示例詳解有需要的 朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
探索Python元類(lèi)的魅力:靈活定制類(lèi)的創(chuàng)建過(guò)程
在Python編程中,元類(lèi)(Metaclass)是一項(xiàng)高級(jí)特性,它允許我們?cè)诙x類(lèi)的時(shí)候動(dòng)態(tài)地控制類(lèi)的創(chuàng)建過(guò)程。元類(lèi)提供了一種強(qiáng)大的機(jī)制,可以對(duì)類(lèi)進(jìn)行定制化,擴(kuò)展其功能,并在類(lèi)的實(shí)例化過(guò)程中執(zhí)行額外的操作,本文將深入解析2023-10-10
解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題
今天小編就為大家分享一篇解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python爬蟲(chóng)(入門(mén)教程、視頻教程)
本文是一篇關(guān)于python爬蟲(chóng)的知識(shí)學(xué)習(xí)教程,并且給大家解答了學(xué)習(xí)了python爬蟲(chóng)怎么掙錢(qián)這個(gè)很多程序員疑惑的問(wèn)題,如果你對(duì)這方面的知識(shí)也感興趣,一起深入學(xué)習(xí)一下吧。2018-01-01
使用Python的Django和layim實(shí)現(xiàn)即時(shí)通訊的方法
這篇文章主要介紹了使用Python的Django和layim實(shí)現(xiàn)即時(shí)通訊的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

