Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La feuille de partage Windows est une interface utilisateur fournie par le système qui permet aux utilisateurs d’envoyer du contenu de votre application à d’autres applications Windows. Ce guide explique comment implémenter le contrat De partage entre les applications empaquetées (MSIX), les applications progressives Web Apps (PWA) et les applications Win32 non empaquetées.
Dans cet article
| Rubrique | Ce que vous trouverez |
|---|---|
| Choisir votre approche de partage | Choisir l’ensemble d’API approprié pour les applications UWP, de bureau ou PWA |
| Implémenter le partage dans les applications UWP |
DataTransferManager.GetForCurrentView et ShowShareUI |
| Implémenter la fonctionnalité de partage pour les PWA | Intégration de l’API Web Share |
| Implémenter Share pour les applications de bureau |
IDataTransferManagerInteroppartage par fenêtre pour WinUI 3, WPF, WinForms |
| Événements côté source | Surveiller la sélection de la cible, la finalisation et l’annulation |
| Meilleures pratiques pour partager | Recommandations pour un comportement fiable côté source |
Choisir votre approche de partage
| Type d’application | Approach | Ensemble d’API |
|---|---|---|
| Applications UWP | Utiliser DataTransferManager.GetForCurrentView et ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Applications de bureau (WinUI 3, WPF, WinForms) | Utiliser IDataTransferManagerInterop pour le partage par fenêtre (empaqueté ou non empaqueté) |
Windows Runtime via COM Interop |
| Applications Web progressives (PWA) | Utiliser l’API Web Share + intégration Windows | W3C Web Share |
Implémenter share pour les applications UWP
Important
DataTransferManager.GetForCurrentView et ShowShareUI sont pris en charge uniquement dans les applications UWP. Les applications de bureau (WinUI 3, WPF ou WinForms - empaquetées ou non empaquetées) doivent utiliser le IDataTransferManagerInterop modèle indiqué dans Implémenter share pour les applications de bureau.
1. Obtenir un DataTransferManager
Dans l’initialisation de votre page, obtenez une référence au DataTransferManager:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Remplir un DataPackage
Lorsque l’utilisateur lance le partage (par exemple, cliquez sur un bouton Partager), créez-en un DataPackage avec le contenu et les métadonnées :
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
DataPackage data = request.Data;
// Set a title (required)
data.Properties.Title = "My shared content";
// Set content - choose one or more:
data.SetText("Here's some text to share");
// For URLs, use SetWebLink to enable rich link previews:
// data.SetWebLink(new Uri("https://example.com"));
// For files or images:
// IStorageItem item = await StorageFile.GetFileFromPathAsync(filePath);
// data.SetStorageItems(new[] { item });
// Optional: add description and thumbnail
data.Properties.Description = "A brief description";
// data.Properties.Thumbnail = /* RandomAccessStreamReference */;
}
Tip
Lorsque vous partagez une URL, utilisez SetWebLink (ou SetApplicationLink pour des liens profonds) au lieu de SetText. Les applications cibles peuvent ensuite générer des aperçus de liens enrichis et gérer la navigation correctement, au lieu de les traiter comme du texte brut.
3. Afficher l’interface utilisateur de partage
Déclenchez la feuille de partage à partir d’un clic de bouton ou d’une commande de menu :
private void ShareButton_Click(object sender, RoutedEventArgs e)
{
// ShowShareUI is a static method on DataTransferManager.
// The DataRequested handler was registered in step 1.
DataTransferManager.ShowShareUI();
}
Implémenter le partage pour les Progressive Web Apps (PWA)
Les PWA utilisent l’API Web Share du W3C. Vérifiez que votre PWA a les propriétés de manifeste requises pour s’intégrer à Windows :
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
Dans votre code JavaScript PWA, utilisez l’API De partage web :
async function shareContent() {
if (navigator.share) {
try {
await navigator.share({
title: 'Check this out',
text: 'Great content',
url: 'https://example.com/page'
});
} catch (err) {
if (err.name !== 'AbortError') {
console.error('Share failed:', err);
}
}
}
}
Implémenter le partage pour les applications de bureau (WinUI 3, WPF, WinForms)
Les applications de bureau , qu’elles soient empaquetées ou non empaquetées, utilisent l’interface IDataTransferManagerInterop pour accéder à la feuille de partage par fenêtre. Cela s’applique aux applications WinUI 3, WPF et WinForms.
1. Déclarer l’interface d’interopérabilité et acquérir un DataTransferManager
using Windows.ApplicationModel.DataTransfer;
[System.Runtime.InteropServices.ComImport]
[System.Runtime.InteropServices.Guid("3A3DCD6C-3EAB-43DC-BCDE-45671CE800C8")]
[System.Runtime.InteropServices.InterfaceType(
System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)]
interface IDataTransferManagerInterop
{
IntPtr GetForWindow([System.Runtime.InteropServices.In] IntPtr appWindow,
[System.Runtime.InteropServices.In] ref Guid riid);
void ShowShareUIForWindow(IntPtr appWindow);
}
public sealed partial class MainWindow // WinUI 3 Window, WPF Window, or WinForms Form
{
// IID of DataTransferManager, passed as the riid to GetForWindow:
static readonly Guid _dtm_iid =
new Guid(0xa5caee9b, 0x8708, 0x49d1, 0x8d, 0x36, 0x67, 0xd2, 0x5a, 0x8d, 0xa0, 0x0c);
private DataTransferManager _dtm;
// Call this from your window or form constructor (or load handler):
private void InitializeShare()
{
// Retrieve the window handle (HWND) for the current window:
// WinUI 3: IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
// WPF: IntPtr hWnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
// WinForms: IntPtr hWnd = this.Handle;
IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
IDataTransferManagerInterop interop =
DataTransferManager.As<IDataTransferManagerInterop>();
_dtm = WinRT.MarshalInterface<DataTransferManager>.FromAbi(
interop.GetForWindow(hWnd, _dtm_iid));
_dtm.DataRequested += (sender, args) => OnDataRequested(args);
}
}
2. Remplir et afficher
private void OnDataRequested(DataRequestedEventArgs args)
{
DataRequest request = args.Request;
DataPackage data = request.Data;
data.Properties.Title = "Share from my desktop app";
data.SetText("Shared content");
// For URLs:
// data.SetWebLink(new Uri("https://example.com"));
// For files:
// var item = await StorageFile.GetFileFromPathAsync(filePath);
// data.SetStorageItems(new[] { item });
}
// In your Share button handler:
private void ShareButton_Click()
{
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
var interop = DataTransferManager.As<IDataTransferManagerInterop>();
interop.ShowShareUIForWindow(hWnd);
}
Pour obtenir un exemple complet, consultez l’exemple WPF Share Source.
Événements côté source
Utilisez ces événements dans les applications sources pour observer ce qui s’est passé après l’ouverture du partage par l’utilisateur.
| API | Quand il se déclenche | Pourquoi l'utiliser ? |
|---|---|---|
DataTransferManager.DataRequested |
L’utilisateur démarre une opération de partage | Générer et attacher le DataPackage |
DataTransferManager.TargetApplicationChosen |
L’utilisateur choisit une application cible | Télémétrie facultative pour la sélection cible |
DataPackage.ShareCompleted |
Le partage se termine | Télémétrie de succès facultative |
DataPackage.ShareCanceled |
L’utilisateur annule le partage | Télémétrie d’annulation optionnelle |
Note
Cet exemple utilise GetForCurrentView pour la concision, qui s’applique aux applications UWP. Dans les applications de bureau, obtenez le DataTransferManager au moyen de IDataTransferManagerInterop.GetForWindow, comme indiqué précédemment, puis associez les mêmes événements.
private void RegisterShareEvents()
{
var dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
dtm.TargetApplicationChosen += OnTargetChosen;
}
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
request.Data.Properties.Title = "Share from my app";
request.Data.SetText("Hello from Windows Share");
request.Data.ShareCompleted += OnShareCompleted;
request.Data.ShareCanceled += OnShareCanceled;
}
private void OnTargetChosen(DataTransferManager sender, TargetApplicationChosenEventArgs args)
{
// Optional: telemetry only
Debug.WriteLine($"Target app: {args.ApplicationName}");
}
private void OnShareCompleted(DataPackage sender, ShareCompletedEventArgs args)
{
Debug.WriteLine("Share completed");
}
private void OnShareCanceled(DataPackage sender, object args)
{
Debug.WriteLine("Share canceled");
}
Note
DataPackage.OperationCompleted et DataPackage.Destroyed sont principalement destinés aux workflows de presse-papiers et de collage. Elles ne sont généralement pas nécessaires pour les scénarios de source de partage.
Meilleures pratiques pour partager
Utilisez cette liste de contrôle pour maintenir le comportement côté source prévisible.
| Recommandé | Éviter | Pourquoi cela se produit-il |
|---|---|---|
Utiliser SetWebLink ou SetApplicationLink pour les URL |
Utiliser SetText pour les URL |
Les liens s’affichent et routent correctement dans les applications cibles |
Définir Title et les métadonnées facultatives (Description, miniature) |
Envoi de contenu sans métadonnées | Améliore la clarté de l’interface utilisateur de partage et le rendu cible |
Gérer TargetApplicationChosen, ShareCompletedet ShareCanceled si vous avez besoin de télémétrie |
En supposant que ces signaux proviennent de ShareOperation dans les applications sources |
Il s’agit de signaux côté source pour obtenir des insights post-partage |
| Conserver les charges utiles partagées prioritaires et valides pour l’action sélectionnée | Envoi de charges utiles non liées ou surdimensionnées par défaut | Réduit les échecs et améliore le taux de réussite des partages |
Contenu connexe
Windows developer