[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: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上

有问题可以联系我:2483507105@qq.com

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值