借助自动播放功能自动启动

您可以使用 自动播放,当用户将设备连接到他们的电脑时,将您的应用程序作为一个选项提供。 这包括非存储设备,例如相机或多媒体播放器,或存储设备,如 U盘、SD 卡或 DVD。 当用户通过邻近感应(点击)在两台电脑之间共享文件时,您还可以使用 AutoPlay 来将您的应用作为一个选项提供。

注释

如果你是设备制造商,并且想要将 Microsoft应用商店设备应用 关联为设备的 自动播放 处理程序,则可以在设备元数据中标识该应用。 有关详细信息,请参阅 Microsoft 应用商店中设备应用的自动播放功能

注册自动播放内容

您可以将应用程序注册为 自动播放 内容事件的选项。 当存储设备(如相机内存卡、U盘或 DVD)插入电脑时,将引发 自动播放 内容事件。 下面介绍如何在插入相机的卷设备时将应用标识为 自动播放 选项。

在本教程中,你创建了一个显示图像文件或将它们复制到图片的应用。 你已为 AutoPlay ShowPicturesOnArrival 内容播放事件注册了应用。

自动播放还会为通过邻近感应(点击)在电脑之间共享的内容引发事件。 可以使用本节中的步骤和代码来处理使用邻近感应的电脑之间共享的文件。 下表列出了可用于使用邻近感应共享内容的自动播放内容事件。

行动 自动播放内容事件
共享音乐 PlayMusicFilesOnArrival
共享视频 到达时播放视频文件

使用邻近感应共享文件时,FileActivatedEventArgs 对象的 Files 属性包含对包含所有共享文件的根文件夹的引用。

步骤 1:创建新项目并添加自动播放声明

  1. 打开 Microsoft Visual Studio,然后从“文件”菜单中选择 新建项目。 在“Visual C#”部分的 Windows 下,选择“UWP 空白应用”(.NET Native)。 将应用命名为 AutoPlayDisplayOrCopyImages,然后单击 确定。
  2. 打开 Package.appxmanifest 文件,然后选择 功能 选项卡。选择 可移动存储图片库 功能。 这允许应用访问可移动存储设备以用于相机内存,以及访问本地图片。
  3. 在清单文件中,选择 声明 选项卡。在 可用声明 下拉列表中,选择 自动播放内容 并单击 添加。 选择添加到 支持的声明 列表的新 自动播放内容 项。
  4. 当 AutoPlay 引发内容事件时,AutoPlay 内容 声明会将应用标识为一个选项。 该事件基于卷设备(如 DVD 或 U盘)的内容。 自动播放会检查存储设备的内容,并确定要引发的内容事件。 如果卷的根目录包含 DCIM、AVCHD 或 PRIVATE\ACHD 文件夹,或者用户已在自动播放控制面板中启用 选择对每种类型的媒体的操作,并且在卷的根目录中找到图片,则 AutoPlay 会触发 ShowPicturesOnArrival 事件。 在“启动操作” 部分中,为第一个启动操作输入下表 1 中的值。
  5. 自动播放内容 项的 启动操作 部分中,单击 添加新 添加第二个启动操作。 为第二个启动操作输入下表 2 中的值。
  6. 可用声明 下拉列表中,选择 文件类型关联 并单击 添加。 在新的 文件类型关联 声明中,将 显示名称 字段设置为 自动播放复制或显示图像,并将 名称 字段设置为 image_association1。 在 支持的文件类型 部分中,单击 添加新。 将 文件类型 字段设置为 .jpg。 在 支持的文件类型 部分中,将新文件关联的 文件类型 字段设置为 .png。 对于内容事件,AutoPlay 会筛选掉未显式关联到应用的任何文件类型。
  7. 保存并关闭清单文件。

表 1

设置 价值
动词 显示
操作显示名称 显示图片
内容活动 抵达时显示图片

操作显示名称 设置用于识别自动播放中显示的应用字符串。 动词 设置标识所选选项传递给应用的值。 可以为自动播放事件指定多个启动操作,并使用 动词 设置来确定用户在应用中选择了哪个选项。 可以通过检查传递给应用的启动事件参数中的 动词 属性来识别用户所选的选项。 可以将任何值用于 动词 设置,除了保留的 打开

表 2

设置 价值
动词 复制
操作显示名称 将图片复制到库中
内容活动 抵达时显示图片

步骤 2:添加 XAML UI

打开 MainPage.xaml 文件,并将以下 XAML 添加到默认 <网格> 部分。

<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:添加初始化代码

此步骤中的代码检查 Verb 属性中的谓词值,该属性是 OnFileActivated 事件期间传递给应用的启动参数之一。 然后,该代码调用与用户选择的选项相关的方法。 对于相机内存事件,AutoPlay 会将相机存储的根文件夹传递给应用。 可以从 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. 若要运行应用,请将相机内存卡或其他存储设备从相机插入电脑。 然后,从“自动播放”选项列表中选择在 package.appxmanifest 文件中指定的内容事件选项之一。 此示例代码仅显示或复制相机内存卡的 DCIM 文件夹中的图片。 如果相机内存卡将图片存储在 AVCHD 或 PRIVATE\ACHD 文件夹中,则需要相应地更新代码。

注释

如果没有相机内存卡,则可以使用闪存驱动器(如果驱动器具有根目录中名为 DCIM 的文件夹,并且 DCIM 文件夹有包含图像的子文件夹)。

注册自动播放设备

可以将应用程序注册为 自动播放 设备事件的可选项。 当设备连接到电脑时,会触发自动播放 设备事件。

下面介绍如何在相机连接到电脑时将你的应用标识为 自动播放 选项。 应用注册为 WPD\ImageSourceAutoPlay 事件的处理程序。 当相机和其他图像设备通过 MTP 通知它们是 ImageSource 时,这是 Windows 可移植设备(WPD)系统引发的常见事件。 有关详细信息,请参阅 Windows 可移植设备

重要Windows.Devices.Portable.StorageDevice API 是 桌面设备系列的一部分。 应用只能在桌面设备系列(如电脑)的 Windows 10 设备上使用这些 API。

步骤 1:创建另一个新项目并添加自动播放声明

  1. 打开 Visual Studio,然后从“文件”菜单中选择“新建项目”。 在“Visual C#”部分的 Windows 下,选择“UWP 空白应用”(.NET Native)。 将应用命名为 AutoPlayDevice_Camera,然后单击“确定”
  2. 打开 Package.appxmanifest 文件,然后选择 功能 选项卡。选择 可移动存储 功能。 这允许应用以可移动存储设备的形式访问相机上的数据。
  3. 在清单文件中,选择 声明 选项卡。在 可用声明 下拉列表中,选择 自动播放设备 并单击 添加。 选择被添加到 声明支持 列表中的新 自动播放设备 项。
  4. 在自动播放因已知事件触发设备事件时,AutoPlay 设备 声明会将您的应用识别为一个选项。 在“启动操作” 部分中,输入下表中第一个启动操作的值。
  5. 可用声明 下拉列表中,选择 文件类型关联 并单击 添加。 在新的 文件类型关联 声明的属性中,将 显示名称 字段设置为 显示来自相机的图像,并将 名称 字段设置为 camera_association1。 在 支持的文件类型 部分中,单击 新增 (如果需要)。 将 文件类型 字段设置为 .jpg。 在 支持的文件类型 部分中,再次单击 添加新。 将新文件关联的 文件类型 字段设置为 .png。 对于内容事件,AutoPlay 会筛选掉未显式关联到应用的任何文件类型。
  6. 保存并关闭清单文件。
设置 价值
动词 显示
操作显示名称 显示图片
内容活动 WPD\ImageSource

操作显示名称 设置用于识别自动播放中显示的应用字符串。 动词 设置标识所选选项传递给应用的值。 可以为自动播放事件指定多个启动操作,并使用 动词 设置来确定用户在应用中选择了哪个选项。 可以通过检查传递给应用的启动事件参数中的 动词 属性来识别用户所选的选项。 可以将任何值用于 动词 设置,除了保留的 打开。 有关在单个应用中使用多个动词的示例,请参阅 注册用于自动播放的内容

步骤 2:为桌面扩展添加程序集引用

访问 Windows 可移植设备 (Windows.Devices.Portable.StorageDevice)上存储所需的 API 是 桌面设备系列的一部分。 这意味着需要一个特殊的程序集才能使用这些 API,而这些调用仅能在桌面设备系列(如 PC)上运行。

  1. 解决方案资源管理器中,右键单击 引用,然后 添加引用...
  2. 展开 通用 Windows 并单击 扩展
  3. 然后选择 UWP 的 windows 桌面扩展 ,然后单击“确定”

步骤 3:添加 XAML UI

打开 MainPage.xaml 文件,并将以下 XAML 添加到默认 <网格> 部分。

<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 进行引用。 首先将事件参数强制转换为 DeviceActivatedEventArgs,然后从 DeviceInformationId 属性中获取相机的设备信息 ID。

打开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);
}

注释

在以下步骤中添加 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));
    }
}

注释

在以下步骤中添加 GetImageListGetThumbnail 方法。

步骤 6:添加代码以显示图像

此步骤中的代码显示存储在相机上的图像的缩略图。 该代码对相机进行异步调用以获取缩略图。 但是,在上一个异步调用完成之前,不会进行下一个异步调用。 这可确保一次只向相机发出一个请求。

在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. 若要运行应用,请将相机连接到计算机。 然后从选项的“自动播放”列表中选择应用。

注释

并非所有相机都会为 WPD\ImageSource AutoPlay 设备事件发布通知。

配置可移动存储

当存储设备(例如内存卡或U盘)连接到电脑时,可以将其识别为 自动播放 设备。 这在您希望将特定应用与 自动播放 关联,以向用户呈现您的卷设备时尤其有用。

我们将展示如何将您的卷设备识别为 自动播放 设备。

若要将存储设备标识为 自动播放 设备,请将 autorun.inf 文件添加到设备的根目录。 在 autorun.inf 文件中,将 CustomEvent 键添加到 AutoRun 节。 当存储设备连接到电脑时,自动播放 将找到 autorun.inf 文件,并将其视为设备。 AutoPlay 将使用您为 CustomEvent 键提供的名称创建 AutoPlay 事件。 然后,可以创建一个应用,并将该应用注册为该 自动播放 事件的处理程序。 当设备连接到电脑时,AutoPlay 会将您的应用显示为音量设备的处理程序。 有关 autorun.inf 文件的详细信息,请参阅 autorun.inf 条目

步骤 1:创建 autorun.inf 文件

在卷设备的根驱动器中,添加名为 autorun.inf 的文件。 打开 autorun.inf 文件并添加以下文本。

[AutoRun]
CustomEvent=AutoPlayCustomEventQuickstart

步骤 2:创建新项目并添加自动播放声明

  1. 打开 Visual Studio,然后从“文件”菜单中选择“新建项目”。 在“Visual C#”部分的 Windows 下,选择“UWP 空白应用”(.NET Native)。 将应用程序命名 AutoPlayCustomEvent,然后单击“确定”

  2. 打开 Package.appxmanifest 文件,然后选择 功能 选项卡。选择 可移动存储 功能。 这样,应用便可以访问可移动存储设备上的文件和文件夹。

  3. 在清单文件中,选择 声明 选项卡。在 可用声明 下拉列表中,选择 自动播放内容 并单击 添加。 选择添加到 支持的声明 列表的新 自动播放内容 项。

    注释

    或者,还可以选择为自定义自动播放事件添加 自动播放设备 声明。

  4. 自动播放内容 事件声明的“启动操作” 部分中,输入下表中第一个启动操作的值。

  5. 可用声明 下拉列表中,选择 文件类型关联 并单击 添加。 在新 文件类型关联 声明中,将 显示名称 字段设置为 显示 .ms 文件,并将 名称 字段设置为 ms_association。 在 支持的文件类型 部分中,单击 添加新。 将 文件类型 字段设置为 .ms。 对于内容事件,自动播放会筛选出未显式关联到应用的任何文件类型。

  6. 保存并关闭清单文件。

设置 价值
动词 显示
操作显示名称 显示文件
内容活动 自动播放自定义事件快速启动

Content Event 值是您在 autorun.inf 文件中为 CustomEvent 键提供的文本。 操作显示名称 设置用于识别自动播放中显示的应用字符串。 动词 设置标识所选选项传递给应用的值。 可以为自动播放事件指定多个启动操作,并使用 动词 设置来确定用户在应用中选择了哪个选项。 可以通过检查传递给应用的启动事件参数中的 动词 属性来识别用户所选的选项。 可以将任何值用于 动词 设置,除了保留的 打开

步骤 3:添加 XAML UI

打开 MainPage.xaml 文件,并将以下 XAML 添加到默认 <网格> 部分。

<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 事件期间,AutoPlay 将存储设备的根文件夹作为启动参数的一部分传递给应用程序。 可以从 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);
}

注释

在以下步骤中添加 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. 若要运行应用,请将内存卡或其他存储设备插入电脑。 然后从“自动播放”处理程序选项列表中选择你的应用。

自动播放事件参考

自动播放 系统允许应用程序注册不同设备和存储卷(磁盘)的到达事件。 若要注册 自动播放 内容事件,必须在包清单中启用 可移动存储 功能。 下表显示了您可以注册的事件及其被触发的时间。

情景 事件 / 活动 DESCRIPTION
在相机上使用照片 WPD\ImageSource 为那些被识别为 Windows 便携式设备并具有 ImageSource 功能的相机设备引发。
在音频播放器上使用音乐 WPD\AudioSource 为被标识为 Windows 可移植设备且提供 AudioSource 功能的媒体播放器而设置。
在摄像机上使用视频 WPD\VideoSource 为标识为 Windows 可移植设备的摄像机引发并提供 VideoSource 功能。
访问连接的闪存驱动器或外部硬盘驱动器 StorageOnArrival 当驱动器或卷连接到计算机时触发。 如果驱动器或卷在磁盘根目录中包含 DCIM、AVCHD 或 PRIVATE\ACHD 文件夹,则会改为引发 ShowPicturesOnArrival 事件。
使用大容量存储的照片(旧版) 到达时显示图片 当驱动器或卷包含磁盘根目录中的 DCIM、AVCHD 或 PRIVATE\ACHD 文件夹时引发。 如果用户在“自动播放”控制面板中启用了选择如何处理每种类型的媒体,自动播放将检查连接到电脑的卷,以确定磁盘上的内容类型。 找到图片后,将触发 ShowPicturesOnArrival
使用邻近感应共享接收照片(点击并发送) 到达时显示图片 当用户使用邻近感应(点击和发送)发送内容时,自动播放将检查共享文件以确定内容类型。 如果找到图片,将触发 ShowPicturesOnArrival
使用大容量存储中的音乐(旧版) 播放抵达时的音乐文件 如果用户在自动播放控制面板中启用了 选择对每种媒体类型执行的操作,则自动播放将检查连接到电脑的卷,以确定磁盘上的内容类型。 找到音乐文件时,将触发 PlayMusicFilesOnArrival
使用邻近共享接收音乐(点击并发送) 播放抵达时的音乐文件 当用户使用邻近感应(点击和发送)发送内容时,自动播放将检查共享文件以确定内容类型。 如果找到音乐文件,将引发 PlayMusicFilesOnArrival
使用大容量存储中的视频(旧版) 视频文件到达时播放 如果用户在自动播放控制面板中启用了 选择对每种媒体类型执行的操作,则自动播放将检查连接到电脑的卷,以确定磁盘上的内容类型。 当找到视频文件时,PlayVideoFilesOnArrival 将被引发。
使用邻近感应共享接收视频(点击并发送) 视频文件到达时播放 当用户使用邻近感应(点击和发送)发送内容时,自动播放将检查共享文件以确定内容类型。 如果找到视频文件,则会触发 PlayVideoFilesOnArrival
处理来自连接设备的混合文件集 到达时混合内容 如果用户在自动播放控制面板中启用了 选择对每种媒体类型执行的操作,则自动播放将检查连接到电脑的卷,以确定磁盘上的内容类型。 如果未找到特定内容类型(例如,图片),则会产生 MixedContentOnArrival
使用邻近共享功能来处理不同类型的文件集(点击并发送) 到达时混合内容 当用户使用邻近感应(点击和发送)发送内容时,自动播放将检查共享文件以确定内容类型。 如果未找到特定内容类型(例如,图片),则会产生 MixedContentOnArrival
处理来自光学媒体的视频 播放DVD电影在抵达时
到达时播放蓝光光盘
到达时播放视频CD电影
到达时播放SuperVideoCD电影
将磁盘插入光学驱动器时,AutoPlay 将检查文件以确定内容类型。 找到视频文件时,会触发与光盘类型相对应的事件。
处理来自光盘的音乐 播放CD音频到达时
到达时播放DVD音频
将磁盘插入光学驱动器时,AutoPlay 将检查文件以确定内容类型。 当找到音乐文件时,将引发与光盘类型相对应的事件。
播放增强型磁盘 PlayEnhancedCDOnArrival
PlayEnhancedDVDOnArrival
将磁盘插入光学驱动器时,AutoPlay 将检查文件以确定内容类型。 找到增强型磁盘时,将引发与光盘类型对应的事件。
处理可写光盘 处理到达时的CD刻录
到达时处理DVD刻录
处理BD到达时刻的刻录
将磁盘插入光学驱动器时,AutoPlay 将检查文件以确定内容类型。 找到可写光盘时,将引发与该光盘类型相对应的事件。
管理任何其他设备或存储卷连接 UnknownContentOnArrival 在发现内容与任何自动播放事件不匹配时,将为所有事件触发。 不建议使用此事件。 你应该仅为应用程序能够处理的那些特定自动播放事件注册。

可以使用卷的 autorun.inf 文件中 CustomEvent 条目指定自动播放引发自定义自动播放内容事件。 有关详细信息,请参阅 Autorun.inf 条目

可以通过向应用的 package.appxmanifest 文件添加扩展,将应用注册为自动播放内容或自动播放设备事件处理程序。 如果使用 Visual Studio,可以在 声明 选项卡中添加 自动播放内容自动播放设备 声明。如果要直接编辑应用的 package.appxmanifest 文件,请将 Extension 元素添加到包清单中,该清单指定 windows.autoPlayContent将 windows.autoPlayDevice 指定为 Category。 例如,包清单中的以下条目增加了一个 自动播放内容 扩展,以将应用程序注册为 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>