网站制作的软件,宁波seo软件免费课程,网站30g流量,网站设计策划书案例原文:UWP: 实现 UWP 应用自启动在上一篇文章中#xff0c;我们实现了使用命令行来启动 UWP 应用#xff0c;在这一篇文章中#xff0c;我们会实现 UWP 应用自启用的实现#xff0c;也即开机后或用户登陆后#xff0c;应用自己启动。这些特性原来都是 Win32 程序所具备的我们实现了使用命令行来启动 UWP 应用在这一篇文章中我们会实现 UWP 应用自启用的实现也即开机后或用户登陆后应用自己启动。这些特性原来都是 Win32 程序所具备的UWP 能够支持这些特性使得它和 Win32 程序的行为进一步相同。 实现 与实现命令行启动一样实现自启动也大体上分为两步首先在 Package.appxmanifest 中添加 windows.startupTask 扩展(Extension)然后在 App 类中处理 OnActivated 事件。事实上除了这两步外我们还需要增加检查 StartupTask 的状态并允许用户控制自启动的逻辑。 1. 修改 Package.appxmanifest 右击项目中的 Package.appxmanifest 文件在快捷菜单中选择“打开方式“-”XML 文本编辑器“。打开后对它的内容按以下修改 Packagexmlnshttp://schemas.microsoft.com/appx/manifest/foundation/windows10xmlns:mphttp://schemas.microsoft.com/appx/2014/phone/manifestxmlns:uaphttp://schemas.microsoft.com/appx/manifest/uap/windows10xmlns:uap5http://schemas.microsoft.com/appx/manifest/uap/windows10/5IgnorableNamespacesuap mp uap5...ApplicationsApplication ... Extensionsuap5:Extension Categorywindows.startupTask EntryPointAppAutoRun.App ExecutableAppAutoRun.exeuap5:StartupTask DisplayNameAppAutoRun Enabledtrue TaskIdAppAutoRun//uap5:Extension/Extensions/Application/Applications
/Package 上述加粗的部分就是添加的扩展 windows.startupTask其 EntryPoint 和 Executable 属性分别指明 App 类的完整名称以及当前应用的 exe 名称。 在 Extension 节点中添加了一个节点 StartupTask它有三个属性说明如下 TaskId任务Id必填在所有的 UWP 应用中它必须是唯一的不能和其它应用的 TaskId 相同Enabled是否启用必填指明是否启用当前应用为自启动行为DisplayName显示名称可选在“任务管理器”中“启动”选项卡中的显示名称需要说明的是Enabled 属性应该设置为 false事实上这个属性会被忽略因为 UWP 要实现自启动至少需要启动一次并且向用户请求同意才行。另外目前只能添加一个 StartupTask 节点。 此时可以将应用部署(Deploy)到本机上然后在“任务管理器”中“启动”选项卡上我们就可以看到了。 这里右击每个任务可以对它的状态进行控制启用/禁用可以看到当前应用的状态是“已禁用”。注意在设置它的状态之前App 需要至少被启动过一次。否则这里的设置是不起作用的。 2. 查看并更改任务状态 除了在 Package.appxmanifest 中增加扩展外我们还需要使用相关的 API 来查看所添加的 StartupTask 的状态以及对它的更改。在 MainPage.xaml 中增加以下代码 Grid Background{ThemeResource ApplicationPageBackgroundThemeBrush}Grid Margin12StackPanelTextBlock x:NametbState /Buttonx:NamebtnSetStateMargin0,4,0,0ClickbtnSetState_Click //StackPanel/Grid/Grid 在 MainPage.xaml.cs 中增加以下代码 private async void MainPage_Loaded(object sender, RoutedEventArgs e){await LoadState();}public async Task LoadState(){var task await StartupTask.GetAsync(AppAutoRun);this.tbState.Text $Status: {task.State};switch (task.State){case StartupTaskState.Disabled:// 禁用状态this.btnSetState.Content 启用;this.btnSetState.IsEnabled true;break;case StartupTaskState.DisabledByPolicy:// 由管理员或组策略禁用this.btnSetState.Content 被系统策略禁用;this.btnSetState.IsEnabled false;break;case StartupTaskState.DisabledByUser:// 由用户手工禁用this.btnSetState.Content 被用户禁用;this.btnSetState.IsEnabled false;break;case StartupTaskState.Enabled:// 当前状态为已启用this.btnSetState.Content 已启用;this.btnSetState.IsEnabled false;break;}}private async void btnSetState_Click(object sender, RoutedEventArgs e){var task await StartupTask.GetAsync(AppAutoRun);if (task.State StartupTaskState.Disabled){await task.RequestEnableAsync();}// 重新加载状态await LoadState();} 我们通过 StartupTask 类位于 Windows.ApplicationModel 命名空间下的 GetAsync 来获取指定 TaskId 的自启动任务StartupTask。StartupTask 类具有一个 State 的枚举属性用于表示其状态。它们的值及其意义在注释中已经说明。 补充说明以下几点 最开始时任务的 State 是 Disabled唯有当其 State 是 Disabled 时才能以编程的方式使用启动当其 State 是 DisabledByUser 或 DisabledByPolicy需要经由用户手工启动不支持以编程的方式使其 State 成为 Disabled通过 StartupTask 类的 RequestEnableAsync 方法可以向用户请求将其启动调用这个方法后会弹出如下窗口 当用户选择“启用”后下次系统启动后它就会自动启动反之如果选择”禁用“那么它的状态会是 DisabledByUser。要想启用它就需要打开”任务管理器“在”启动“选项卡上右击它选择“启用”。 3. 处理 OnActivated 事件 然后在 App 类的 OnActivated 事件上增加对 ActivationKind 类的判断并作相应的处理即可。代码如下 protected override void OnActivated(IActivatedEventArgs args){Frame rootFrame Window.Current.Content as Frame;if (rootFrame null){rootFrame new Frame();Window.Current.Content rootFrame;}if (args.Kind ActivationKind.StartupTask){var startupArgs args as StartupTaskActivatedEventArgs;}rootFrame.Navigate(typeof(MainPage), args.Kind);Window.Current.Activate();} 最后要注意的是如果启用了自启动当系统启动后应用会以最小化的方式启动。 参考资料 Configure your app to start at log-in