自動再生による自動起動

自動再生を使って、コンピューターにデバイスが接続されたときのオプションとしてアプリを提供できます。 これには、カメラやメディア プレーヤーなどのボリューム デバイス以外のデバイス、または USB サム ドライブ、SD カード、DVD などのボリューム デバイスが含まれます。 また、ユーザーが近接通信 (タップ) を使用して 2 台の PC 間でファイルを共有するときに、オプションとしてアプリを提供するために自動再生を使用することもできます。

Note

デバイスの製造元の場合で、Microsoft Store デバイス アプリをデバイスの自動再生ハンドラーとして関連付ける必要がある場合は、デバイス メタデータ内でそのアプリを識別できます。 詳しくは、「Microsoft Store デバイス アプリの自動再生」を参照してください。

自動再生コンテンツへの登録

自動再生コンテンツ イベントのオプションとしてアプリを登録できます。 自動再生コンテンツ イベントは、カメラのメモリ カード、サム ドライブ、DVD などのボリューム デバイスが PC に挿入されたときに発生します。 ここでは、カメラのボリューム デバイスが挿入されたときに、アプリを自動再生オプションとして識別する方法について説明します。

このチュートリアルでは、画像ファイルを表示したり、画像にコピーしたりするアプリを作成しました。 自動再生の ShowPicturesOnArrival コンテンツ イベントにアプリを登録しました。

自動再生では、近接通信 (タップ) を使用して PC 間で共有されるコンテンツのコンテンツ イベントも発生します。 このセクションの手順とコードを使用して、近接通信を使用する PC 間で共有されるファイルを処理できます。 次の表に、近接通信を使用してコンテンツを共有するために使用できる自動再生コンテンツ イベントを一覧表示します。

アクション 自動再生コンテンツ イベント
音楽の共有 PlayMusicFilesOnArrival
ビデオの共有 PlayVideoFilesOnArrival

近接通信を使用してファイルを共有する場合、FileActivatedEventArgs オブジェクトの Files プロパティには、すべての共有ファイルを含むルート フォルダーへの参照が含まれます。

手順 1: 新しいプロジェクトを作成し、自動再生の宣言を追加する

  1. Microsoft Visual Studio を開き、[ファイル] メニューから [新しいプロジェクト] を選択します。 [Visual C#] セクションの [Windows] で、[空のアプリ (ユニバーサル Windows)] を選択します。 アプリに「AutoPlayDisplayOrCopyImages」という名前を付け、[OK] をクリックします 。
  2. Package.appxmanifest ファイルを開き、[機能] タブを選択します。リムーバブル記憶域機能と画像ライブラリ機能を選択します。 これにより、アプリはカメラ メモリ用のリムーバブル記憶域デバイスにアクセスでき、ローカルの画像にアクセスできます。
  3. マニフェスト ファイルで、[宣言] タブを選択します。[使用可能な宣言] ドロップダウン リストで、[自動再生コンテンツ] を選択し、[追加] をクリックします。 [サポートされている宣言] の一覧に追加された新しい [自動再生コンテンツ] 項目を選択します。
  4. 自動再生コンテンツの宣言により、自動再生でコンテンツ イベントが発生したときに、アプリはオプションとして識別されます。 このイベントは、DVD やサム ドライブなどのボリューム デバイスのコンテンツに基づきます。 自動再生は、ボリューム デバイスのコンテンツを調べ、発生させるコンテンツ イベントを決定します。 ボリュームのルートに DCIM、AVCHD、または PRIVATE\ACHD フォルダーが含まれる場合、または自動再生コントロール パネルで [各メディア タイプの処理方法を選択する] を有効にしていてボリュームのルートで画像が見つかった場合、自動再生で ShowPicturesOnArrival イベントが発生します。 [起動アクション] セクションで、最初の起動アクションの値を下の表 1 から入力します。
  5. [自動再生コンテンツ] 項目の [起動アクション] セクションで、[新規追加] をクリックして、2 つ目の起動アクションを追加します。 2 番目の起動アクションの値を下の表 2 に入力します。
  6. [使用可能な宣言] ドロップダウン リストで、[ファイルの種類の関連付け] を選択し、[追加] をクリックします。 新しい [ファイルの種類の関連付け] 宣言の [プロパティ] で、[表示名] フィールドを "自動再生コピー" または "画像を表示する"[名前] フィールドを image_association1 に設定します。 [サポートされているファイルの種類] セクションで、[新規追加] をクリックします。 [ファイルの種類] フィールドを .jpg に設定します。 [サポートされているファイルの種類] セクションで、新しいファイルの関連付けの [ファイルの種類] フィールドを .png に設定します。 コンテンツ イベントの場合、自動再生では、アプリに明示的に関連付けられていないファイルの種類がすべて除外されます。
  7. マニフェスト ファイルを保存して閉じます。

テーブル 1

設定 Value
動詞 show
アクション表示名 画像を表示する
コンテンツ イベント ShowPicturesOnArrival

[アクション表示名] 設定により、自動再生でアプリに表示される文字列を識別します。 [動詞] 設定では、選択されたオプションに応じてアプリに渡される値を指定します。 自動再生のイベントの起動アクションは複数指定できます。また、[動詞] 設定を使って、ユーザーがアプリに選んだオプションを確認できます。 アプリに渡される起動イベント引数の verb プロパティを調べることでユーザーが選んだオプションを確認できます。 [動詞] 設定には任意の値を使うことができます。ただし、予約されている open は除きます。

表 2

設定 Value
動詞 copy
アクション表示名 ライブラリに画像をコピーする
コンテンツ イベント ShowPicturesOnArrival

手順 2: XAML UI を追加する

MainPage.xaml ファイルを開き、次の XAML を既定の <Grid> セクションに追加します。

<TextBlock FontSize="18">File List</TextBlock>
<TextBlock x:Name="FilesBlock" HorizontalAlignment="Left" TextWrapping="Wrap"
           VerticalAlignment="Top" Margin="0,20,0,0" Height="280" Width="240" />
<Canvas x:Name="FilesCanvas" HorizontalAlignment="Left" VerticalAlignment="Top"
        Margin="260,20,0,0" Height="280" Width="100"/>

手順 3: 初期化コードを追加する

この手順のコードでは、OnFileActivated イベント中にアプリに渡されるスタートアップ引数の 1 つである Verb プロパティの動詞値を確認します。 次に、ユーザーが選択したオプションに関連するメソッドが呼び出されます。 カメラ メモリ イベントの場合、自動再生ではカメラ ストレージのルート フォルダーがアプリに渡されます。 Files プロパティの最初の要素からこのフォルダーを取得できます。

App.xaml.cs ファイルを開き、次のコードを App クラスに追加します。

protected override void OnFileActivated(FileActivatedEventArgs args)
{
    if (args.Verb == "show")
    {
        Frame rootFrame = (Frame)Window.Current.Content;
        MainPage page = (MainPage)rootFrame.Content;

        // Call DisplayImages with root folder from camera storage.
        page.DisplayImages((Windows.Storage.StorageFolder)args.Files[0]);
    }

    if (args.Verb == "copy")
    {
        Frame rootFrame = (Frame)Window.Current.Content;
        MainPage page = (MainPage)rootFrame.Content;

        // Call CopyImages with root folder from camera storage.
        page.CopyImages((Windows.Storage.StorageFolder)args.Files[0]);
    }

    base.OnFileActivated(args);
}

注: DisplayImages メソッドと CopyImages メソッドは、以下の手順で追加されます。

手順 4: 画像を表示するコードを追加する

MainPage.xaml.cs ファイルで、次のコードを MainPage クラスに追加します。

async internal void DisplayImages(Windows.Storage.StorageFolder rootFolder)
{
    // Display images from first folder in root\DCIM.
    var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
    var folderList = await dcimFolder.GetFoldersAsync();
    var cameraFolder = folderList[0];
    var fileList = await cameraFolder.GetFilesAsync();
    for (int i = 0; i < fileList.Count; i++)
    {
        var file = (Windows.Storage.StorageFile)fileList[i];
        WriteMessageText(file.Name + "\n");
        DisplayImage(file, i);
    }
}

async private void DisplayImage(Windows.Storage.IStorageItem file, int index)
{
    try
    {
        var sFile = (Windows.Storage.StorageFile)file;
        Windows.Storage.Streams.IRandomAccessStream imageStream =
            await sFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
        Windows.UI.Xaml.Media.Imaging.BitmapImage imageBitmap =
            new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        imageBitmap.SetSource(imageStream);
        var element = new Image();
        element.Source = imageBitmap;
        element.Height = 100;
        Thickness margin = new Thickness();
        margin.Top = index * 100;
        element.Margin = margin;
        FilesCanvas.Children.Add(element);
    }
    catch (Exception e)
    {
       WriteMessageText(e.Message + "\n");
    }
}

// Write a message to MessageBlock on the UI thread.
private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;

private async void WriteMessageText(string message, bool overwrite = false)
{
    await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
        () =>
        {
            if (overwrite)
                FilesBlock.Text = message;
            else
                FilesBlock.Text += message;
        });
}

手順 5: 画像をコピーするコードを追加する

MainPage.xaml.cs ファイルで、次のコードを MainPage クラスに追加します。

async internal void CopyImages(Windows.Storage.StorageFolder rootFolder)
{
    // Copy images from first folder in root\DCIM.
    var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
    var folderList = await dcimFolder.GetFoldersAsync();
    var cameraFolder = folderList[0];
    var fileList = await cameraFolder.GetFilesAsync();

    try
    {
        var folderName = "Images " + DateTime.Now.ToString("yyyy-MM-dd HHmmss");
        Windows.Storage.StorageFolder imageFolder = await
            Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync(folderName);

        foreach (Windows.Storage.IStorageItem file in fileList)
        {
            CopyImage(file, imageFolder);
        }
    }
    catch (Exception e)
    {
        WriteMessageText("Failed to copy images.\n" + e.Message + "\n");
    }
}

async internal void CopyImage(Windows.Storage.IStorageItem file,
                              Windows.Storage.StorageFolder imageFolder)
{
    try
    {
        Windows.Storage.StorageFile sFile = (Windows.Storage.StorageFile)file;
        await sFile.CopyAsync(imageFolder, sFile.Name);
        WriteMessageText(sFile.Name + " copied.\n");
    }
    catch (Exception e)
    {
        WriteMessageText("Failed to copy file.\n" + e.Message + "\n");
    }
}

手順 6: アプリをビルドして実行する

  1. F5 キーを押してアプリをビルドし、(デバッグ モードで) 実行します。
  2. アプリを実行するには、カメラ メモリ カード、またはカメラの別のストレージ デバイスを PC に挿入します。 次に、自動再生のオプション一覧から package.appxmanifest ファイルで指定したコンテンツ イベント オプションの 1 つを選択します。 このサンプル コードは、カメラ メモリ カードの DCIM フォルダー内にある画像のみを表示またはコピーします。 カメラのメモリ カードの AVCHD または PRIVATE\ACHD フォルダーに画像が格納される場合は、適宜コードを更新する必要があります。

Note

カメラのメモリ カードがない場合は、ルートに DCIM という名前のフォルダーがあり、画像を含むサブフォルダーが DCIM フォルダーにあれば、フラッシュ ドライブを使用できます。

自動再生デバイスへの登録

自動再生デバイス イベントのオプションとしてアプリを登録できます。 自動再生デバイス イベントは、デバイスが PC に接続されると発生します。

ここでは、カメラが PC に接続されているときに、アプリを自動再生オプションとして識別する方法について説明します。 アプリは、WPD\ImageSourceAutoPlay イベントのハンドラーとして登録されます。 これは、カメラやその他のイメージング デバイスから ImageSource であることが MTP を介して通知されたときに Windows ポータブル デバイス (WPD) システムで発生する、一般的なイベントです。 詳細については、「Windows ポータブル デバイス」を参照してください。

重要: Windows.Devices.Portable.StorageDevice API はデスクトップ デバイス ファミリの一部です。 これらの API は、PC などのデスクトップ デバイス ファミリの Windows 10 デバイスでのみ使用できます。

手順 1: 別のプロジェクトを作成し、自動再生の宣言を追加する

  1. Visual Studio を開き、[ファイル] メニューから [新しいプロジェクト] を選択します。 [Visual C#] セクションの [Windows] で、[空のアプリ (ユニバーサル Windows)] を選択します。 アプリに AutoPlayDevice_Camera という名前を付け、[OK] をクリックします。
  2. Package.appxmanifest ファイルを開き、[機能] タブを選択します。[リムーバブル 記憶域] 機能を選択します。 これにより、アプリはリムーバブル記憶域のボリューム デバイスとして、カメラのデータにアクセスできます。
  3. マニフェスト ファイルで、[宣言] タブを選択します。[使用可能な宣言] ドロップダウン リストで、[自動再生デバイス] を選択し、[追加] をクリックします。 [サポートされている宣言] の一覧に追加された新しい [自動再生デバイス] 項目を選択します。
  4. 自動再生デバイスの宣言により、自動再生で既知のイベントのデバイス イベントが発生すると、アプリはオプションとして識別されます。 [起動アクション] セクションで、最初の起動アクションの値を下の表に入力します。
  5. [使用可能な宣言] ドロップダウン リストで、[ファイルの種類の関連付け] を選択し、[追加] をクリックします。 新しい [ファイルの種類の関連付け] 宣言の [プロパティ] で、[表示名] フィールドを "カメラの画像を表示する"[名前] フィールドを camera_association1 に設定します。 [サポートされているファイルの種類] セクションで、(必要に応じて) [新規追加] をクリックします。 [ファイルの種類] フィールドを .jpg に設定します。 [サポートされているファイルの種類] セクションで、もう一度 [新規追加] をクリックします。 新しいファイルの関連付けの [ファイルの種類] フィールドを .png に設定します。 コンテンツ イベントの場合、自動再生では、アプリに明示的に関連付けられていないファイルの種類がすべて除外されます。
  6. マニフェスト ファイルを保存して閉じます。
設定 Value
動詞 show
アクション表示名 画像を表示する
コンテンツ イベント WPD\ImageSource

[アクション表示名] 設定により、自動再生でアプリに表示される文字列を識別します。 [動詞] 設定では、選択されたオプションに応じてアプリに渡される値を指定します。 自動再生のイベントの起動アクションは複数指定できます。また、[動詞] 設定を使って、ユーザーがアプリに選んだオプションを確認できます。 アプリに渡される起動イベント引数の verb プロパティを調べることでユーザーが選んだオプションを確認できます。 [動詞] 設定には任意の値を使うことができます。ただし、予約されている open は除きます。 1 つのアプリで複数の動詞を使用する例については、「自動再生コンテンツへの登録」を参照してください。

手順 2: デスクトップ拡張機能のアセンブリ参照を追加する

Windows ポータブル デバイス (Windows.Devices.Portable.StorageDevice) 上のストレージにアクセスするために必要な API は、デスクトップ デバイス ファミリに含まれます。 つまり、API を使用するには特別なアセンブリが必要であり、これらの呼び出しは、デスクトップ デバイス ファミリ内のデバイス (PC など) でのみ機能します。

  1. ソリューション エクスプローラー[参照] を右クリックしてから、[参照の追加...] を選択します。
  2. [ユニバーサル Windows] を展開し、[拡張機能] をクリックします。
  3. 次に、[UWP 用の Windows デスクトップ拡張機能] を選択し、[OK] をクリックします。

手順 3: XAML UI を追加する

MainPage.xaml ファイルを開き、次の XAML を既定の <Grid> セクションに追加します。

<StackPanel Orientation="Vertical" Margin="10,0,-10,0">
    <TextBlock FontSize="24">Device Information</TextBlock>
    <StackPanel Orientation="Horizontal">
        <TextBlock x:Name="DeviceInfoTextBlock" FontSize="18" Height="400" Width="400" VerticalAlignment="Top" />
        <ListView x:Name="ImagesList" HorizontalAlignment="Left" Height="400" VerticalAlignment="Top" Width="400">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <Image Source="{Binding Path=Source}" />
                        <TextBlock Text="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid Orientation="Horizontal" ItemHeight="100" ItemWidth="120"></WrapGrid>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
    </StackPanel>
</StackPanel>

手順 4: アクティブ化コードを追加する

この手順のコードでは、カメラのデバイス情報 ID を FromId メソッドに渡し、カメラを StorageDevice として参照します。 カメラのデバイス情報 ID を取得するには、最初にイベント引数を DeviceActivatedEventArgs としてキャストし、DeviceInformationId プロパティから値を取得します。

App.xaml.cs ファイルを開き、次のコードを App クラスに追加します。

protected override void OnActivated(IActivatedEventArgs args)
{
   if (args.Kind == ActivationKind.Device)
   {
      Frame rootFrame = null;
      // Ensure that the current page exists and is activated
      if (Window.Current.Content == null)
      {
         rootFrame = new Frame();
         rootFrame.Navigate(typeof(MainPage));
         Window.Current.Content = rootFrame;
      }
      else
      {
         rootFrame = Window.Current.Content as Frame;
      }
      Window.Current.Activate();

      // Make sure the necessary APIs are present on the device
      bool storageDeviceAPIPresent =
      Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Devices.Portable.StorageDevice");

      if (storageDeviceAPIPresent)
      {
         // Reference the current page as type MainPage
         var mPage = rootFrame.Content as MainPage;

         // Cast the activated event args as DeviceActivatedEventArgs and show images
         var deviceArgs = args as DeviceActivatedEventArgs;
         if (deviceArgs != null)
         {
            mPage.ShowImages(Windows.Devices.Portable.StorageDevice.FromId(deviceArgs.DeviceInformationId));
         }
      }
      else
      {
         // Handle case where APIs are not present (when the device is not part of the desktop device family)
      }

   }

   base.OnActivated(args);
}

Note

ShowImages メソッドは次の手順で追加されます。

手順 5: デバイス情報を表示するコードを追加する

StorageDevice クラスのプロパティからカメラに関する情報を取得できます。 この手順のコードでは、アプリの実行時にデバイス名とその他の情報がユーザーに表示されます。 次に、GetImageList メソッドと GetThumbnail メソッド (次の手順で追加する) を呼び出して、カメラに保存されている画像のサムネイルを表示します。

MainPage.xaml.cs ファイルで、次のコードを MainPage クラスに追加します。

private Windows.Storage.StorageFolder rootFolder;

internal async void ShowImages(Windows.Storage.StorageFolder folder)
{
    DeviceInfoTextBlock.Text = "Display Name = " + folder.DisplayName + "\n";
    DeviceInfoTextBlock.Text += "Display Type =  " + folder.DisplayType + "\n";
    DeviceInfoTextBlock.Text += "FolderRelativeId = " + folder.FolderRelativeId + "\n";

    // Reference first folder of the device as the root
    rootFolder = (await folder.GetFoldersAsync())[0];
    var imageList = await GetImageList(rootFolder);

    foreach (Windows.Storage.StorageFile img in imageList)
    {
        ImagesList.Items.Add(await GetThumbnail(img));
    }
}

Note

GetImageList メソッドと GetThumbnail メソッドは次の手順で追加します。

手順 6: 画像を表示するコードを追加する

この手順のコードでは、カメラに保存されている画像のサムネイルが表示されます。 このコードを使ってカメラを非同期で呼び出し、サムネイル画像を取得します。 ただし、次の非同期呼び出しは、前の非同期呼び出しが完了するまで発生しません。 これにより、一度に 1 つの要求のみがカメラに対して行われます。

MainPage.xaml.cs ファイルで、次のコードを MainPage クラスに追加します。

async private System.Threading.Tasks.Task<List<Windows.Storage.StorageFile>> GetImageList(Windows.Storage.StorageFolder folder)
{
    var result = await folder.GetFilesAsync();
    var subFolders = await folder.GetFoldersAsync();
    foreach (Windows.Storage.StorageFolder f in subFolders)
        result = result.Union(await GetImageList(f)).ToList();

    return (from f in result orderby f.Name select f).ToList();
}

async private System.Threading.Tasks.Task<Image> GetThumbnail(Windows.Storage.StorageFile img)
{
    // Get the thumbnail to display
    var thumbnail = await img.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem,
                                                100,
                                                Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);

    // Create a XAML Image object bind to on the display page
    var result = new Image();
    result.Height = thumbnail.OriginalHeight;
    result.Width = thumbnail.OriginalWidth;
    result.Name = img.Name;
    var imageBitmap = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
    imageBitmap.SetSource(thumbnail);
    result.Source = imageBitmap;

    return result;
}

手順 7: アプリをビルドして実行する

  1. F5 キーを押してアプリをビルドし、(デバッグ モードで) 実行します。
  2. アプリを実行するには、カメラをコンピューターに接続します。 次に、自動再生のオプション一覧からアプリを選択します。

Note

すべてのカメラで、WPD\ImageSource 自動再生デバイス イベントがアドバタイズされるわけではありません。

リムーバブル記憶域の構成

メモリ カードやサム ドライブなどのボリューム デバイスは、PC に接続されていると、自動再生デバイスとして識別できます。 これは、ボリューム デバイスのユーザーに表示する自動再生用の特定のアプリを関連付ける必要がある場合には特に便利です。

ここでは、ボリューム デバイスを自動再生デバイスとして識別する方法について説明します。

ボリューム デバイスを自動再生デバイスとして識別するには、autorun.inf ファイルをデバイスのルート ドライブに追加します。 autorun.inf ファイルで、[AutoRun] セクションに CustomEvent キーを追加します。 ボリューム デバイスが PC に接続されると、自動再生によって autorun.inf ファイルが検索され、ボリュームがデバイスとして扱われます。 自動再生では、CustomEvent キーに指定した名前を使用して自動再生イベントが作成されます。 その後、アプリを作成し、その自動再生イベントのハンドラーとしてアプリを登録できます。 デバイスが PC に接続されると、自動再生では、ボリューム デバイスのハンドラーとしてアプリが表示されます。 autorun.inf ファイルの詳細については、「autorun.inf エントリ」を参照してください。

手順 1: autorun.inf ファイルを作成する

ボリューム デバイスのルート ドライブに、autorun.inf という名前のファイルを追加します。 autorun.inf ファイルを開き、次のテキストを追加します。

[AutoRun]
CustomEvent=AutoPlayCustomEventQuickstart

手順 2: 新しいプロジェクトを作成し、自動再生の宣言を追加する

  1. Visual Studio を開き、[ファイル] メニューから [新しいプロジェクト] を選択します。 [Visual C#] セクションの [Windows] で、[空のアプリ (ユニバーサル Windows)] を選択します。 アプリケーションに「AutoPlayCustomEvent」という名前を付けて、[OK]をクリックします。
  2. Package.appxmanifest ファイルを開き、[機能] タブを選択します。[リムーバブル 記憶域] 機能を選択します。 これにより、アプリはリムーバブル記憶域デバイス上のファイルとフォルダーにアクセスできます。
  3. マニフェスト ファイルで、[宣言] タブを選択します。[使用可能な宣言] ドロップダウン リストで、[自動再生コンテンツ] を選択し、[追加] をクリックします。 [サポートされている宣言] の一覧に追加された新しい [自動再生コンテンツ] 項目を選択します。

Note

または、カスタム自動再生イベントに自動再生デバイスの宣言を追加することもできます。

  1. 自動再生コンテンツ イベントの宣言の [起動アクション] セクションで、最初の起動アクションの値を次の表に入力します。
  2. [使用可能な宣言] ドロップダウン リストで、[ファイルの種類の関連付け] を選択し、[追加] をクリックします。 新しい [ファイルの種類の関連付け] 宣言の [プロパティ] で、[表示名] フィールドを ".ms ファイルを表示する"[名前] フィールドを ms_association に設定します。 [サポートされているファイルの種類] セクションで、[新規追加] をクリックします。 [ファイルの種類] フィールドを .ms に設定します。 コンテンツ イベントの場合、自動再生では、アプリに明示的に関連付けられていないファイルの種類がすべて除外されます。
  3. マニフェスト ファイルを保存して閉じます。
設定 Value
動詞 show
アクション表示名 ファイルを表示する
コンテンツ イベント AutoPlayCustomEventQuickstart

コンテンツ イベントの値は、autorun.inf ファイルの CustomEvent キーに指定したテキストです。 [アクション表示名] 設定により、自動再生でアプリに表示される文字列を識別します。 [動詞] 設定では、選択されたオプションに応じてアプリに渡される値を指定します。 自動再生のイベントの起動アクションは複数指定できます。また、[動詞] 設定を使って、ユーザーがアプリに選んだオプションを確認できます。 アプリに渡される起動イベント引数の verb プロパティを調べることでユーザーが選んだオプションを確認できます。 [動詞] 設定には任意の値を使うことができます。ただし、予約されている open は除きます。

手順 3: XAML UI を追加する

MainPage.xaml ファイルを開き、次の XAML を既定の <Grid> セクションに追加します。

<StackPanel Orientation="Vertical">
    <TextBlock FontSize="28" Margin="10,0,800,0">Files</TextBlock>
    <TextBlock x:Name="FilesBlock" FontSize="22" Height="600" Margin="10,0,800,0" />
</StackPanel>

手順 4: アクティブ化コードを追加する

この手順のコードは、ボリューム デバイスのルート ドライブ内にあるフォルダーを表示するメソッドを呼び出します。 自動再生コンテンツ イベントの場合、自動再生は、OnFileActivated イベント中にアプリケーションに渡されるスタートアップ引数でストレージ デバイスのルート フォルダーを渡します。 Files プロパティの最初の要素からこのフォルダーを取得できます。

App.xaml.cs ファイルを開き、次のコードを App クラスに追加します。

protected override void OnFileActivated(FileActivatedEventArgs args)
{
    var rootFrame = Window.Current.Content as Frame;
    var page = rootFrame.Content as MainPage;

    // Call ShowFolders with root folder from device storage.
    page.DisplayFiles(args.Files[0] as Windows.Storage.StorageFolder);

    base.OnFileActivated(args);
}

Note

DisplayFiles メソッドは次の手順で追加されます。

手順 5: フォルダーを表示するコードを追加する

MainPage.xaml.cs ファイルで、次のコードを MainPage クラスに追加します。

internal async void DisplayFiles(Windows.Storage.StorageFolder folder)
{
    foreach (Windows.Storage.StorageFile f in await ReadFiles(folder, ".ms"))
    {
        FilesBlock.Text += "  " + f.Name + "\n";
    }
}

internal async System.Threading.Tasks.Task<IReadOnlyList<Windows.Storage.StorageFile>>
    ReadFiles(Windows.Storage.StorageFolder folder, string fileExtension)
{
    var options = new Windows.Storage.Search.QueryOptions();
    options.FileTypeFilter.Add(fileExtension);
    var query = folder.CreateFileQueryWithOptions(options);
    var files = await query.GetFilesAsync();

    return files;
}

手順 6: アプリケーションをビルドして実行する

  1. F5 キーを押してアプリをビルドし、(デバッグ モードで) 実行します。
  2. アプリを実行するには、メモリ カードまたは別のストレージ デバイスを PC に挿入します。 次に、自動再生ハンドラー オプションの一覧からアプリを選択します。

AutoPlay イベント リファレンス

自動再生システムを使用すると、さまざまなデバイスとボリューム (ディスク) の到着イベントにアプリを登録できます。 自動再生コンテンツ イベントに登録するには、パッケージ マニフェストでリムーバブル記憶域機能を有効にする必要があります。 次の表は、登録できるイベントとその発生時期を示しています。

シナリオ イベント 説明
カメラでの写真の使用 WPD\ImageSource Windows ポータブル デバイスとして識別され、ImageSource 機能を提供するカメラで発生します。
オーディオ プレーヤーでの音楽の使用 WPD\AudioSource Windows ポータブル デバイスとして識別され、AudioSource 機能を提供するメディア プレーヤーで発生します。
ビデオ カメラでのビデオの使用 WPD\VideoSource Windows ポータブル デバイスとして識別され、VideoSource 機能を提供するビデオ カメラで発生します。
接続されているフラッシュ ドライブまたは外付けハード ドライブへのアクセス StorageOnArrival ドライブまたはボリュームが PC に接続されているときに発生します。 ドライブまたはボリュームに、ディスクのルートにある DCIM、AVCHD、または PRIVATE\ACHD フォルダーが含まれている場合は、代わりに ShowPicturesOnArrival イベントが発生します。
大容量ストレージからの写真の使用 (レガシ) ShowPicturesOnArrival ドライブまたはボリュームに、ディスクのルートにある DCIM、AVCHD、または PRIVATE\ACHD フォルダーが含まれている場合に発生します。 自動再生コントロール パネルで [各メディア タイプの処理方法を選択する] を有効にしている場合は、自動再生によって PC に接続されているボリュームが調べられ、ディスク上のコンテンツの種類が確認されます。 画像が見つかると、ShowPicturesOnArrival が発生します。
近接通信共有で写真を受け取る (タップして送信) ShowPicturesOnArrival ユーザーが近接通信 (タップして送信) を使用してコンテンツを送信すると、自動再生で共有ファイルが検査され、コンテンツの種類が判断されます。 画像が見つかると、ShowPicturesOnArrival が発生します。
大容量ストレージからの音楽の使用 (レガシ) PlayMusicFilesOnArrival ユーザーがコントロール パネルの [自動再生] で [メディアの種類ごとに実行する操作を選択する] を有効にし ている場合、自動再生で、PC に接続されているボリュームが検査され、ディスク上のコンテンツの種類が判断されます。 音楽ファイルが見つかると、PlayMusicFilesOnArrival が発生します。
近接通信共有で音楽を受け取る (タップして送信) PlayMusicFilesOnArrival ユーザーが近接通信 (タップして送信) を使用してコンテンツを送信すると、自動再生で共有ファイルが検査され、コンテンツの種類が判断されます。 音楽ファイルが見つかると、PlayMusicFilesOnArrival が発生します。
大容量ストレージからのビデオの使用 (レガシ) PlayVideoFilesOnArrival ユーザーがコントロール パネルの [自動再生] で [メディアの種類ごとに実行する操作を選択する] を有効にし ている場合、自動再生で、PC に接続されているボリュームが検査され、ディスク上のコンテンツの種類が判断されます。 ビデオ ファイルが見つかると、PlayVideoFilesOnArrival が発生します。
近接通信共有でビデオを受け取る (タップして送信) PlayVideoFilesOnArrival ユーザーが近接通信 (タップして送信) を使用してコンテンツを送信すると、自動再生で共有ファイルが検査され、コンテンツの種類が判断されます。 ビデオ ファイルが見つかると、PlayVideoFilesOnArrival が発生します。
接続されたデバイスからの混合ファイル セットの処理 MixedContentOnArrival ユーザーがコントロール パネルの [自動再生] で [メディアの種類ごとに実行する操作を選択する] を有効にし ている場合、自動再生で、PC に接続されているボリュームが検査され、ディスク上のコンテンツの種類が判断されます。 特定のコンテンツの種類 (画像など) が見つからない場合は、MixedContentOnArrival が発生します。
近接通信共有を使用したファイルの混在セットの処理 (タップと送信) MixedContentOnArrival ユーザーが近接通信 (タップして送信) を使用してコンテンツを送信すると、自動再生で共有ファイルが検査され、コンテンツの種類が判断されます。 特定のコンテンツの種類 (画像など) が見つからない場合は、MixedContentOnArrival が発生します。
光学メディアからのビデオを処理する PlayDVDMovieOnArrival
PlayBluRayOnArrival
PlayVideoCDMovieOnArrival
PlaySuperVideoCDMovieOnArrival
ディスクが光学式ドライブに挿入されると、自動再生でファイルが検査され、コンテンツの種類が判断されます。 ビデオ ファイルが見つかると、光学ディスクの種類に対応するイベントが発生します。
光学メディアからの音楽を処理する PlayCDAudioOnArrival
PlayDVDAudioOnArrival
ディスクが光学式ドライブに挿入されると、自動再生でファイルが検査され、コンテンツの種類が判断されます。 音楽ファイルが見つかると、光学ディスクの種類に対応するイベントが発生します。
拡張ディスクを再生する PlayEnhancedCDOnArrival
PlayEnhancedDVDOnArrival
ディスクが光学式ドライブに挿入されると、自動再生でファイルが検査され、コンテンツの種類が判断されます。 拡張ディスクが見つかると、光学ディスクの種類に対応するイベントが発生します。
書き込み可能な光学ディスクを処理する HandleCDBurningOnArrival
HandleDVDBurningOnArrival
HandleBDBurningOnArrival
ディスクが光学式ドライブに挿入されると、自動再生でファイルが検査され、コンテンツの種類が判断されます。 書き込み可能なディスクが見つかると、光学ディスクの種類に対応するイベントが発生します。
その他のデバイスまたはボリュームの接続を処理する UnknownContentOnArrival 自動再生コンテンツ イベントのいずれにも一致しないコンテンツが見つかった場合に、すべてのイベントに対して発生します。 このイベントの使用は推奨されていません。 アプリケーションは、処理できる特定の自動再生イベントにのみ登録する必要があります。

ボリュームの autorun.inf ファイルの CustomEvent エントリを使用して、自動再生でカスタム自動再生コンテンツ イベントを発生させることを指定できます。 詳細については、「Autorun.inf エントリ」を参照してください。

アプリの package.appxmanifest ファイルに拡張機能を追加すると、アプリを自動再生コンテンツまたは自動再生デバイスのイベント ハンドラーとして登録できます。 Visual Studio を使用している場合は、[宣言] タブで自動再生コンテンツまたは自動再生デバイスの宣言を追加できます。アプリの package.appxmanifest ファイルを直接編集する場合は、windows.autoPlayContent または windows.autoPlayDevice[カテゴリ] として指定する Extension 要素をパッケージ マニフェストに追加します。 たとえば、パッケージ マニフェストの次のエントリは、ShowPicturesOnArrival イベントのハンドラーとしてアプリを登録する自動再生コンテンツ拡張機能を追加します。

  <Applications>
    <Application Id="AutoPlayHandlerSample.App">
      <Extensions>
        <Extension Category="windows.autoPlayContent">
          <AutoPlayContent>
            <LaunchAction Verb="show" ActionDisplayName="Show Pictures"
                          ContentEvent="ShowPicturesOnArrival" />
          </AutoPlayContent>
        </Extension>
      </Extensions>
    </Application>
  </Applications>