デスクトップ アプリケーションからセカンダリ タイルをピン留めするPin secondary tiles from desktop application

デスクトップ ブリッジを使うと、Windows デスクトップ アプリケーション (Win32、Windows フォーム、WPF など) でセカンダリ タイルをピン留めできます。Thanks to the Desktop Bridge, Windows desktop applications (like Win32, Windows Forms, and WPF) can pin secondary tiles!

セカンダリ タイルのスクリーン ショット

重要

Fall Creators Update が必要です:。SDK 16299 を対象にして、ビルド 16299 または後にセカンダリ タイルをピン留めを搭載しているデスクトップ ブリッジ アプリから。Requires Fall Creators Update: You must target SDK 16299 and be running build 16299 or later to pin secondary tiles from Desktop Bridge apps.

WPF または WinForms アプリケーションからのセカンダリ タイルの追加は、純粋な UWP アプリとよく似ています。Adding a secondary tile from your WPF or WinForms application is very similar to a pure UWP app. 唯一の違いは、メイン ウィンドウのハンドル (HWND) を指定する必要があることです。The only difference is that you must specify your main window handle (HWND). これは、タイルをピン留めするときに、モーダル ダイアログが表示され、タイルをピン留めするかどうかをユーザーに確認するためです。This is because when pinning a tile, Windows displays a modal dialog asking the user to confirm whether they would like to pin the tile. デスクトップ アプリケーションが、SecondaryTile オブジェクトのオーナー ウィンドウを構成しない場合、ダイアログ ボックスを描画する位置を認識することができず、操作は失敗します。If the desktop application doesn't configure the SecondaryTile object with the owner window, Windows doesn't know where to draw the dialog and the operation will fail.

デスクトップ ブリッジを使ったアプリのパッケージ化Package your app with Desktop Bridge

デスクトップ ブリッジを使ってアプリをパッケージ化していない場合、UWP API を使用する前に、デスクトップ ブリッジを使ってアプリをパッケージ化する必要があります。If you have not packaged your app with the Desktop Bridge, you must do so first before you can use any UWP APIs.

IInitializeWithWindow インターフェイスへのアクセスを有効にするEnable access to IInitializeWithWindow interface

アプリケーションが C# や Visual Basic などのマネージ言語で記述されている場合、次の C# の例に示すように、アプリのコードで ComImport と GUID 属性を使用して IInitializeWithWindow インターフェイスを宣言します。If your application is written in a managed language such as C# or Visual Basic, declare the IInitializeWithWindow interface in your app's code with the ComImport and Guid attribute as shown in the following C# example. この例では、コード ファイルに System.Runtime.InteropServices 名前空間の using ステートメントが指定されていることを前提としています。This example assumes that your code file has a using statement for the System.Runtime.InteropServices namespace.

[ComImport]
[Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInitializeWithWindow
{
    void Initialize(IntPtr hwnd);
}

または、C++ で記述されている場合、コードに shobjidl.h ヘッダー ファイルへの参照を追加します。Alternatively, if you are using C++, add a reference to the shobjidl.h header file in your code. このヘッダー ファイルには、IInitializeWithWindow インターフェイスの宣言が含まれています。This header file contains the declaration of the IInitializeWithWindow interface.

セカンダリ タイルを初期化するInitialize the secondary tile

通常の UWP アプリの場合とまったく同じように、新しいセカンダリ タイル オブジェクトを初期化します。Initialize a new secondary tile object exactly like you would with a normal UWP app. セカンダリ タイルの作成とピン留めについて詳しくは、「セカンダリ タイルをピン留めする」をご覧ください。To learn more about creating and pinning secondary tiles, see Pin secondary tiles.

// Initialize the tile with required arguments
SecondaryTile tile = new SecondaryTile(
    "myTileId5391",
    "Display name",
    "myActivationArgs",
    new Uri("ms-appx:///Assets/Square150x150Logo.png"),
    TileSize.Default);

ウィンドウ ハンドルを割り当てるAssign the window handle

これは、デスクトップ アプリケーションにとって重要な手順です。This is the key step for desktop applications. オブジェクトを IInitializeWithWindow オブジェクトにキャストします。Cast the object to an IInitializeWithWindow object. 次に IInitializeWithWindow.Initialize メソッドを呼び出し、モーダル ダイアログのオーナーにするウィンドウのハンドルを渡します。Then, call the IInitializeWithWindow.Initialize method, and pass the handle of the window that you want to be the owner for the modal dialog. 次の C# の例は、アプリのメイン ウィンドウのハンドルをメソッドに渡す方法を示しています。The following C# example shows how to pass the handle of your app’s main window to the method.

// Assign the window handle
IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)tile;
initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);

タイルをピン留めするPin the tile

最後に、通常の UWP アプリと同様、タイルのピン留めを要求します。Finally, request to pin the tile as you would a normal UWP app.

// Pin the tile
bool isPinned = await tile.RequestCreateAsync();

// TODO: Update UI to reflect whether user can now either unpin or pin

タイル通知を送信するSend tile notifications

重要

2018 年 4 月 17134.81 またはそれ以降のバージョンを必要と:17134.81 以降セカンダリ タイルにデスクトップ ブリッジ アプリからタイルやバッジ通知を送信する現在のビルドを実行する必要があります。Requires April 2018 version 17134.81 or later: You must be running build 17134.81 or later to send tile or badge notifications to secondary tiles from Desktop Bridge apps. この.81 サービス更新プログラムの前に、デスクトップ ブリッジ アプリからセカンダリ タイルにタイル通知またはバッジ通知を送信するときに a 0x80070490 要素が見つかりませんという例外が発生します。Before this .81 servicing update, a 0x80070490 Element not found exception would occur when sending tile or badge notifications to secondary tiles from Desktop Bridge apps.

タイル通知またはバッジ通知の送信は UWP アプリと同じです。Sending tile or badge notifications is the same as UWP apps. 手順については、「ローカル タイル通知の送信」を参照してください。See Send a local tile notification to get started.

参考資料Resources