Windows 10 弹出式通知桌面应用程序

16
我正在尝试将某些Windows 10功能集成到我现有的Windows桌面应用程序中。 我在集成Toast通知时遇到了一些困难。 使用Toast通知示例,我能够实现发送和隐藏通知的代码。 当用户点击“活动”通知时,我的应用程序中的事件处理程序也可以正常工作。 但是,当通知被“存档”在“操作中心”中时,用户单击我的通知时不会发生任何事情。 在这种情况下,我该如何应对用户的单击操作?
3个回答

24
我已经开发了WinToast,这是一个用C++编写的库,可轻松集成Windows Toast通知。我已经将其用于不同项目中的Toast通知,特别是与Qt框架一起使用。
本地Toast通知需要Com Fundamentals的一些功能,这些功能仅在现代版本的Windows(最低支持客户端:Windows 8)中可用。
因此,该库会动态加载所需的所有库。使用WinToast使您的应用程序兼容旧版Windows。附带的示例说明了如何在存储库中使用它。
要显示Toast,只需创建模板和自定义处理程序,然后启动它即可。
WinToastHandlerExample* handler = new WinToastHandlerExample;
WinToastTemplate templ  = WinToastTemplate(WinToastTemplate::ImageWithTwoLines);
templ.setImagePath(L"C:/example.png");
templ.setTextField(L"title", WinToastTemplate::FirstLine);
templ.setTextField(L"subtitle", WinToastTemplate::SecondLine);

if (!WinToast::instance()->showToast(templ, handler)) {
   std::wcout << L"Could not launch your toast notification!";
}

看起来很整洁,但是我按照 Github 上的自述文件无法使其工作。所有检查都通过了(甚至最后一个错误信息“无法启动…”也没有显示),但是没有 Toast 可见,我的处理程序的 toastFailed() 被调用了。你需要在项目中设置其他配置吗? - PhilLab
你好,能否检查一下最后的状态?我们为Visual Studio添加了一个新项目,并对Qt的示例进行了一些修改。在Windows 8、8.1和10上,它对我们来说运行良好。 - mohabouje
感谢更新。我再次尝试了一下,遇到了一些问题。虽然 Github 的问题页面可能不是正确的地方,但我还是 打开了一个,以便更容易地进行评估。 - PhilLab

8
有关如何从Win32应用程序使用操作中心(和交互式弹出窗口)的更新文档已经发布,具体请参见Windows 10文档:https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast-desktop。基本上,您需要使用COM服务器。ToastNotification本身的Activated事件是一个运行时事件……如果您的程序已关闭并且用户从操作中心单击您的弹出窗口,则无用。因此,只有在用户第一次弹出窗口时单击您的弹出窗口时,Activated才会触发。当用户从操作中心单击您的弹出窗口时,不会触发该事件。这就是COM服务器的作用(或UWP应用程序中OnActivated方法的作用)。

3

该示例适用于Windows 8;Windows 10技术预览版的操作中心是新的,目前还没有任何SDK可以使用其中的新功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接