Поделиться через


Интеграция упакованных приложений с Windows Share

В этой статье объясняется, как интегрировать упакованные приложения с функцией Windows Share . Приложения, упакованные с помощью MSIX , имеют удостоверение пакета и готовы зарегистрировать в качестве целевого объекта общего доступа. Функция "Общий доступ" позволяет пользователям совместно использовать содержимое из одного приложения в другое. Упаковаированное приложение регистрируется в качестве целевого объекта общего ресурса для получения и обработки общих файлов в приложении.

Что такое цель общего доступа?

Share Target — это функция, представленная в Windows 8, которая позволяет приложению получать данные из другого приложения. Share Target работает как буфер обмена, но с динамическим содержимым.

Чтобы регистрация целевого ресурса по умолчанию работала с приложениями Win32, приложение должно иметь удостоверение пакета, а также обрабатывать аргументы общего доступа как ShareTargetActivatedEventArgs, который является динамическим объектом из исходного приложения. Это не статическое содержимое памяти, которое отправляется в целевое приложение.

Примечание.

В приложении C++ используйте API GetCurrentPackageFullName , чтобы проверить, имеет ли запущенное приложение удостоверение пакета. API возвращает APPMODEL_ERROR_NO_PACKAGE код ошибки, если он не работает с удостоверением пакета.

Необходимые компоненты

Для поддержки ShareTargetActivatedEventArgsприложение должно быть предназначено для Windows 10 версии 2004 (сборка 10.0.19041.0) или более поздней версии. Это минимальная целевая версия компонента.

Регистрация в качестве целевого объекта общего доступа

Для реализации контракта общего доступа в приложении необходимо выполнить два шага.

Добавление целевого расширения общего ресурса в appxmanifest

В Обозреватель решений Visual Studio откройте package.appxmanifest файл проекта упаковки в решении и добавьте целевое расширение общего ресурса.

<Extensions>
      <uap:Extension
          Category="windows.shareTarget">
        <uap:ShareTarget>
          <uap:SupportedFileTypes>
            <uap:SupportsAnyFileType />
          </uap:SupportedFileTypes>
          <uap:DataFormat>Bitmap</uap:DataFormat>
        </uap:ShareTarget>
      </uap:Extension>
</Extensions>

Добавьте поддерживаемый формат данных, поддерживаемый приложением, в конфигурацию DataFormat . В этом случае приложение поддерживает общий доступ к изображениям, поэтому DataFormat задано значение Bitmap.

Получение аргументов события общего доступа

Начиная с Windows 10 версии 1809 упакованные приложения могут вызывать метод AppInstance.GetActivatedEventArgs , чтобы получить определенные типы сведений о активации приложений во время запуска. Например, этот метод можно вызвать для получения сведений об активации приложения; Активируется ли он путем открытия файла, щелчка интерактивного всплывающего уведомления или использования зарегистрированного протокола.

Однако сведения о активации ShareTargetActivatedEventArgs поддерживаются только в Windows 10 версии 2004 и более поздних версиях. Таким образом, приложение должно ориентироваться на устройства с этой конкретной минимальной версией.

Сведения о реализации пакета SDK для приложений Windows см OnLaunched . в примере приложения Share Target.

Для других упакованных приложений в Main методе приложения проверьте наличие AppInstance.GetActivatedEventArgs.

public static void Main(string[] cmdArgs)
{
    ...
    if (isRunningWithIdentity())
    {
        var activationArgs = AppInstance.GetActivatedEventArgs();
        if (activationArgs != null)
        {
            switch (activationArgs.Kind)
            {
                case ActivationKind.Launch:
                    HandleLaunch(activationArgs as LaunchActivatedEventArgs);
                    break;
                case ActivationKind.ToastNotification:
                    HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);                                     
                    break;
                case ActivationKind.ShareTarget:
                    HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
                    break;
                default:
                    HandleLaunch(null);
                    break;
            }
        }
    }
}

См. демонстрационное приложение Для полной реализации в Магазине фотографий.

Обработка общих файлов

В следующем фрагменте кода показано, как обрабатывать общие файлы в упакованом приложении. Фрагмент кода является частью HandleShareAsync метода, вызываемого при активации приложения в качестве целевого объекта Share в предыдущем примере.

static async void HandleShareAsync(ShareTargetActivatedEventArgs args)
{
    ShareOperation shareOperation = args.ShareOperation;
    shareOperation.ReportStarted();

    if (shareOperation.Data.Contains( 
        Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems))
    {
        try
        {
            IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
            var file = (IStorageFile)items[0]; 
            string path = file.Path;
            var image = new ImageFile(path);
            image.AddToCache();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    shareOperation.ReportCompleted();

    // app launch code
}

См. также