デスクトップ アプリでサポートされていない Windows ランタイム API

ほとんどの Windows ランタイム (WinRT) API (Windows UWP 名前空間に関するページを参照) は、C# または C++ のデスクトップ アプリで使用できますが、デスクトップ アプリではサポートされていないか、または制限がある WinRT API の主なセットが 2 つあります。

  • ユニバーサル Windows プラットフォーム (UWP) アプリでのみ使用できるように設計されたユーザー インターフェイス (UI) 機能に依存する API。
  • パッケージ ID を必要とする API (パッケージ ID を必要とする機能に関するページを参照)。 このような API は、MSIX を使用してパッケージ化されたデスクトップ アプリでのみサポートされています。

この記事では、WinRT API のこれらの両方のセットについて詳しく説明します。 可能な場合、この記事では、デスクトップ アプリでサポートされていない API と同じ機能を実現するための別の API を提案しています。 代替 API のほとんどは、WinUI 3 で、または Windows SDK で使用できる WinRT COM インターフェイスを介して利用できます。

Note

.NET を使用したアプリでは、この記事に示されている一部の WinRT COM インターフェイス用に提供されているクラス実装を利用できます。 これらのクラスは、WinRT COM インターフェイスを直接使用するよりも簡単に使用できます。 使用可能なクラス実装の詳細については、「.NET アプリから相互運用機能 API を呼び出す」を参照してください。 これらのクラスには .NET 6 SDK 以降が必要であることに注意してください。

この記事は、回避策や代替が増えてきたら更新されます。 ここに記載されていない API で問題が発生した場合は、microsoft ui xaml リポジトリにイシューを作成し、API 名とそれを使用して実現しようとしている内容の詳細を記述してください。

UWP 専用 UI 機能に依存する API

一部の WinRT API は UWP アプリでの UI シナリオ専用に設計されました。 これらの API は、スレッド モデルやその他のプラットフォームの違いにより、デスクトップ アプリでは適切に動作しません。 これらの API および、これらに依存関係のあるその他の WinRT API は、デスクトップ アプリでの使用がサポートされていません。

サポートされていないコア クラス

次の WinRT クラスは、デスクトップ アプリではサポートされていません。

クラス 代替 API
ApplicationView なし
CoreApplicationView 代わりに、WinUI 3 によって提供される Window クラスを使用します。
CoreApplicationViewTitleBar ExtendViewIntoTitleBar プロパティの代わりに、WinUI 3 によって提供される Window.ExtendsContentIntoTitleBar プロパティを使用してください。
CoreDispatcher 代わりに、WinUI 3 によって提供される Microsoft.UI.Xaml.Window.DispatcherQueue プロパティを使用します。

Windows.UI.Xaml.Window.Dispatcher および Windows.UI.Xaml.DependencyObject.Dispatcher プロパティは、デスクトップ アプリで null を返すことに注意してください。
CoreWindow さらに以下の「IInitializeWithWindow を実装するクラス」セクションを参照してください。

GetKeyState メソッドの代わりに、WinUI 3 によって提供される InputKeyboardSource.GetKeyStateForCurrentThread メソッドを使用します。

PointerCursor プロパティの代わりに、WinUI 3 によって提供される UIElement.ProtectedCursor プロパティを使用します。 このプロパティにアクセスするには、UIElement のサブクラスが必要です。
UserActivity 代わりに IUserActivitySourceHostInterop COM インターフェイス (useractivityinterop.h 内) を使用します。

デスクトップ アプリでサポートされていないその他の WinRT API については、このトピックの後半にある「サポートされていないメンバー」を参照してください。

XxxForCurrentView メソッドによるクラス

多くの WinRT クラスには、UIViewSettings.GetForCurrentView など、静的な GetForCurrentView または CreateForCurrentView メソッドがあります。 これらの XxxForCurrentView メソッドは、デスクトップ アプリでサポートされていない ApplicationView 型に暗黙的に依存しています。 ApplicationView がデスクトップ アプリではサポートされていないため、XxxForCurrentView のすべてのメソッドもサポートされていません。 一部のサポートされていない XxxForCurrentView メソッドでは、null が返されるだけでなく、例外もスローされる場合があります。

注意

CoreInputView.GetForCurrentView はデスクトップ アプリでサポート "されており"、CoreWindow がなくとも使用 "できます"。 このメソッドは、任意のスレッドで CoreInputView オブジェクトを取得するために使用できます。また、そのスレッドに前面のウィンドウがある場合は、そのオブジェクトによってイベントが生成されます。

次のクラスは、デスクトップ アプリでサポートされて "います"。ただし、デスクトップ アプリでそのインスタンスを取得するには、GetForCurrentView または CreateForCurrentView メソッドとは異なるメカニズムを使います。 COM インターフェイスが代替 API として一覧表示されている以下のクラスの場合、C# 開発者は、これらの WinRT COM インターフェイスも使用することができます (「.NET 5 アプリから相互運用機能 API を呼び出す」を参照してください)。 この一覧は包括的でない場合があります。

クラス 代替 API
AccountsSettingsPane 代わりに IAccountsSettingsPaneInterop COM インターフェイス (accountssettingspaneinterop.h 内) を使用してください。
CoreDragDropManager 代わりに IDragDropManagerInterop COM インターフェイス (dragdropinterop.h 内) を使用します。
CoreTextServicesManager 現在、このクラスは Windows Insider Preview ビルドのデスクトップ アプリでのみサポートされています。
DataTransferManager 代わりに IDataTransferManagerInterop COM インターフェイス (shobjidl_core.h 内) を使用します。
DisplayInformation DisplayInformation のインスタンスを取得するには、IDisplayInformationStaticsInterop インターフェイスを使います。

または、LogicalDpi プロパティの代わりに XamlRoot.RasterizationScale プロパティを使って、XamlRoot.Changed イベントでの変更をリッスンすることができます (XamlRoot.RasterizationScale プロパティは WinUI 3 で提供されています)。

また、RawPixelsPerViewPixel プロパティの代わりに、WinUI 3 によって提供される XamlRoot.RasterizationScale プロパティを使う選択肢があります。
InputPane 代わりに IInputPaneInterop COM インターフェイス (inputpaneinterop.h 内) を使用します。
PlayToManager 代わりに IPlayToManagerInterop COM インターフェイス (playtomanagerinterop.h 内) を使用します。
Print3DManager 代わりに IPrinting3DManagerInterop COM インターフェイス (print3dmanagerinterop.h 内) を使用します。
PrintManager 代わりに IPrintManagerInterop COM インターフェイス (printmanagerinterop.h 内) を使用します。
RadialController 代わりに IRadialControllerInterop COM インターフェイス (radialcontrollerinterop.h 内) を使用します。
RadialControllerConfiguration 代わりに IRadialControllerConfigurationInterop COM インターフェイス (radialcontrollerinterop.h 内) を使用します。
ResourceContext MRT から MRT Core への移行」を参照してください。
ResourceLoader MRT から MRT Core への移行」を参照してください。
SpatialInteractionManager 代わりに ISpatialInteractionManagerInterop COM インターフェイス (spatialinteractionmanagerinterop.h 内) を使用します。
SystemMediaTransportControls 代わりに ISystemMediaTransportControlsInterop COM インターフェイス (systemmediatransportcontrolsinterop.h 内) を使用します。
UserActivityRequestManager 代わりに IUserActivityRequestManagerInterop COM インターフェイス (useractivityinterop.h 内) を使用します。
UIViewSettings 代わりに IUIViewSettingsInterop COM インターフェイス (uiviewsettingsinterop.h 内) を使用します。

次のクラスはデスクトップ アプリではサポートされて "いません"。これらの API は、GetForCurrentView または CreateForCurrentView メソッドの代替を提供していないためです。 この一覧は包括的でない場合があります。

クラス 代替 API
AppCapture なし
BrightnessOverride なし
ConnectedAnimationService なし
CoreInputView なし
CoreWindowResizeManager なし
DisplayEnhancementOverride なし
EdgeGesture なし
GazeInputSourcePreview なし
HdmiDisplayInformation なし
HolographicKeyboardPlacementOverridePreview なし
KeyboardDeliveryInterceptor なし
LockApplicationHost なし
MouseDevice なし
PointerVisualizationSettings なし
ProtectionPolicyManager なし
SearchPane なし
SettingsPane なし
SystemNavigationManager なし
SystemNavigationManagerPreview なし
WebAuthenticationBroker [なし] : 詳細については、WebAuthenticationBroker.AuthenticateAsync が COMException をスローする GitHub の問題に関するページを参照してください。

IInitializeWithWindow を実装するクラス

特定のピッカー、ポップアップ、ダイアログ、およびその他の Windows ランタイム (WinRT) オブジェクトは、一般的に UI を表示するために CoreWindow に依存します。 CoreWindow はデスクトップ アプリではサポートされていませんが (前述の「コアでサポートされていないクラス」を参照してください)、わずかな相互運用コードを追加することで、デスクトップ アプリでそれらの WinRT クラスの多くを使用できます。

詳細情報 (影響を受ける型の一覧を含む) とコード例については、「CoreWindow に依存する WinRT UI オブジェクトを表示する」を参照してください。

サポートされていないメンバー

このセクションでは、デスクトップ アプリでの使用がサポートされていない WinRT クラスの特定のメンバーを一覧表示 (包括的な一覧がない場合は説明) します。 特に明記されていない限り、これらのメンバーとは別の、クラスの残りはデスクトップ アプリでサポートされます。

イベント

次のクラスは、示されたイベントを除き、デスクトップ アプリでサポートされています。

クラス サポートされていないイベント
UISettings ColorValuesChanged
AccessibilitySettings HighContrastChanged

メソッド

次のクラスは、示されたメソッドを除き、デスクトップ アプリでサポートされています。

クラス サポートされていないメソッド
DeviceInformationPairing PairAsync

Request 名前付けパターンを使用するメソッド

リクエスト命名パターンに従うほとんどのメソッド(AppCapability.RequestAccessAsyncStoreContext.RequestPurchaseAsyncなど)は、デスクトップアプリではサポートされていません。 内部的には、これらのメソッドは、Windows.UI.Popups クラスを使用します。 このクラスではスレッドに CoreWindow オブジェクトが必要ですが、これはデスクトップ アプリではサポートされていません。

Request 名前付けパターンに従うメソッドの完全な一覧は非常に長いため、この記事ではこれらのメソッドの包括的な一覧は提供していません。

パッケージ ID が必要な API

次の WinRT クラスでは、パッケージ ID が必要です (「パッケージ ID が必要な機能」を参照してください)。 これらの API は、パッケージ化されているデスクトップ アプリ (つまり、実行時にパッケージ ID を持つもの) でのみサポートされます。 この一覧は包括的でない場合があります。

さらに、パッケージ ID を持たないデスクトップ アプリから呼び出された場合、AdaptiveMediaSource.CreateFromUriAsync メソッドは ms-appxms-resource の URI 形式をサポートしません。