SnoreToasts,作为一款轻量级的C++开源项目,为开发者提供了一个便捷的方式来在Windows操作系统上展示通知弹框(Toast Notifications)。
特点与优势
轻量级:SnoreToasts采用了简洁的代码设计,避免了不必要的依赖和复杂性,确保其在各种C++项目中都能轻松集成,而不会显著增加项目的体积或复杂度。
跨平台兼容:虽然SnoreToasts主要面向Windows操作系统,但其设计思路和代码结构为未来的跨平台扩展提供了可能。
高度可定制:SnoreToasts允许开发者自定义通知弹框的标题、内容、图标等外观元素,以及弹框的显示时间、位置等行为属性,以满足不同场景下的需求。
易于使用:SnoreToasts提供了直观的API接口和详细的文档支持,使开发者能够迅速上手并充分利用其功能。
高效稳定:SnoreToasts经过严格的测试和验证,确保其在各种情况下都能稳定运行,并具备良好的性能表现。
应用场景
桌面应用程序:对于需要向用户展示重要信息或提示的桌面应用程序,SnoreToasts提供了一种直观、便捷的通知方式。无论是软件更新、新消息提醒还是操作结果反馈,SnoreToasts都能以简洁明了的方式将信息传达给用户。
系统服务:对于后台运行的系统服务或进程,SnoreToasts提供了一种不打断用户工作流程的通知方式。当服务状态发生变化或需要用户关注时,可以通过SnoreToasts向用户发送通知。
游戏开发:在游戏开发中,SnoreToasts可以用于展示游戏内的成就、任务进度、系统提示等信息。通过自定义外观和行为属性,可以将通知弹框与游戏界面完美融合,提升用户体验。
企业应用:在企业级应用中,SnoreToasts可以用于展示内部通知、公告、会议提醒等信息。通过统一的通知机制和外观风格,可以提高企业内部信息的传播效率和准确性。
调用方法
命令行操作:
C:\Users\xuanwujian\snoretoast.exe -t "玄武剑"
-m "各位朋友大家好,欢迎关注公众号:玄武剑" -p "D:\\sword.ico"
C++操作:
STARTUPINFO
si;
PROCESS_INFORMATION
pi;
ZeroMemory(&si,
sizeof(si));
si.cb =
sizeof(si);
ZeroMemory(&pi,
sizeof(pi));
// 设置命令行参数
TCHAR cmdLine[] = _T("C:\\Users\\xuanwujian\\snoretoast.exe -t
\"玄武剑\" -m \"欢迎关注公众号:玄武剑\"
");//-p \"D:\\sword.ico\"
// 尝试创建进程
if (!CreateProcess(NULL, // 不使用模块名
cmdLine,// 命令行
NULL,// 进程句柄不可继承
NULL,// 线程句柄不可继承
FALSE,// 设置句柄不继承标志
0,// 无创建标志
NULL,// 使用父进程的环境块
NULL,// 使用父进程的起始目录
&si,// 指向 STARTUPINFO 结构或 NULL
&pi)// 指向 PROCESS_INFORMATION 结构
) {
std::cerr << "CreateProcess failed (" <<
GetLastError() << ")." << std::endl;
return 1;
}
// 等待进程结束(可选)
WaitForSingleObject(pi.hProcess,
INFINITE);
// 关闭进程和线程句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
python操作:
def
run(args):
print(" ".join(args))
subprocess.run(args)
serverThread
= None
try:
serverThread =
threading.Thread(target=server, daemon=True)
serverThread.start()
for i in range(10):
run(["snoretoast", "-t", "玄武剑 ❤ python", "-m", "各位朋友大家好,欢迎关注公众号:玄武剑", "-b", "🎸;This;❤;" + str(i), "-p",
os.path.join(os.path.dirname(__file__), "sword.png"),
"-id", str(i),
"-pipeName", PIPE_NAME, "-appID", APP_ID])
while True:
# let the server continue but wait for
a keyboard interupt
time.sleep(10000)
finally:
if serverThread:
del serverThread
源码解析
在无图片传入时,如果不需要显示默认的左侧图片 ,可以注释掉下面 image = getIcon(); 文末提供编译好的程序及vs2022直接运行的源代码。
修改后的vs2022源码及程序下载
https://www.lanzoub.com/b00rn5xe1a 密码:beuc