Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как интегрировать упакованные приложения с функцией 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 App, смотрите метод 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;
}
}
}
}
См. приложение Photo Store Demo для полной реализации.
Обработка общих файлов
В следующем фрагменте кода показано, как обрабатывать общие файлы в упакованом приложении. Фрагмент кода является частью 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
- миграция из UWP в пакет SDK для приложений Windows
- Преимущества и недостатки упаковки приложения — обзор развертывания
- Удостоверение, регистрация и активация непакетированных приложений Win32
- Реализация контракта общего доступа для Windows App SDK
- Общий доступ к реализации контракта для приложений, упакованных с использованием внешнего местоположения
- Получение сведений о активации для упакованных приложений
- Справочник по схеме ShareTarget
Windows developer