Интеграция упакованных приложений с 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
}
См. также
- Общие сведения о развертывании пакета SDK для приложений Для Windows
- Создание простого проекта WinUI 3
- Миграция из UWP в пакет SDK для приложений Windows
- Преимущества и недостатки упаковки приложения — обзор развертывания
- Удостоверение, регистрация и активация непакетированных приложений Win32
- Предоставление общего доступа к реализации контракта для приложения WinAppSDK
- Предоставление общего доступа к реализации контракта для приложений, упакованных с внешним расположением
- Получение сведений о активации для упакованных приложений
- Справочник по схеме ShareTarget
Windows developer