共用方式為


將封裝的應用程式與 Windows Share 整合

本文說明如何將封裝的應用程式與 Windows Share 功能整合。 使用 MSIX 封裝的應用程式具有套件身分識別,並準備好註冊為 共用目標。 「共用」功能可讓使用者在應用程式間共用內容。 已封裝的應用程式將會註冊為「共用目標」,以便接收及處理應用程式內的共用檔案。

什麼是「共用目標」?

「共用目標」是 Windows 8 中導入的功能,可讓應用程式接收來自另一個應用程式的資料。 「共用目標」的運作方式就像剪貼簿,但具有動態內容。

若要讓預設的共用目標註冊與 Win32 應用程式搭配使用,應用程式必須具有套件身分識別,並同時將共用引數處理為 ShareTargetActivatedEventArgs,這是來源應用程式的即時物件。 這不是傳送至目標應用程式的靜態記憶體內容。

注意

在 C++ 應用程式中,使用 GetCurrentPackageFullName API 來檢查執行中的應用程式是否有套件身分識別。 如果 API 未使用套件身分識別執行, 則會傳回 APPMODEL_ERROR_NO_PACKAGE錯誤碼。

必要條件

若要支援 ShareTargetActivatedEventArgs,應用程式必須以 Windows 10 版本 2004 (組建 10.0.19041.0) 或更新版本為目標。 這是功能的最低目標版本。

註冊為「共用目標」

在您的應用程式中實作「共用」合約需要兩個步驟。

將共用目標延伸模組新增至 appxmanifest

在 Visual Studio 的 [方案總管] 中,開啟解決方案中封裝專案的 package.appxmanifest 檔案,並新增共用目標延伸模組。

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

將應用程式所支援的資料格式新增至 DataFormat 設定。 在此情況下,應用程式支援共用影像,因此 DataFormat 會設定為 Bitmap

擷取共用事件引數

從 Windows 10 版本 1809 開始,封裝的應用程式可以呼叫 AppInstance.GetActivatedEventArgs 方法,在啟動期間擷取特定種類的應用程式啟用資訊。 例如,可以調用此方法獲取有關應用程式啟用的資訊;無論是透過打開檔案、按一下互動式快顯通知還是使用已註冊的通訊協定來將其觸發。

但是,只有 Windows 10 版本 2004 和更新版本上才支援 ShareTargetActivatedEventArgs 啟用資訊。 因此,應用程式應該以具有此特定最低版本的裝置為目標。

若要查看 Windows 應用程式 SDK 實作,請參閱共用目標範例應用程式中的 OnLaunched 方法。

對於其他已封裝的應用程式,請在應用程式的 Main 方法中,檢查是否有 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;
            }
        }
    }
}

如需完整的實作,請參閱 Photo Store Demo 應用程式。

處理共用檔案

下列程式碼片段示範如何處理已封裝應用程式中的共用檔案。 在上一範例中,程式碼片段是應用程式作為「共用目標」啟用時呼叫的 HandleShareAsync 方法的一部分。

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
}

另請參閱