タスクバーへのセカンダリ タイルのピン留め

スタート画面へのセカンダリ タイルのピン留めと同じように、セカンダリ タイルをタスクバーにピン留めして、ユーザーがアプリ内のコンテンツにすばやくアクセスできるようにすることができます。

タスク バーのピン留め

重要

制限付きアクセス API: この API はアクセスが制限されています。 この API を使用するには、taskbarsecondarytile@microsoft.com にお問い合わせください。

2018 年 10 月の更新プログラムが必要: タスク バーにピン留めするには、SDK 17763 をターゲットとし、ビルド 17763 以降を実行している必要があります。

ガイダンス

セカンダリ タイルを使うと、アプリ内の特定の領域に、一貫した方法で効率的に直接アクセスすることができます。 ユーザーはセカンダリ タイルをタスクバーに "ピン留め" するかどうかを選択できますが、アプリ内のピン留めできる領域は開発者によって決められます。 詳細については、「セカンダリ タイルのガイダンス」を参照してください。

1. API が存在するかどうかを確認し、制限付きアクセスのロックを解除する

以前のデバイスには、タスクバーのピン留め API がありません (以前のバージョンの Windows 10 を対象としている場合)。 そのため、ピン留めできないデバイスにはピン留めボタンを表示しないようにしてください。

また、この機能は制限付きアクセスでロックされています。 アクセスするには、Microsoft にお問い合わせください。 TaskbarManager.RequestPinSecondaryTileAsyncTaskbarManager.IsSecondaryTilePinnedAsyncTaskbarManager.TryUnpinSecondaryTileAsync への API 呼び出しは、アクセス拒否例外で失敗します。 アプリでは、アクセス許可なしでこの API を使用することはできません。また、API 定義はいつでも変更される可能性があります。

API が存在するかどうかを判断するには、ApiInformation.IsMethodPresent メソッドを使用します。 次に、LimitedAccessFeatures API を使用して API のロックを解除します。

if (ApiInformation.IsMethodPresent("Windows.UI.Shell.TaskbarManager", "RequestPinSecondaryTileAsync"))
{
    // API present!
    // Unlock the pin to taskbar feature
    var result = LimitedAccessFeatures.TryUnlockFeature(
        "com.microsoft.windows.secondarytilemanagement",
        "<tokenFromMicrosoft>",
        "<publisher> has registered their use of com.microsoft.windows.secondarytilemanagement with Microsoft and agrees to the terms of use.");

    // If unlock succeeded
    if ((result.Status == LimitedAccessFeatureStatus.Available) ||
        (result.Status == LimitedAccessFeatureStatus.AvailableWithoutToken))
    {
        // Continue
    }
    else
    {
        // Don't show pin to taskbar button or call any of the below APIs
    }
}

else
{
    // Don't show pin to taskbar button or call any of the below APIs
}

2. TaskbarManager インスタンスを取得する

Windows アプリはさまざまなデバイスで実行できます。それらのすべてがタスクバーをサポートするとは限りません。 現時点では、デスクトップ デバイスのみがタスク バーをサポートしています。 また、タスクバーが表示されたり消えたりする場合もあります。 タスクバーが現在存在するかどうかを確認するには、TaskbarManager.GetDefault メソッドを呼び出し、返されたインスタンスが null でないことを確認します。 タスクバーが存在しない場合は、ピン留めボタンを表示しないでください。

1 回の操作 (ピン留めなど) の実行中はインスタンスを保持し、次に別の操作を行うときに新しいインスタンスを取得することをお勧めします。

TaskbarManager taskbarManager = TaskbarManager.GetDefault();

if (taskbarManager != null)
{
    // Continue
}
else
{
    // Taskbar not present, don't display a pin button
}

3. タイルが現在タスクバーにピン留めされているかどうかを確認する

タイルが既にピン留めされている場合は、代わりにピン留め解除ボタンを表示する必要があります。 IsSecondaryTilePinnedAsync メソッドを使用すると、タイルが現在ピン留めされているかどうかを確認できます (ユーザーはいつでもピン留めを外すことができます)。 このメソッドでは、ピン留めされているかどうかを確認するタイルの TileId を渡します。

if (await taskbarManager.IsSecondaryTilePinnedAsync("myTileId"))
{
	// The tile is already pinned. Display the unpin button.
}

else 
{
	// The tile is not pinned. Display the pin button.
}

4. ピン留めが許可されているかどうかを確認する

タスクバーへのピン留めは、グループ ポリシーによって無効にすることができます。 TaskbarManager.IsPinningAllowed プロパティを使用すると、ピン留めが許可されているかどうかを確認できます。

ユーザーがピン留めボタンをクリックしたときに、このプロパティを確認する必要があります。false の場合は、このコンピューターでピン留めが許可されていないことを知らせるメッセージ ダイアログを表示します。

TaskbarManager taskbarManager = TaskbarManager.GetDefault();
if (taskbarManager == null)
{
    // Display message dialog informing user that taskbar is no longer present, and then hide the button
}

else if (taskbarManager.IsPinningAllowed == false)
{
    // Display message dialog informing user pinning is not allowed on this machine
}

else
{
    // Continue pinning
}

5. タイルを構築してピン留めする

ユーザーがピン留めボタンをクリックし、API が存在し、タスクバーが存在し、ピン留めが許可されていることを確認しました。これでピン留めすることができます。

最初に、スタート画面にピン留めする場合と同じように、セカンダリ タイルを作成します。 セカンダリ タイルのプロパティの詳細については、「スタート画面へのセカンダリ タイルのピン留め」を参照してください。 ただし、タスクバーにピン留めする場合は、以前に必要だったプロパティに加えて、Square44x44Logo (タスクバーで使用されるロゴ) も必要です。 この操作を行わない場合、例外がスローされます。

次に、このタイルを RequestPinSecondaryTileAsync メソッドに渡します。 これはアクセスが制限されているため、確認ダイアログが表示されず、UI スレッドは必要ありません。 ただし、これが制限付きアクセス以外で開かれている場合、制限付きアクセスを使用していない呼び出し元にはダイアログが表示され、UI スレッドを使用する必要があります。

// Initialize the tile (all properties below are required)
SecondaryTile tile = new SecondaryTile("myTileId");
tile.DisplayName = "PowerPoint 2016 (Remote)";
tile.Arguments = "app=powerpoint";
tile.VisualElements.Square44x44Logo = new Uri("ms-appdata:///AppIcons/PowerPoint_Square44x44Logo.png");
tile.VisualElements.Square150x150Logo = new Uri("ms-appdata:///AppIcons/PowerPoint_Square150x150Logo.png");

// Pin it to the taskbar
bool isPinned = await taskbarManager.RequestPinSecondaryTileAsync(tile);

このメソッドは、タイルがタスクバーにピン留めされたかどうかを示すブール値を返します。 タイルが既にピン留めされていた場合、メソッドは既存のタイルを更新し、true を返します。 ピン留めが許可されていないか、タスクバーがサポートされていない場合、メソッドは false を返します。

タイルを列挙する

作成したタイルのうち、スタート画面、タスクバー、またはその両方にピン留めされているものをすべて表示するには、FindAllAsync を使用します。 その後、これらのタイルがタスクバーにピン留めされているか、スタート画面にピン留めされているかを確認できます。 サーフェイスがサポートされていない場合、これらのメソッドは false を返します。

var taskbarManager = TaskbarManager.GetDefault();
var startScreenManager = StartScreenManager.GetDefault();

// Look through all tiles
foreach (SecondaryTile tile in await SecondaryTile.FindAllAsync())
{
    if (taskbarManager != null && await taskbarManager.IsSecondaryTilePinnedAsync(tile.TileId))
    {
        // Tile is pinned to the taskbar
    }

    if (startScreenManager != null && await startScreenManager.ContainsSecondaryTileAsync(tile.TileId))
    {
        // Tile is pinned to Start
    }
}

タイルを更新する

既にピン留めされているタイルを更新するには、「セカンダリ タイルを更新する」の説明に従って、SecondaryTile.UpdateAsync メソッドを使用します。

タイルのピン留めを外す

タイルが現在ピン留めされている場合、アプリにピン留め解除ボタンを表示する必要があります。 タイルのピン留めを外すには、TryUnpinSecondaryTileAsync を呼び出して、ピン留めを外すセカンダリ タイルの TileId を渡します。

このメソッドは、タイルがタスクバーにピン留めされていないかどうかを示すブール値を返します。 そもそもタイルがピン留めされていなかった場合も、true が返されます。 ピン留め解除が許可されていない場合は、false が返されます。

タイルがタスクバーだけにピン留めされていた場合は、どこにもピン留めされていないため、タイルが削除されます。

var taskbarManager = TaskbarManager.GetDefault();
if (taskbarManager != null)
{
    bool isUnpinned = await taskbarManager.TryUnpinSecondaryTileAsync("myTileId");
}

タイルを削除する

すべての場所 (スタート画面、タスクバー) からタイルのピン留めを外す場合は、RequestDeleteAsync メソッドを使用します。

これは、ユーザーがピン留めしたコンテンツが適用されなくなった場合に適しています。 たとえば、アプリでノートブックをスタート画面とタスクバーにピン留めした後、ユーザーがそのノートブックを削除した場合、ノートブックに関連付けられているタイルを削除するだけで済みます。

// Initialize a secondary tile with the same tile ID you want removed.
// Or, locate it with FindAllAsync()
SecondaryTile toBeDeleted = new SecondaryTile(tileId);

// And then delete the tile
await toBeDeleted.RequestDeleteAsync();

スタート画面からのみピン留めを外す

セカンダリ タイルをタスクバーに残したままスタート画面からのみピン留めを外す場合は、StartScreenManager.TryRemoveSecondaryTileAsync メソッドを呼び出します。 他のサーフェイスにピン留めされていない場合、同様にタイルが削除されます。

このメソッドは、タイルがスタート画面にピン留めされていないかどうかを示すブール値を返します。 そもそもタイルがピン留めされていなかった場合も、true が返されます。 ピン留め解除が許可されていない場合、またはスタート画面がサポートされていない場合、false が返されます。

await StartScreenManager.GetDefault().TryRemoveSecondaryTileAsync("myTileId");

リソース