Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A Folha de Partilha do Windows é uma interface fornecida pelo sistema que permite aos utilizadores enviar conteúdo da sua aplicação para outras aplicações do Windows. Este guia explica como implementar o contrato de partilha entre aplicações empacotadas (MSIX), Progressive Aplicações Web (PWAs) e aplicações Win32 não empacotadas.
Neste artigo
| Seção | O que você vai encontrar |
|---|---|
| Escolha a sua abordagem de partilha | Escolha o conjunto certo de APIs para aplicações UWP, desktop ou PWA |
| Implementar o Share para aplicações UWP |
DataTransferManager.GetForCurrentView e ShowShareUI |
| Implementar a funcionalidade de partilha para PWAs | Integração com a API de Partilha Web |
| Implementar o Share em aplicações para ambiente de trabalho |
IDataTransferManagerInteroppartilha por janela para WinUI 3, WPF, WinForms |
| Eventos do lado da origem | Observar a seleção, conclusão e cancelamento do alvo |
| Boas práticas para o Share | Recomendações para um comportamento fiável do lado da fonte |
Escolha a sua abordagem de partilha
| Tipo de aplicação | Abordagem | Conjunto de APIs |
|---|---|---|
| Aplicações UWP | Utilize DataTransferManager.GetForCurrentView e ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Aplicações de ambiente de trabalho (WinUI 3, WPF, WinForms) | Usar IDataTransferManagerInterop para partilha por janela (empacotada ou não empacotada) |
Windows Runtime via interoperabilidade COM |
| Aplicações Web Progressivas (PWAs) | Use a API de Partilha Web + integração com o Windows | Partilha Web do W3C |
Implementar o Share para aplicações UWP
Importante
DataTransferManager.GetForCurrentView e ShowShareUI são suportados apenas em aplicações UWP. As aplicações de ambiente de trabalho (WinUI 3, WPF ou WinForms - empacotadas ou não embaladas) devem usar o IDataTransferManagerInterop padrão mostrado em Implementar Partilha para aplicações de ambiente de trabalho.
1. Obtenha um DataTransferManager
Na inicialização da sua página, obtenha uma referência ao DataTransferManager:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Preencher um pacote de dados
Quando o utilizador inicia partilhar (por exemplo, clicar num botão de partilhar), crie um DataPackage com o conteúdo e os metadados:
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
Quando partilhar uma URL, use SetWebLink (ou SetApplicationLink para links profundos) em vez de SetText. As aplicações de destino podem então gerar pré-visualizações ricas de links e gerir a navegação corretamente, em vez de as tratar como texto simples.
3. Mostrar a interface de partilha
Acione a Folha de Partilha com um clique de botão ou comando 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();
}
Implementar a partilha para Aplicações Web Progressivas (PWAs)
As PWAs utilizam a API de Partilha Web do W3C. Certifique-se de que a sua PWA tem as propriedades de manifesto necessárias para se integrar com o Windows:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
No seu JavaScript PWA, use a Web Share API:
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);
}
}
}
}
Implementar Partilha para aplicações de ambiente de trabalho (WinUI 3, WPF, WinForms)
As aplicações de ambiente de trabalho – sejam embaladas ou não – utilizam a IDataTransferManagerInterop interface para aceder à Folha de Partilha por janela. Isto aplica-se às aplicações WinUI 3, WPF e WinForms.
1. Declarar a interface de interoperabilidade e adquirir um 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. Povoar e mostrar
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);
}
Para um exemplo completo, veja o exemplo do WPF Share Source.
Eventos do lado da origem
Use estes eventos nas aplicações de origem para observar o que aconteceu depois de o utilizador abrir o Partilhar.
| API | Quando dispara | Porquê utilizar |
|---|---|---|
DataTransferManager.DataRequested |
O utilizador inicia uma operação de partilha | Constrói e anexa o DataPackage |
DataTransferManager.TargetApplicationChosen |
O utilizador escolhe uma aplicação-alvo | Telemetria opcional para seleção de alvos |
DataPackage.ShareCompleted |
A partilha está concluída | Telemetria de sucesso opcional |
DataPackage.ShareCanceled |
O utilizador cancela a partilha | Telemetria de anulação opcional |
Note
Este exemplo serve GetForCurrentView para brevidade, o que se aplica a aplicações UWP. Nas aplicações de ambiente de trabalho, adquira o DataTransferManager através de IDataTransferManagerInterop.GetForWindow, como mostrado anteriormente, e depois anexe os mesmos eventos.
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 e DataPackage.Destroyed são principalmente para fluxos de trabalho de prancheta e colagem. Geralmente, não são necessárias para cenários de partilha de código-fonte.
Boas práticas para o Share
Use esta lista de verificação para manter o comportamento do lado da fonte previsível.
| Recomendado | Evitar | Por que é importante |
|---|---|---|
Utilize SetWebLink ou SetApplicationLink para URLs |
Utilize SetText para URLs |
Os links são apresentados e direcionam corretamente nas aplicações de destino |
Defina Title e os metadados opcionais (Description, miniatura) |
Envio de conteúdo sem metadados | Melhora a clareza da interface partilhada e a renderização dos alvos |
Processa TargetApplicationChosen, ShareCompleted, e ShareCanceled se precisares de telemetria |
Partindo do princípio de que estes sinais vêm de ShareOperation em aplicações de origem |
Estes são sinais do lado da origem para informação após a partilha |
| Mantenha as cargas partilhadas específicas e válidas para a ação selecionada | Enviar cargas úteis não relacionadas ou demasiado grandes por predefinição | Reduz falhas e melhora a taxa de sucesso da partilha |
Conteúdo relacionado
Windows developer