Připněte aplikaci na hlavní panel

Uživatele můžete programově požádat o připnutí aplikace Win32 nebo WinUI na hlavní panel podobně jako připnutí aplikace do nabídky Start. Můžete také zkontrolovat, jestli je vaše aplikace aktuálně připnutá a jestli panel úloh umožňuje připínání.

Snímek obrazovky s hlavním panelem Windows 11 zobrazujícím aplikaci připnutou tam

Important

Vyžaduje Fall Creators Update: Pokud chcete používat rozhraní API hlavního panelu, musíte cílit na sadu SDK 16299 a spustit build 16299 nebo novější.

Důležitá rozhraní API: TaskbarManager – třída

Kdy byste měli požádat uživatele, aby připnul aplikaci na hlavní panel?

Třída TaskbarManager umožňuje požádat uživatele, aby připnul aplikaci na hlavní panel; uživatel musí žádost schválit. Hodně se snažíte vytvořit hvězdnou aplikaci a teď máte možnost požádat uživatele, aby ji připnul na hlavní panel. Než se ale ponoříme do kódu, mějte na paměti několik věcí, které byste měli při navrhování svých zkušeností mít na paměti:

  • Vytvořte v aplikaci neurušující a snadno přípustné uživatelské rozhraní s jasným voláním k akci. Nepoužívejte dialogová okna a kontextové rámečky pro tento účel. Doporučuje se použití ikon pro zvýšení přístupnosti nebo podobných prvků uživatelského rozhraní, ale není to nutné.
  • Než požádáte uživatele, aby svou aplikaci připnul, ujistěte se, že má pro něj hodnotu.
  • Nepožadujte uživatele, aby připnul aplikaci, pokud je dlaždice už připnutá nebo zařízení ji nepodporuje. Tento článek vysvětluje, jak určit, zda je připnutí podporováno.
  • Neopakovaně nepožadujte uživatele, aby připevnil vaši aplikaci (pravděpodobně jej to bude rozčilovat).
  • Nezavolejte rozhraní API pro připnutí bez explicitní interakce uživatele nebo když je aplikace minimalizovaná nebo neotevřená. Aby proces fungoval, musí být vaše aplikace v popředí.
  • Nepoužívejte instalační programy k volání rozhraní API.

Schválení funkce omezeného přístupu (LAF)

Important

Připnutí hlavního panelu je funkce omezeného přístupu v některých verzích Windows (viz Třída LimitedAccessFeatures). Další informace nebo žádost o odemknutí tokenu použijte formulář žádosti o přístupový token LAF.

Omezení omezeného přístupu se odebírá z Windows počínaje KB5074105 (buildy operačního systému 26200.7705 a 26100.7705).

Ve verzích systému Windows, které vyžadují přístupový token LAF, musíte nejprve zavolat LimitedAccessFeatures.TryUnlockFeature, než zavoláte rozhraní API pro připnutí na hlavní panel. V novějších verzích není přístup k připnutí hlavního panelu omezen a můžete pokračovat přímo voláním rozhraní API pro připnutí hlavního panelu.

Pomocí tohoto kódu určete, jestli potřebujete volat TryUnlockFeature , nebo jestli můžete volání přeskočit a připnout aplikaci bez přístupového tokenu LAF.

 // LAF API seed value for com.microsoft.windows.taskbar.pin
 constexpr PCWSTR c_taskbarPinLAFSeedValue =
     L"4096B239A7295B635C090E647E867B5707DA6AB6CB78340B01FE4E0C8F4953D4";
 
 // Returns true if a Limited Access Feature token is required
 // for taskbar pinning on this machine.
 inline bool IsLAFTokenRequiredForTaskbarPinning()
 {
     wil::unique_hkey hKey;
     if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
             L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModel"
             L"\\LimitedAccessFeatures\\com.microsoft.windows.taskbar.pin",
             0, KEY_READ, &hKey) != ERROR_SUCCESS)
     {
         return false;
     }
 
     DWORD value = 0;
     DWORD size = sizeof(value);
     LSTATUS status = RegQueryValueExW(hKey.get(),
         c_taskbarPinLAFSeedValue,
         nullptr, nullptr,
         reinterpret_cast<LPBYTE>(&value), &size);
 
     return (status == ERROR_SUCCESS) && (value != 0);
 }

1. Zkontrolujte, jestli požadovaná rozhraní API existují.

Win32

Pokud chcete používat TaskbarManager ve vaší desktopové aplikaci Win32, budete muset zkontrolovat, zda je k dispozici podpora desktopových aplikací. K provedení této kontroly můžete vyhledat ITaskbarManagerDesktopAppSupportStatics rozhraní markéru v TaskbarManager aktivační továrně. Pokud toto rozhraní není dostupné, nebudete ho moct používat TaskbarManager z desktopové aplikace.

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. Zkontrolujte, zda je hlavní panel přítomen a umožňuje připnutí.

Aplikace pro Windows můžou běžet na široké škále zařízení; ne všechny podporují hlavní panel. V tuto chvíli podporují hlavní panel jenom desktopová zařízení. Aplikace navíc můžou požadovat připnutí, ale připnutí nemusí být v daném okamžiku povolené. Je doporučeno, aby aplikace před zobrazením uživatelského rozhraní zkontrolovaly, jestli je povoleno připnutí, aby uživatelé nebyli zmatení.

I když je hlavní panel dostupný, můžou zásady skupiny na počítači uživatele zakázat připnutí hlavního panelu. Než se tedy pokusíte připnout aplikaci, musíte zkontrolovat, jestli je připnutí na hlavní panel podporované. Vlastnost TaskbarManager.IsPinningAllowed vrátí true, pokud je hlavní panel k dispozici a umožňuje připnutí.

// 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

Existují také požadavky, které musí být splněny v době, kdy je volání skutečně provedeno pro povolení žádosti o pin kód:

  • Aplikace je na popředí.
  • Aplikace obsahuje položku nabídky Start
  • Aby se zobrazila oznámení, musí mít uživatel povolená systémová oznámení. Tento požadavek doporučujeme pro uživatele v uživatelském prostředí aplikace zobrazit.

Tyto požadavky nebudou mít za následek výjimku, pokud není splněná, žádost o pin kód bude zamítnuta. IsPinningAllowed lze volat k určení, zda bude povolena žádost o PIN kód.

Note

Pokud nechcete aplikaci připnout na hlavní panel a chcete zjistit, jestli je hlavní panel dostupný, použijte vlastnost TaskbarManager.IsSupported .

3. Zkontrolujte, jestli je vaše aplikace aktuálně připnutá na hlavní panel.

Je zřejmé, že neexistuje žádný smysl požádat uživatele, aby vám umožnil připnout aplikaci na hlavní panel, pokud už je tam připnutá. Pomocí metody TaskbarManager.IsCurrentAppPinnedAsync můžete zkontrolovat, jestli je aplikace již připnutá, než požádáte uživatele.

// 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. Připnutí aplikace

Pokud je hlavní panel k dispozici a připnutí je povolené a vaše aplikace aktuálně není připnutá, můžete uživatelům ukázat malý tip, který uživatelům dá vědět, že můžou aplikaci připnout. Můžete například zobrazit ikonu připnutí někde v uživatelském rozhraní, na kterou uživatel může kliknout.

Pokud uživatel klikne na uživatelské rozhraní návrhu připnutí, zavoláte metodu TaskbarManager.RequestPinCurrentAppAsync . Tato metoda zobrazí dialogové okno s dotazem uživatele, aby potvrdil, že má být vaše aplikace připnutá na hlavní panel.

Important

Musí se volat z popředního vlákna uživatelského rozhraní, jinak se vyvolá výjimka.

// Request to be pinned to the taskbar.
bool isPinned = await TaskbarManager.GetDefault().RequestPinCurrentAppAsync();

Připnout dialog

Tato metoda vrátí logickou hodnotu, která označuje, jestli je teď vaše aplikace připnutá na hlavní panel. Pokud už byla vaše aplikace připnutá, metoda okamžitě vrátí true bez zobrazení dialogového okna uživateli. Pokud uživatel v dialogovém okně klikne na „ne“ nebo připnutí vaší aplikace na hlavní panel není povoleno, metoda vrátí false. Jinak uživatel kliknul na ano, aplikace byla připnutá a rozhraní API vrátí true.

Resources