[Win10] [C# Desktop] 两种方法发送原生Toast通知
[Win10] [C# Desktop] 两种方法发送原生Toast通知
Y_Theta
于 2018-12-31 11:09:42 发布
4934
收藏 9
分类专栏: wpf C# DeskTop 文章标签: WIN10 WPF c# windows 通知
版权
wpf
同时被 2 个专栏收录
6 篇文章0 订阅
订阅专栏
C# DeskTop
7 篇文章0 订阅
订阅专栏
概述
[1]使用NotifyIcon的BalloonTip [2]使用Win10 API
难度 简单 复杂
依赖 需要程序保持一个NotifyIcon(托盘图标) WIn10 SDK
优点 操作简单,样式简单,适用于只需要进行通知而不必交互的场合 样式丰富,可以交互
缺点 样式单一,不能交互 操作复杂,需要判断系统有无类库,否则会异常
预览
[1] BalloonTip : 可以看出,这个托盘通知的样式实际上就是系统风格决定的,在win7下这个操作弹出的就是win7样式的通知像Adobe AI 这种软件在打开时会发出一个DPI相关提示,就是使用的这个
[2] Win10 API : 这个基本上可以实现当前版本下的任何样式Toast通知,并且支持用户交互,如果想要获得更加贴近原生应用的体验(UWP),是个不错的选择
实现
[1] BalloonTip : 实现非常容易, 添加 System.Windows.Forms 引用后,创建一个NotifyIcon实例,通过设置 BalloonTip相关属性然后再调用**NotifyIcon.ShowBalloonTip(int delay);**就可以显示通知了。
[2] Win10 API : 这个实现起来有些繁琐,我结合微软和CSDN上找到的其它有关方法经过测试重新封装了一个新的类,目前不成功的地方是回调只能通过应用生成的通知触发,无法通过COM服务触发,但是我检查了很多遍,方法应该是没有问题的,而且也不太影响,我没有使用Nuget的那些包,整个模块也就19个K,toast样式都是查Notifications Visualizer然后手写xml生成的,这样好处就是模块很小,不然那个nuget包下来得有200多K,而我的应用只有1.5M左右,这样就太不值了,有关类库和引用大家可以查看我上面引用的CSDN的那篇,那个作者说的很详细。这个模块的文档我写的很详细,引用微软的部分就结合上面微软的那篇看就OK。
这个能用的方法试了我整整一天,首先上面那两个我直接都用不了,而且StackOverflow和Codeproject上的例子也有一些问题,最后我还从Window_API_PACK(忘了是不是这样叫)这个Nuget包的源代码(GitHub)上把有用的代码扒下来,才凑成了这个只有19K的模块,对我这个初学者太TM不容易了。
项目GIT:here
因为这是我项目的一个模块,所以里面还有其它的文件,大家就看这个ToastHelper就行了。我这个是一个MEF插件的测试项目,有兴趣的也可以看一下。这个是独立出来的通知模块…2020-2-27 更新,主要是修改了以前的PropVariant的数据格式,以前那种格式在我更新系统后好像不好用了(1903)
2018 - 12 - 31
发现一个问题,这个方法没有办法获取Input类型的用户输入,也就是只能使用按钮进行交互,看来不使用微软的那个回调还是不行啊
2019 - 1 - 4
最近在学安卓和Unity,要做毕业设计了,也就没有多少时间看windows方面的动态,但是在某个偶然的情况下,找到了另一个方法:Desktop Bridge,这个能把你的Win32应用直接转换成能够发布在微软商店的应用,转换后就可以使用UWP的API了,具体参考这篇 Package desktop applications.或者直接看这个相关的 增强用于 Windows 10 的桌面应用程序 这是 2018/10/15发的,应该还很新鲜。
啊啊啊,终于调试好了,原来是CLSID在包装发给非托管内存时时不能用string包装,只能用byte数组包装,好了现在功能已经与UWP完全一致了。
2020 - 2- 27
旧的版本不能用了,里面的创建快捷方式的方法有问题,here 看这里的吧
最新的版本在GIT上
————————————————
版权声明:本文为CSDN博主「Y_Theta」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q886yes/article/details/84587696