Delen via


Windows Runtime-API's worden niet ondersteund in bureaublad-apps

Hoewel u de meeste Windows Runtime-API's (WinRT) kunt gebruiken (zie Windows UWP-naamruimten) in uw C#- of C++-bureaublad-app, zijn er twee hoofdsets met WinRT-API's die niet worden ondersteund in desktop-apps of waarvoor beperkingen gelden:

  • API's die afhankelijk zijn van gebruikersinterfacefuncties (UI) die alleen zijn ontworpen voor gebruik in een UWP-app (Universal Windows Platform).
  • API's waarvoor pakketidentiteit is vereist (zie Functies waarvoor pakketidentiteit is vereist). Dergelijke API's worden alleen ondersteund in bureaublad-apps die zijn verpakt met MSIX-.

Dit artikel bevat informatie over beide sets winRT-API's. Indien beschikbaar, worden in dit artikel alternatieve API's voorgesteld om dezelfde functionaliteit te bereiken als de API's die niet worden ondersteund in bureaublad-apps. De meeste alternatieve API's zijn beschikbaar in WinUI 3 of via WinRT COM-interfaces die beschikbaar zijn in de Windows SDK.

Notitie

Apps die .NET gebruiken, kunnen gebruikmaken van opgegeven klasse-implementaties voor sommige WinRT COM-interfaces die in dit artikel worden vermeld. Deze klassen zijn gemakkelijker te gebruiken dan het rechtstreeks gebruiken van de WinRT COM-interfaces. Zie Interop-API's aanroepen vanuit een .NET-appvoor meer informatie over de beschikbare klasse-implementaties. Houd er rekening mee dat voor deze klassen de .NET 6 SDK of hoger is vereist.

Dit artikel wordt bijgewerkt naarmate er meer tijdelijke oplossingen en vervangingen worden geïdentificeerd. Als u een probleem ondervindt met een API die hier niet wordt vermeld, maak dan een verzoek in de microsoft-ui-xaml repository met de API-naam en het doel dat u probeert te bereiken met deze API.

API's met afhankelijkheden van alleen-UWP-ui-functies

Sommige WinRT-API's zijn speciaal ontworpen voor UI-scenario's in een UWP-app. Deze API's werken niet goed in desktop-apps vanwege threadingmodel en andere platformverschillen. Deze API's en andere WinRT-API's met afhankelijkheden worden niet ondersteund voor gebruik in desktop-apps.

Niet-ondersteunde kernklassen

Deze WinRT-klassen worden niet ondersteund in bureaublad-apps:

Klas Alternatieve API's
ApplicationView Geen
CoreApplicationView Gebruik in plaats daarvan de klasse Window van WinUI 3.
CoreApplicationViewTitleBar Gebruik in plaats van de eigenschap ExtendViewIntoTitleBar de eigenschap Window.ExtendContentIntoTitleBar geleverd door WinUI 3.
CoreDispatcher Gebruik in plaats daarvan de eigenschap Microsoft.UI.Xaml.Window.DispatcherQueue geleverd door WinUI 3.

Houd er rekening mee dat de eigenschappen windows.UI.Xaml.Window.Dispatcher en Windows.UI.Xaml.DependencyObject.Dispatcher eigenschappen null retourneren in een bureaublad-app.
CoreWindow Zie ook de Klassen die IInitializeWithWindow implementeren sectie hieronder.

Gebruik in plaats van de methode GetKeyState de methode InputKeyboardSource.GetKeyStateForCurrentThread die wordt geleverd door WinUI 3.

Gebruik in plaats van de eigenschap PointerCursor de eigenschap UIElement.ProtectedCursor zoals aangeboden door WinUI 3. U moet een subklasse van UIElement- hebben om toegang te krijgen tot die eigenschap.
UserActivity Gebruik in plaats daarvan de COM-interface IUserActivitySourceHostInterop (in useractivityinterop.h).

Zie Niet-ondersteunde leden verderop in dit onderwerp voor andere WinRT-API's die niet worden ondersteund in bureaublad-apps.

Klassen met een methode XxxForCurrentView

Veel WinRT-klassen hebben een statische methode GetForCurrentView of CreateForCurrentView, zoals UIViewSettings.GetForCurrentView. Deze XxxForCurrentView--methoden hebben een impliciete afhankelijkheid van het ApplicationView- type, dat niet wordt ondersteund in bureaublad-apps. Omdat ApplicationView- niet wordt ondersteund in bureaublad-apps, worden ook geen van de XxxForCurrentView--methoden ondersteund. Sommige niet-ondersteunde XxxForCurrentView methoden retourneren niet alleen null, maar genereren ook uitzonderingen.

Notitie

CoreInputView.GetForCurrentViewwordt ondersteund in bureaublad-apps, en het kan worden gebruikt, zelfs zonder een CoreWindow. U kunt die methode gebruiken om een CoreInputView--object op te halen op elke thread; en als die thread een voorgrondvenster heeft, produceert dat object gebeurtenissen.

De volgende klassen worden ondersteund in bureaublad-apps; maar om een exemplaar op te halen in een bureaublad-app, gebruikt u een ander mechanisme dan de methoden GetForCurrentView of CreateForCurrentView methoden. Voor de onderstaande klassen met een COM-interface die als alternatieve API wordt vermeld, kunnen C#-ontwikkelaars deze WinRT COM-interfaces ook gebruiken (zie Interop-API's aanroepen vanuit een .NET-app). De lijst is mogelijk niet uitgebreid.

Klas Alternatieve API's
AccountsSettingsPane Gebruik in plaats daarvan de IAccountsSettingsPaneInterop COM-interface (in accountssettingspaneinterop.h).
CoreDragDropManager Gebruik in plaats daarvan de IDragDropManagerInterop COM-interface (in dragdropinterop.h).
CoreTextServicesManager Deze klasse wordt momenteel alleen ondersteund in desktop-apps in Windows Insider Preview-builds.
DataTransferManager Gebruik in plaats daarvan de IDataTransferManagerInterop COM-interface (in shobjidl_core.h).
DisplayInformation Als u een exemplaar van DisplayInformationwilt ophalen, gebruikt u de interface IDisplayInformationStaticsInterop.

U kunt ook in plaats van de eigenschap LogicalDpi de eigenschap XamlRoot.RasterizationScale gebruiken en naar wijzigingen luisteren via de gebeurtenis XamlRoot.Changed (de eigenschap XamlRoot.RasterizationScale is opgegeven in WinUI 3).

En in plaats van de eigenschap Raw PixelsPerView Pixel kunt u de eigenschap XamlRoot.RasterizationScale van WinUI 3 gebruiken.
InputPane Gebruik in plaats daarvan de IInputPaneInterop COM-interface (in inputpaneinterop.h).
PlayToManager Gebruik in plaats daarvan de IPlayToManagerInterop COM-interface (in playtomanagerinterop.h).
Print3DManager Gebruik in plaats daarvan de IPrinting3DManagerInterop COM-interface (in print3dmanagerinterop.h).
PrintManager Gebruik in plaats daarvan de IPrintManagerInterop COM-interface (in printmanagerinterop.h).
RadialController Gebruik in plaats daarvan de IRadialControllerInterop COM-interface (in radialcontrollerinterop.h).
RadialControllerConfiguration Gebruik in plaats daarvan de IRadialControllerConfigurationInterop COM-interface (in radialcontrollerinterop.h).
ResourceContext Zie migratie van MRT naar MRT Core .
ResourceLoader- Zie MRT naar MRT Core-migratie.
SpatialInteractionManager Gebruik in plaats daarvan de ISpatialInteractionManagerInterop COM-interface (in spatialinteractionmanagerinterop.h).
SystemMediaTransportControls Gebruik in plaats daarvan de ISystemMediaTransportControlsInterop COM-interface (in systemmediatransportcontrolsinterop.h).
UserActivityRequestManager Gebruik in plaats daarvan de COM-interface IUserActivityRequestManagerInterop (in useractivityinterop.h).
UIViewSettings Gebruik in plaats daarvan de IUIViewSettingsInterop COM-interface (in uiviewsettingsinterop.h).

De volgende klassen worden niet ondersteund in bureaubladapps, omdat de API's geen alternatief bieden voor de methode GetForCurrentView of CreateForCurrentView. De lijst is mogelijk niet uitgebreid.

Klas Alternatieve API's
AppCapture Geen
BrightnessOverride Geen
ConnectedAnimationService Geen
CoreInputView Geen
CoreWindowResizeManager Geen
DisplayEnhancementOverride Geen
EdgeGesture Geen
GazeInputSourcePreview Geen
HdmiDisplayInformation Geen
HolographicKeyboardPlacementOverridePreview Geen
KeyboardDeliveryInterceptor Geen
LockApplicationHost Geen
Muisapparaat Geen
InstellingenvoorAanwijzerVisualisatie Geen
ProtectionPolicyManager Geen
SearchPane Geen
SettingsPane Geen
SystemNavigationManager Geen
SystemNavigationManagerPreview Geen
WebAuthenticationBroker Geen. Zie de WebAuthenticationBroker.AuthenticateAsync genereert COMException GitHub-probleem voor meer informatie.

Klassen die IInitializeWithWindow implementeren

Bepaalde selectievakjes, pop-ups, dialoogvensters en andere Windows Runtime-objecten (WinRT) zijn afhankelijk van een CoreWindow-, meestal om een gebruikersinterface weer te geven. Hoewel CoreWindow- niet wordt ondersteund in desktop-apps (zie Core niet-ondersteunde klassen hierboven), kunt u nog steeds veel van deze WinRT-klassen in uw bureaublad-app gebruiken door een beetje interoperatiecode toe te voegen.

Zie WinRT UI-objecten weergeven die afhankelijk zijn van CoreWindowvoor meer informatie (inclusief een lijst met betrokken typen) en codevoorbeelden.

Niet-ondersteunde leden

Deze sectie bevat (of beschrijft, waarbij een uitgebreide lijst niet mogelijk is) specifieke leden van WinRT-klassen die niet worden ondersteund voor gebruik in bureaublad-apps. Tenzij anders vermeld, worden alle andere klassen, behalve deze leden, ondersteund in bureaublad-apps.

Gebeurtenissen

De volgende klassen worden ondersteund in bureaublad-apps, met uitzondering van de opgegeven gebeurtenissen.

Klas Niet-ondersteunde gebeurtenissen
UISettings KleurwaardenVeranderd
Toegankelijkheidsinstellingen HoogContrastGewijzigd

Methoden

De volgende klassen worden ondersteund in bureaublad-apps, met uitzondering van de opgegeven methode(en).

Klas Niet-ondersteunde methoden
ApparaatInformatieKoppeling PairAsync

Methoden die gebruikmaken van het Request naamgevingspatroon

De meeste methoden die het naamgevingspatroon Request volgen, zoals AppCapability.RequestAccessAsync en StoreContext.RequestPurchaseAsync, worden niet ondersteund in bureaubladapps. Intern gebruiken deze methoden de klasse Windows.UI.Popups. Deze klasse vereist dat de thread een CoreWindow--object heeft, dat niet wordt ondersteund in bureaublad-apps.

De volledige lijst van methoden die het Aanvraag naamgevingspatroon volgen is erg lang, en dit artikel biedt geen uitgebreide lijst van deze methoden.

API's waarvoor pakketidentiteit is vereist

Voor de volgende WinRT-klassen is pakketidentiteit vereist (zie Functies waarvoor pakketidentiteit is vereist). Deze API's worden alleen ondersteund in desktop-apps die zijn verpakt (dat wil gezegd, die pakketidentiteit hebben tijdens runtime). De lijst is mogelijk niet uitgebreid.

Bovendien bieden deAdaptiveMediaSource.CreateFromUriAsync-methoden geen ondersteuning voor de ms-appx- en ms-resource-URI-indelingen wanneer deze worden aangeroepen vanuit een bureaublad-app die geen pakketidentiteit heeft.