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

可使用自动播放功能在用户将设备连接到其电脑时,将应用作为一个选项来提供。 这包括非卷设备(如相机或媒体播放器)或卷设备(如 U 盘、SD 卡或 DVD)。 当用户在两台电脑之间使用临近感应(点击)功能来共享文件时,也可使用自动播放功能将自己的应用作为一个选项来提供。

注意

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

注册自动播放内容

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

在本教程中,你已创建一个用于显示图像文件或将其复制到“图片”的应用。 你已为自动播放 ShowPicturesOnArrival 内容事件注册该应用。

自动播放功能还会引发针对在使用邻近感应(点击)功能的各电脑之间所共享内容的内容事件。 可使用本节描述的步骤和代码来处理在使用邻近感应的各电脑之间所共享的文件。 下表列出了自动播放内容事件,而这些事件可用于通过邻近感应功能来实现的内容共享。

操作 自动播放内容事件
共享音乐 PlayMusicFilesOnArrival
共享视频 PlayVideoFilesOnArrival

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

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

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

表 1

设置 “值”
动词 显示
操作显示名称 显示图片
内容事件 ShowPicturesOnArrival

操作显示名称设置可标识自动播放功能为应用显示的字符串。 谓词设置可标识为所选选项而传递给应用的值。 你可为一个自动播放事件指定多个启动操作,并可使用谓词设置来确定用户为你的应用选择的选项。 可通过检查传递给应用的启动事件参数的 verb 属性来获悉用户选择的选项。 可为谓词设置使用任意值,但保留的 open 除外。

表 2

设置 “值”
动词 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:添加初始化代码

此步骤中的代码可检查 Verb 属性中的谓词值,而它也是 OnFileActivated 事件期间传递给应用的启动参数之一。 然后,该代码会调用与用户所选选项相关的方法。 对于相机内存事件,自动播放功能会将相机存储的根文件夹传递给应用。 可从 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);
}

请注意,以下步骤会添加 DisplayImagesCopyImages 方法。

步骤 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”事件的处理程序。 它属于当相机和其他成像设备通知 Windows 可移植设备 (WPD) 系统此类设备为采用 MTP 的 ImageSource 时,该系统所引发的一个常见事件。 有关详细信息,请参阅 Windows 可移植设备

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

步骤 1:创建另一新项目,然后添加自动播放声明

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

操作显示名称设置可标识自动播放功能为应用显示的字符串。 谓词设置可标识为所选选项而传递给应用的值。 你可为一个自动播放事件指定多个启动操作,并可使用谓词设置来确定用户为你的应用选择的选项。 可通过检查传递给应用的启动事件参数的 verb 属性来获悉用户选择的选项。 可为谓词设置使用任意值,但保留的 open 除外。 有关在单个应用中使用多个谓词的示例,请参阅注册自动播放内容

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

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

  1. 解决方案资源管理器中,右键单击引用,然后选择添加引用...
  2. 展开通用窗口,然后单击扩展
  3. 接着,选择适用于 UWP 的 Windows 桌面扩展,然后单击确定

步骤 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 来引用。 首先,通过将事件参数强制转换为 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 自动播放设备事件进行播发。

配置可移动存储

当有卷设备连接到电脑时,可将此卷设备(例如,内存卡或 U 盘)标识为一个自动播放设备。 如果要为自动播放功能关联特定应用,以便向卷设备用户进行显示,此功能则尤其有用。

下面介绍如何将卷设备标识为一个自动播放设备。

若要将卷设备标识为自动播放设备,请将 autorun.inf 文件添加到设备的根驱动器。 在 autorun.inf 文件中,将 CustomEvent 键添加到 AutoRun 部分。 当卷设备连接到电脑时,自动播放功能会找到 autorun.inf 文件并将卷视为一个设备。 自动播放功能将使用为 CustomEvent 键提供的名称来创建自动播放事件。 然后,可创建一个应用,并将该应用注册为该自动播放事件的处理程序。 当此设备连接到电脑时,自动播放功能会将应用显示为卷设备的处理程序。 有关 autorun.inf 文件的详细信息,请参阅 autorun.inf 条目

步骤 1:创建 autorun.inf 文件

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

[AutoRun]
CustomEvent=AutoPlayCustomEventQuickstart

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

  1. 打开 Visual Studio,然后从文件菜单选择新建项目。 在 Visual C# 部分的 Windows 下,选择空白应用(通用 Windows)。 将此应用程序命名为 AutoPlayCustomEvent,然后单击确定
  2. 打开 Package.appxmanifest 文件,然后依次选择功能选项卡、可移动存储功能。 如此,该应用便可以访问可移动存储设备上的文件和文件夹。
  3. 在此清单文件中,选择声明选项卡。在可用声明下拉列表中,选择自动播放内容,然后单击添加。 选择已添加到支持的声明列表的自动播放内容新项目。

注意

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

  1. 自动播放内容事件声明的启动操作部分,输入下表中第一个启动操作的对应值。
  2. 可用声明下拉列表中,选择文件类型关联,然后单击添加。 在新“文件类型关联”声明的“属性”中,将“显示名称”字段设置为“显示 .ms 文件”,并将“名称”字段设置为“ms_association”。 在支持的文件类型部分,单击新增。 将文件类型字段设为 .ms。 对于内容事件,自动播放功能会筛选掉未显式关联到应用的所有文件类型。
  3. “保存”并“关闭”清单文件。
设置 “值”
动词 显示
操作显示名称 显示文件
内容事件 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);
}

注意

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

自动播放事件参考

自动播放系统允许应用注册各种设备与卷(磁盘)到达事件。 若要注册自动播放内容事件,则须在包清单中启用可移动存储功能。 下表显示了可注册的事件以及引发这些事件的时间。

场景 事件 说明
在相机上使用照片 WPD\ImageSource 为标识为 Windows 便携式设备的相机引发,并提供 ImageSource 功能。
在音频播放器上使用音乐 WPD\AudioSource 为标识为 Windows 可移植设备的媒体播放器引发,并提供 AudioSource 功能。
在摄像机上使用视频 WPD\VideoSource 为标识为 Windows 便携式设备的摄像机引发,并提供 VideoSource 功能。
访问已连接的闪存驱动器或外部硬盘驱动器 StorageOnArrival 当驱动器或卷连接到电脑时引发。 如果驱动器或卷包含磁盘根目录中的 DCIM、AVCHD 或 PRIVATE\ACHD 文件夹,则会改为引发 ShowPicturesOnArrival 事件。
使用大容量存储中的照片(旧版) ShowPicturesOnArrival 当驱动器或卷包含磁盘根目录中的 DCIM、AVCHD 或 PRIVATE\ACHD 文件夹时引发。 如果用户已在“自动播放控制面板”中启用选择为每种媒体执行的操作,自动播放功能则会检查连接到电脑的卷,从而确定磁盘上内容的类型。 找到图片时,将引发 ShowPicturesOnArrival
使用邻近感应共享(点击并发送)接收照片 ShowPicturesOnArrival 当用户使用邻近感应(点击并发送)来发送内容时,自动播放功能会检查共享的文件以确定内容的类型。 如果找到图片,则会引发 ShowPicturesOnArrival
使用大容量存储中的音乐(旧版) PlayMusicFilesOnArrival 如果用户已在“自动播放控制面板”中启用选择为每种媒体执行的操作,自动播放功能则会检查连接到电脑的卷,从而确定磁盘上内容的类型。 找到音乐文件时,将引发 PlayMusicFilesOnArrival
使用邻近感应共享(点击并发送)接收音乐 PlayMusicFilesOnArrival 当用户使用邻近感应(点击并发送)来发送内容时,自动播放功能会检查共享的文件以确定内容的类型。 如果找到音乐文件,则会引发 PlayMusicFilesOnArrival
使用大容量存储中的视频(旧版) PlayVideoFilesOnArrival 如果用户已在“自动播放控制面板”中启用选择为每种媒体执行的操作,自动播放功能则会检查连接到电脑的卷,从而确定磁盘上内容的类型。 找到视频文件时,将引发 PlayVideoFilesOnArrival
使用邻近感应共享(点击并发送)接收视频 PlayVideoFilesOnArrival 当用户使用邻近感应(点击并发送)来发送内容时,自动播放功能会检查共享的文件以确定内容的类型。 如果找到视频文件,则会引发 PlayVideoFilesOnArrival
处理已连接设备中的混合文件集 MixedContentOnArrival 如果用户已在“自动播放控制面板”中启用选择为每种媒体执行的操作,自动播放功能则会检查连接到电脑的卷,从而确定磁盘上内容的类型。 如果未找到特定内容类型(例如图片),则会引发 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 文件,则请将 Extension 元素添加到包清单中,而该清单会将 windows.autoPlayContentwindows.autoPlayDevice 指定为类别。 例如,包清单中的以下条目会添加一个自动播放内容扩展,以便将应用注册为 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>