[Win10] [C# Desktop] 两种方法发送原生Toast通知

概述
  [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:https://github.com/20154530/AreaIconCore/tree/master/ToastHelper因为这是我项目的一个模块,所以里面还有其它的文件,大家就看这个ToastHelper就行了。我这个是一个MEF插件的测试项目,有兴趣的也可以看一下。

2018 - 12 - 31
发现一个问题,这个方法没有办法获取Input类型的用户输入,也就是只能使用按钮进行交互,看来不使用微软的那个回调还是不行啊

如果可怜我的话可以走这条路:CSDN Dowload

有问题可以联系我:[email protected]

猜你喜欢

转载自blog.csdn.net/q886yes/article/details/84587696