为了账号安全,请及时绑定邮箱和手机立即绑定

迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用

标签:
C#

假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本。同时在1903以后的版本上,额外多出一个Ink的功能。

那么我们就可以通过ApiInformation.IsApiContractPresent方法来判断1903的API是否可用,决定要不要开放Ink功能给当前用户。新来的同学如果不知道如何使用“ApiInformation.IsApiContractPresent”,请参考《迁移桌面程序到MS Store(4)——桌面程序调用Win10 API》。

Sample Code我们还是以《迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas》中的WPFInkSample.git为例。

首先我们确保Solution中的WPFInkSample工程可以成功编译并运行。

https://img1.sycdn.imooc.com//5dd3b4f300011c8e09550990.jpg

然后创建一个WPF工程MainUI,添加对WPFInkSample的引用。在MainWindow.xaml.cs中我们想要判断当前Windows版本是否为1903或以上。如果是1903以上的版本,就通过Process.Start启动WPFInkSample.exe,否则就弹出MessageBox。

            if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8))
            {
                Process.Start("WPFInkSample.exe");
            }
            else
            {
                MessageBox.Show("Since version 1903, we can use UWP control in WPF project.");
            }

IsApiContractPresent第一个参数是要检查的API name,第二个参数是主版本号。从Universal device family API contracts的列表中我们可以搜索"Windows.Foundation.UniversalApiContract",会发现在1903版本(version 10.0.18362)中"Windows.Foundation.UniversalApiContract"的version=8.0,而1809版本中version=7.0。

https://img1.sycdn.imooc.com//5dd3b5510001c82215621120.jpg

找不到"ApiInformation.IsApiContractPresent"的同学记得在MainUI中添加对Windows.winmd的reference,位于C:\Program Files (x86)\Windows Kits\10\UnionMetadata\<sdk version>\Facade 文件夹。

本篇主要介绍了如何在WPF程序中,动态判断某个Win10 API是否可用。

Github:

https://github.com/manupstairs/WPFInkSample


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消