將應用程式釘選到工作列
現在,您可以以程式設計方式要求使用者將 Win32 或 UWP 應用程式釘選到工作列,其方法類似於將應用程式釘選到「開始」功能表。 您也可以檢查您的應用程式目前是否已釘選,以及工作列是否允許釘選。
重要
需要 Fall Creators Update:您必須以 SDK 16299 為目標,並執行組建 16299 或更新版本,才能使用工作列 API。
重要 API:TaskbarManager 類別
何時應該要求使用者將應用程式釘選到工作列?
TaskbarManager 類別可讓您要求使用者將您的應用程式釘選到任務欄; 使用者必須核准要求。 您投入了大量精力來建立出色的應用程式,現在您有機會要求使用者將其釘選到工作列。 不過,在我們深入探討程式碼之前,在您設計體驗的過程中務必牢記以下事項:
- 請務必在應用程式中製作不會干擾且容易關閉的 UX,並提供清楚的行動號召。 避免使用對話方塊和飛出視窗來達成此目標。 建議使用可存取的釘選圖示或類似的 UX,但這不是必要的。
- 在要求使用者釘選應用程式之前,請確保您的應用程式對使用者有價值。
- 如果磚已釘選或裝置不支援,請勿要求使用者釘選您的應用程式。 (本文說明如何確定是否支援釘選。)
- 請勿重複詢問使用者是否要釘選您的應用程式 (使用者可能會覺得很煩)。
- 請勿在沒有明確使用者互動,或應用程式已最小化/未開啟的情況下,呼叫釘選 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 應用程式可以在多種裝置上運作; 並非所有裝置都支援工作列。 目前,只有桌面裝置支援工作列。 此外,應用程式可能會要求釘選,但系統可能不允許這麼做。 建議應用程式在 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;
重要
實際進行呼叫時還必須滿足一些要求才能允許釘選要求:
- 應用程式處於前景
- 應用程式具有「開始」功能表項目
如果無法滿足這些要求並不會導致異常,只會拒絕釘選要求。 可以呼叫 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
。