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

ほとんどの Windows ランタイム (WinRT) API は、デスクトップ アプリ (.NET 5 およびネイティブ C++) で使用できますが、デスクトップ アプリでサポートされていなかったり、制限のある 2 つの主な WinRT API セットがあります。

  • UWP アプリでのみ使用するように設計された UI 機能に依存する API。
  • パッケージ ID が必要な API。 これらの API は、MSIX を使用してパッケージ化されたデスクトップ アプリでのみサポートされています。

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

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

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

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

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

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

クラス 代替 API
ApplicationView None
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 GetKeyState メソッドの代わりに、WinUI 3 によって提供される KeyboardInput.GetKeyStateForCurrentThread メソッドを使用します。

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

GetForCurrentView メソッドによるクラス

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

注意

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

次のクラスは、GetForCurrentView メソッドがあるため、デスクトップ アプリではサポートされません。 この一覧は包括的でない場合があります。

クラス 代替 API
AccountsSettingsPane 代わりに IAccountsSettingsPaneInterop COM インターフェイス (accountssettingspaneinterop.h 内) を使用してください。
AppCapture None
BrightnessOverride None
ConnectedAnimationService None
CoreDragDropManager 代わりに IDragDropManagerInterop COM インターフェイス (dragdropinterop.h 内) を使用します。
CoreInputView None
CoreTextServicesManager 現在、このクラスは Windows Insider Preview ビルドのデスクトップ アプリでのみサポートされています。
CoreWindowResizeManager None
DataTransferManager 代わりに IDataTransferManagerInterop COM インターフェイス (shobjidl_core.h 内) を使用します。
DisplayEnhancementOverride None
DisplayInformation LogicalDpi プロパティの代わりに、XamlRoot.RasterizationScale プロパティを使用し、XamlRoot.Changed イベントでの変更をリッスンします (XamlRoot.RasterizationScale プロパティは WinUI 3 で提供されています)。

RawPixelsPerViewPixel プロパティの代わりに、WinUI 3 によって提供される XamlRoot.RasterizationScale プロパティを使用します。
EdgeGesture None
GazeInputSourcePreview None
HdmiDisplayInformation None
HolographicKeyboardPlacementOverridePreview None
InputPane 代わりに IInputPaneInterop COM インターフェイス (inputpaneinterop.h 内) を使用します。
KeyboardDeliveryInterceptor None
LockApplicationHost None
MouseDevice None
PlayToManager 代わりに IPlayToManagerInterop COM インターフェイス (playtomanagerinterop.h 内) を使用します。
PointerVisualizationSettings None
Print3DManager 代わりに IPrinting3DManagerInterop COM インターフェイス (print3dmanagerinterop.h 内) を使用します。
PrintManager 代わりに IPrintManagerInterop COM インターフェイス (printmanagerinterop.h 内) を使用します。
ProtectionPolicyManager None
RadialControllerConfiguration 代わりに IRadialControllerConfigurationInterop COM インターフェイス (radialcontrollerinterop.h 内) を使用します。
ResourceContext None
ResourceLoader None
SearchPane None
SettingsPane None
SpatialInteractionManager 代わりに ISpatialInteractionManagerInterop COM インターフェイス (spatialinteractionmanagerinterop.h 内) を使用します。
SystemMediaTransportControls 代わりに ISystemMediaTransportControlsInterop COM インターフェイス (systemmediatransportcontrolsinterop.h 内) を使用してください。
SystemNavigationManager None
SystemNavigationManagerPreview None
UserActivityRequestManager 代わりに IUserActivityRequestManagerInterop COM インターフェイス (useractivityinterop.h 内) を使用してください。
UIViewSettings 代わりに IUIViewSettingsInterop COM インターフェイスを使用してください (uiviewsettingsinterop.h 内)。
WebAuthenticationBroker [なし] : 詳細については、こちらの GitHub イシューを参照してください。

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

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

イベント

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

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

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

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

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

パッケージ ID が必要な API

次の WinRT クラスには、パッケージ ID が必要です。 これらの API は、MSIX を使用してパッケージ化されたデスクトップ アプリでのみサポートされています。 この一覧は包括的でない場合があります。