桌面程序调用metro/modern应用
在我的上一篇文章《自定义协议及其在metro中的应用》中,描述了如何在metro应用程序中调用桌面程序。当然,现在微软为了避免版权的问题,已经把metro改名为modern了。今天,项目的需求恰好和这个相反,是由桌面应用程序来调用metro应用。
在以前的文章中,我提到了自定义协议,这次我也寻思着是不是可以一样通过自定义协议来解决。网上狂搜索了一把,还是google给力,在msdn上找到了解决方法,这里给记录下来,方便国内的用户。
首先,我们打开项目,找到Package.appxmanifest文件,然后切换到“声明”选项卡,添加一个协议,同时设置一个名称,例如sgy,其它的信息都是可选的,看着输入好了。
接下来,我们找到App.xaml的代码文件,找到 OnActivated方法,在这个方法里添加代码即可。
protected override void OnActivated(IActivatedEventArgs args){
if(args.Kind == ActivationKind.Protocol){
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
//eventArgs.Uri.AbsoluteUri 就是我们要的数据了,剩下的就是字符串参数操作了
}
}
到这里就差不多完成啦,是不是很简单~
接下来就是程序调用部分了,比如说我们想调用程序并传递一个 wifilist 参数,可以这么来调用:sgy://wifilist,就和打开一个网页是一样样的。操作系统会在安装app的时候帮我们建立sgy协议和metro程序的关联,不需要我们操心在注册表里设置关联了。略有遗憾的是参数只能是字符串形式,如果参数是对象的话,就需要实例化转换成字符串了。