Python实现Windows上气泡提醒效果的方法
作者:xm1331305 时间:2021-08-13 07:58:46
本文实例讲述了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,Windows
0
投稿
猜你喜欢
python sklearn包——混淆矩阵、分类报告等自动生成方式
2022-05-29 12:19:27
Django进阶之CSRF的解决
2022-01-30 02:51:27
PHP禁止页面缓存的代码
2023-07-04 05:35:02
Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解
2024-01-26 22:24:12
phpmyadmin 数据导入导出问题
2007-08-06 15:23:00
django自带的权限管理Permission用法说明
2023-07-25 04:18:06
利用Matplotlib实现单画布绘制多个子图
2021-10-30 19:33:58
Python德劳内三角剖分详解
2021-02-18 23:08:49
mysql 8.0.15 winx64解压版安装配置方法图文教程
2024-01-26 07:11:18
Python如何通过变量ID得到变量的值
2023-01-22 22:35:56
python datetime时间格式的相互转换问题
2023-12-22 01:04:29
asp.net生成Excel并导出下载五种实现方法
2023-07-06 11:01:16
python实现简单登陆流程的方法
2021-01-30 00:48:24
远程登录MySQL服务(小白入门篇)
2024-01-19 09:02:56
PHP结构型模式之装饰器模式
2023-05-30 08:43:07
python 中的列表解析和生成表达式
2022-01-30 16:14:15
JavaScript,5种调用函数的方法[译]
2009-02-24 16:26:00
python实现删除列表中某个元素的3种方法
2023-02-08 16:01:59
ASP代理采集的核心函数代码
2010-01-02 20:43:00
Tensorflow 合并通道及加载子模型的方法
2023-08-10 05:36:54