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
- Übersicht über die Windows App SDK-Bereitstellung
- Erstellen Ihres ersten WinUI 3-Projekts
- Migrieren von UWP zum Windows App SDK
- Vorteile und Nachteile der Paketierung einer Anwendung - Überblick über die Bereitstellung
- Identifizierung, Registrierung und Aktivierung von nicht paketierten Win32-Anwendungen
- Freigabevertragsimplementierung für WinAppSDK App
- Share Contract Implementation für Apps mit externem Standort verpackt
- Erhalten von Aktivierungsinformationen für App-Pakete
- ShareTarget-Schema-Referenz
Windows developer