Partager via


Intégrer les applications packagées à Windows Share

Cet article explique comment intégrer des applications packagées à la fonctionnalité Windows Share. Les applications empaquetées avec MSIX ont une identité de package et sont prêtes à s'enregistrer en tant que cible Share. La fonctionnalité Share permet aux utilisateurs de partager du contenu d'une application à une autre. Une application packagée s'enregistre en tant que cible de partage afin de recevoir et de gérer les fichiers partagés au sein de l'application.

Qu'est-ce qu'une cible Share?

Cible Share est une fonctionnalité qui a été introduite dans Windows 8 et qui permet à une application de recevoir des données d'une autre application. Cible Share fonctionne comme un presse-papiers, mais avec un contenu dynamique.

Pour que l'enregistrement de la cible de partage par défaut fonctionne avec les applications Win32, l'application doit avoir d'une part une identité de package et d'autre part gérer les arguments de partage en tant que ShareTargetActivatedEventArgs, qui est un objet vivant provenant de l'application source. Ce n'est pas un contenu de mémoire statique qui est envoyé à l'application cible.

Remarque

Dans une application C++, utilisez l'API GetCurrentPackageFullName pour vérifier si l'application en cours a une identité de package. L'API renvoie le code d'erreur APPMODEL_ERROR_NO_PACKAGE si elle ne fonctionne pas avec l'identité du package.

Prérequis

Pour prendre en charge ShareTargetActivatedEventArgs, l'application doit cibler Windows 10, version 2004 (build 10.0.19041.0) ou ultérieure. Il s'agit de la version cible minimale pour la fonctionnalité.

Enregistrer en tant que à Share Target

Deux étapes sont nécessaires pour mettre en œuvre le contrat de partage dans votre application.

Ajoutez une extension de cible de partage à appxmanifest

Dans l'explorateur de solutions de Visual Studio, ouvrez le fichier package.appxmanifest du projet Packaging de votre solution et ajoutez l'extension Share Target.

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

Ajoutez le format de données pris en charge par votre application à la configuration DataFormat Dans ce cas, l'application prend en charge le partage d'images, c'est pourquoi le DataFormat est défini sur Bitmap.

Récupérer les arguments de l'événement Share

À partir de Windows 10, version 1809, les applications packagées peuvent appeler la méthode AppInstance.GetActivatedEventArgs pour récupérer certains types d'infos d'activation de l'application au cours du démarrage. Par exemple, vous pouvez appeler cette méthode pour obtenir des informations sur l'activation de l'application, qu'elle ait été déclenchée par l'ouverture d'un fichier, le clic sur un message toast interactif ou l'utilisation d'un protocole enregistré

Cependant, les informations d’activation ShareTargetActivatedEventArgs sont prises en charge uniquement sur Windows 10 version 2004 et les versions ultérieures. Ainsi, l'application doit cibler les appareils dotés de cette version minimale spécifique.

Pour voir une application du Windows App SDK, consultez la méthode OnLaunched dans l'application d'exemple Share Target.

Pour les autres applications packagées, dans la méthode Main de l'application, vérifiez la présence de 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;
            }
        }
    }
}

Pour les autres applications packagées, dans la méthode de l'application, vérifiez la présence de .

Gérer les fichiers partagés

L'extrait de code suivant montre comment gérer les fichiers partagés dans une application packagée. L'extrait de code fait partie de la méthode HandleShareAsync appelée lorsque l'application est activée en tant que cible de partage dans l'exemple précédent.

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
}

Voir aussi