如何从外部通过URI直接打开指定UWP应用的高级设置页?
解答
1. 外部通过URI打开是否支持?
不支持。微软目前并未公开提供从UWP应用外部通过ms-settings:系列URI直接跳转至特定应用「Advanced options」页的能力。右键开始菜单的「App settings」是系统内部私有实现,与公开的URI/API方案无关。你测试的带参数URI仅能打开「Apps > Installed apps」概览页,也验证了外部调用无法实现定向跳转的现状。
2. 若支持的正确格式?
由于外部调用不被支持,不存在对应的有效查询字符串格式。仅在UWP应用内部调用ms-settings:appsfeatures-app时,系统会自动关联当前应用的高级设置页,无需额外参数。
3. 不支持时的官方替代方法?
可以使用Windows UI自动化框架(UIAutomation)结合PowerShell脚本实现自动化打开,这是官方认可的Windows界面自动化方案,示例脚本如下:
# 1. 获取目标应用的包家族名称(以计算器为例) $packageFamilyName = (Get-AppxPackage *Calculator*).PackageFamilyName # 2. 打开「Apps > Installed apps」设置页面 Start-Process ms-settings:appsfeatures Start-Sleep -Seconds 2 # 等待页面加载完成 # 3. 加载UIAutomation程序集 Add-Type -AssemblyName UIAutomationClient $rootElement = [System.Windows.Automation.AutomationElement]::RootElement $invokePattern = [System.Windows.Automation.InvokePattern]::Lookup() # 4. 定位搜索框并输入包家族名称过滤应用 $searchBox = $rootElement.FindFirst( [System.Windows.Automation.TreeScope]::Descendants, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::AutomationIdProperty, "SearchBoxInput" ) ) if ($searchBox) { $searchBox.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Lookup()).SetValue($packageFamilyName) Start-Sleep -Seconds 1 } # 5. 定位目标应用的「更多」按钮并点击 $appElement = $rootElement.FindFirst( [System.Windows.Automation.TreeScope]::Descendants, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::NameProperty, "*$packageFamilyName*" ) ) if ($appElement) { $moreButton = $appElement.FindFirst( [System.Windows.Automation.TreeScope]::Children, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::AutomationIdProperty, "MoreButton" ) ) if ($moreButton) { $moreButton.GetCurrentPattern($invokePattern).Invoke() Start-Sleep -Seconds 0.5 # 6. 定位并点击「Advanced options」选项 $advancedOption = $rootElement.FindFirst( [System.Windows.Automation.TreeScope]::Descendants, [System.Windows.Automation.PropertyCondition]::new( [System.Windows.Automation.AutomationElement]::NameProperty, "Advanced options" ) ) if ($advancedOption) { $advancedOption.GetCurrentPattern($invokePattern).Invoke() } } }
注意:该脚本依赖Windows设置页面的UI元素标识,若系统更新导致页面结构变化,可能需要调整对应的自动化条件参数。
内容的提问来源于stack exchange,提问作者mklement0
相关产品推荐
相关产品推荐

