将应用固定到任务栏
现在,可以通过编程方式请求用户将 Win32 或 UWP 应用固定到任务栏,类似于将应用固定到“开始”菜单的方式。 可以检查应用当前是否已固定,以及任务栏是否允许固定。
重要
需要 Fall Creators Update:目标必须为 SDK 16299,并且必须运行版本 16299 或更高版本才能使用任务栏 API。
重要的 API:TaskbarManager 类
何时应要求用户将你的应用固定到任务栏?
TaskbarManager 类允许要求用户将你的应用固定到任务栏,用户必须批准此请求。 你投入了大量精力来构建一个出色的应用,现在你有机会要求用户将其固定到任务栏。 但在我们深入研究代码之前,在设计体验时需要牢记以下几点:
- 务必在你的应用中设计无干扰且易于退出的用户体验,并有一个明确的行动号召。 避免使用对话框和浮出控件实现此目的。 建议使用可访问的固定图标或类似的用户体验,但并不强制要求。
- 在要求用户固定应用之前,务必确保你的应用对用户具有价值。
- 如果磁贴已固定或设备不支持,切勿要求用户固定你的应用。 (本文介绍如何确定是否支持固定。)
- 切勿反复要求用户固定你的应用(可能会让用户讨厌)。
- 切勿在没有显式用户交互的情况下调用固定 API,或者在应用最小化/未打开时调用。 你的应用必须位于前台,才能使进程正常运行。
- 切勿使用安装程序调用 API。
受限访问功能 (LAF) 审批
重要
任务栏固定是一项受限访问功能(请参阅 LimitedAccessFeatures 类)。 有关详细信息或若要请求解锁令牌,请使用 LAF 访问令牌请求表单。
1.检查是否存在所需的 API
UWP
如果你的应用支持较旧版本的 Windows 10,则需要检查 TaskbarManager
类是否可用。 你可以使用 ApiInformation.IsTypePresent 方法执行此检查。 如果 TaskbarManager
类不可用,请避免执行对 API 的任何调用。
if (ApiInformation.IsTypePresent("Windows.UI.Shell.TaskbarManager"))
{
// Taskbar APIs exist!
}
else
{
// Older version of Windows, no taskbar APIs
}
Win32
若要从 Win32 桌面应用使用 TaskbarManager
,则需要检查是否存在桌面应用支持。 你可以通过在 TaskbarManager
激活工厂上查找 ITaskbarManagerDesktopAppSupportStatics
标记接口来执行此检查。 如果此接口不可用,则无法从桌面应用使用 TaskbarManager
。
if (winrt::try_get_activation_factory<winrt::Windows::UI::Shell::TaskbarManager, winrt::Windows::UI::Shell::ITaskbarManagerDesktopAppSupportStatics>())
{
// TaskbarManager desktop app support is available.
}
else
{
// TaskbarManager desktop app support is not available.
}
2.检查任务栏是否存在并允许固定
Windows 应用可以在各种设备上运行;并非所有设备都支持任务栏。 目前,只有桌面设备支持任务栏。 此外,应用可能会请求固定,但在任何给定时间都不允许固定。 建议应用在涉及用户体验之前检查是否允许固定,以免用户感到困惑。
即使任务栏可用,用户计算机上的组策略也可能会禁用任务栏固定。 因此,在尝试固定应用之前,需要检查是否支持固定到任务栏。 如果任务栏存在并允许固定,则 TaskbarManager.IsPinningAllowed 属性会返回 true
。
// Check if taskbar allows pinning, apps may request pinning, but pinning may not be allowed at any given time. It is suggested that apps check whether pinning is allowed before a UX is surfaced in order to prevent confusing users.
bool isPinningAllowed = TaskbarManager.GetDefault().IsPinningAllowed;
重要
此外,在实际进行调用时还必须满足一些要求,才能允许固定请求:
- 应用位于前台
- 应用具有“开始”菜单项
如果未满足这些要求,不会导致异常,只会拒绝固定请求。 可以调用 IsPinningAllowed
以确定是否允许固定请求(提示)。
注意
如果不想将应用固定到任务栏,只想确定任务栏是否可用,请使用 TaskbarManager.IsSupported 属性。
3.检查应用当前是否已固定到任务栏
显然,如果应用已固定到任务栏,则无需要求用户将应用固定到任务栏。 可以使用 TaskbarManager.IsCurrentAppPinnedAsync 方法检查在询问用户之前应用是否已固定。
// Check whether your app is currently pinned
bool isPinned = await TaskbarManager.GetDefault().IsCurrentAppPinnedAsync();
if (isPinned)
{
// The app is already pinned--no point in asking to pin it again!
}
else
{
//The app is not pinned.
}
4.固定应用
如果任务栏存在并且允许固定,同时你的应用当前未固定,则可能需要显示一个小提示,让用户知道他们可以固定你的应用。 例如,你可以在 UI 中的某处显示用户可以单击的固定图标。
如果用户单击你的固定建议 UI,则将调用 TaskbarManager.RequestPinCurrentAppAsync 方法。 此方法将显示一个对话框,要求用户确认是否要将你的应用固定到任务栏。
重要
此对话框必须从前台 UI 线程调用,否则将导致异常。
// Request to be pinned to the taskbar.
bool isPinned = await TaskbarManager.GetDefault().RequestPinCurrentAppAsync();
此方法会返回一个布尔值,指明你的应用现在是否已固定到任务栏。 如果你的应用已固定,此方法将立即返回 true
,而不会向用户显示对话框。 如果用户在对话框中单击“否”,或者不允许将应用固定到任务栏,此方法将返回 false
。 否则,如果用户单击“是”,应用固定完成,API 将返回 true
。