現在,您可以以程式設計方式要求使用者將 Win32 或 UWP 應用程式釘選到工作列,其方法類似於將應用程式釘選到「開始」功能表。 您也可以檢查您的應用程式目前是否已釘選,以及工作列是否允許釘選。
Important
需要 Fall Creators Update:您必須以 SDK 16299 為目標,並執行版本 16299 或更新版本,才能使用工作列 API。
重要 API:TaskbarManager 類別
何時應該要求使用者將應用程式釘選到工作列?
TaskbarManager 類別可讓您要求使用者將您的應用程式釘選到任務欄; 使用者必須核准要求。 您投入了大量心力來建置出色的應用程式,現在有機會要求使用者將它固定在任務欄上。 不過,在我們深入探討程式碼之前,在您設計體驗的過程中務必牢記以下事項:
- 請務必在應用程式中製作不會干擾且容易關閉的 UX,並提供清楚的行動號召。 請避免將對話框和彈出視窗用於此目的。 建議使用可存取的釘選圖示或類似的 UX,但這不是必要的。
- 在要求使用者釘選應用程式之前,請確保您的應用程式對使用者有價值。
- 如果磚已釘選或裝置不支援,請勿要求使用者釘選您的應用程式。 這篇文章說明如何判斷是否支援固定。
- 不要重複 請求使用者釘選您的應用程式(他們可能會感到厭煩)。
- 請勿在沒有明確使用者互動,或應用程式已最小化/未開啟的情況下,呼叫釘選 API。 您的應用程式必須位於前景,才能使該程序正常運作。
- 請勿使用安裝程式來呼叫 API。
限制存取功能 (LAF) 核准
Important
工作列釘選是一項受限存取功能 (請參閱 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,則需要檢查是否有桌面應用程式支援。 您可以在 ITaskbarManagerDesktopAppSupportStatics 啟動工廠中尋找 TaskbarManager 標記介面來執行此檢查。 如果此介面不可用,那麼您將無法從桌面應用程式使用 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 應用程式可以在各種不同的裝置上執行;並非所有專案都支援任務列。 現在,只有桌面裝置支援任務列。 此外,應用程式可能會要求釘選,但系統可能不允許這麼做。 建議應用程式在 UX 出現之前檢查是否允許釘選,以避免讓使用者感到困惑。
即使任務列可供使用,用戶計算機上的群組原則仍可能會停用任務列釘選。 在您嘗試將應用程式釘選之前,您需要檢查是否支援釘選到工作列。 如果工作列存在並允許釘選,則 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;
Important
實際進行呼叫時還必須滿足一些要求才能允許釘選要求:
- 應用程式處於前景
- 應用程式具有「開始」功能表項目
- 若要顯示通知,用戶必須啟用系統通知。 我們建議您將這項需求呈現給應用程式 UX 內的使用者。
如果無法滿足這些要求並不會導致異常,只會拒絕釘選要求。 可以呼叫 IsPinningAllowed 來判斷是否允許釘選要求 (提示)。
Note
如果您不想將應用程式釘選到工作列,而只想了解工作列是否可用,請使用 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,您將呼叫 TaskbarManager.RequestPinCurrentAppAsync 方法。 此方法會顯示一個對話方塊,要求使用者確認他們希望將您的應用程式釘選到工作列。
Important
這必須從前台 UI 執行緒呼叫,否則將拋出例外。
// Request to be pinned to the taskbar.
bool isPinned = await TaskbarManager.GetDefault().RequestPinCurrentAppAsync();
此方法會傳回布林值,指示您的應用程式現在是否釘選到工作列。 如果您的應用程式已釘選,該方法會立即傳回 true,而不向使用者顯示對話方塊。 如果使用者在對話方塊中按一下 [否],或不允許將您的應用程式釘選到工作列,則該方法將傳回 false。 或者使用者點選了 [是] 且應用程式已釘選,且 API 將傳回 true。