Freigeben über


Integration von Anwendungspaketen mit Windows Share

In diesem Artikel wird erklärt, wie paketierte Anwendungen mit der Funktion Windows Share integriert werden können. Apps, die mit MSIX verpackt sind, haben eine Paketidentität und sind bereit, sich als Share Target zu registrieren. Mit der Freigabefunktion können Nutzer Inhalte von einer App zur anderen freigeben. Eine verpackte Anwendung wird als Freigabeziel registriert, um freigegebene Dateien innerhalb der Anwendung zu empfangen und zu verarbeiten.

Was ist Share Target?

Share Target ist eine Funktion, die in Windows 8 eingeführt wurde und es einer Anwendung ermöglicht, Daten von einer anderen Anwendung zu empfangen. Share Target funktioniert wie eine Zwischenablage, jedoch mit dynamischen Inhalten.

Damit die Standardregistrierung von Freigabezielen mit Win32-Anwendungen funktioniert, muss die Anwendung über eine Paketidentität verfügen und außerdem die Freigabeargumente als ShareTargetActivatedEventArgs behandeln, bei denen es sich um ein Live-Objekt der Quellanwendung handelt. Es handelt sich nicht um einen statischen Speicherinhalt, der an die Zielanwendung gesendet wird.

Hinweis

Verwenden Sie in einer C++-Anwendung die API GetCurrentPackageFullName, um zu prüfen, ob die laufende Anwendung eine Paketidentität hat. Die API gibt den Fehlercode APPMODEL_ERROR_NO_PACKAGE zurück, wenn sie nicht mit Paketidentität ausgeführt wird.

Voraussetzungen

Um ShareTargetActivatedEventArgs zu unterstützen, muss die App auf Windows 10, Version 2004 (Build 10.0.19041.0) oder höher, ausgerichtet sein. Dies ist die minimale Zielversion für das Merkmal.

Registrierung als Aktienziel

Es sind zwei Schritte erforderlich, um den Share-Vertrag in Ihrer Anwendung zu implementieren.

Hinzufügen einer Freigabeziel-Erweiterung zu appxmanifest

Öffnen Sie im Projektmappen-Explorer von Visual Studio die Datei package.appxmanifest des Paketierungsprojekts in Ihrer Projektmappe, und fügen Sie die Erweiterung für das Freigabeziel hinzu.

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

Fügen Sie das von Ihrer Anwendung unterstützte Datenformat zur Konfiguration von DataFormat hinzu. In diesem Fall unterstützt die App das Teilen von Bildern, daher ist DataFormat auf Bitmap eingestellt.

Fetch Share Event Argumente

Ab Windows 10, Version 1809, können gepackte Apps die Methode AppInstance.GetActivatedEventArgs aufrufen, um bestimmte Arten von App-Aktivierungsinformationen während des Starts abzurufen. Sie können diese Methode z. B. aufrufen, um Informationen über die Aktivierung einer Anwendung zu erhalten; ob diese durch das Öffnen einer Datei, das Anklicken eines interaktiven Toasts oder die Verwendung eines registrierten Protokolls ausgelöst wurde.

ShareTargetActivatedEventArgs-Aktivierungsinformationen werden jedoch nur unter Windows 10, Version 2004 und höher, unterstützt. Die Anwendung sollte also auf Geräte mit dieser spezifischen Mindestversion ausgerichtet sein.

Eine Windows App SDK-Implementierung finden Sie in der Methode OnLaunched in der Beispielanwendung Share Target.

Für andere gepackte Anwendungen, in der Main-Methode der Anwendung, suchen Sie nach 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;
            }
        }
    }
}

Eine vollständige Implementierung finden Sie in der Anwendung Photo Store Demo.

Umgang mit gemeinsamen Dateien

Das folgende Codeschnipsel zeigt, wie gemeinsame Dateien in einer gepackten Anwendung behandelt werden. Der Codeschnipsel ist Teil der Methode HandleShareAsync, die aufgerufen wird, wenn die App im vorherigen Beispiel als Freigabeziel aktiviert wird.

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
}

Weitere Informationen