Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows applications de bureau (WinUI 3, WPF, WinForms, console) doivent parfois appeler des API en dehors de leur framework managé. Cette page vous aide à comprendre quand cela se produit et à choisir la bonne technique.
Deux surfaces d’API, deux modèles d’interopérabilité
Windows expose les fonctionnalités via deux surfaces d’API principales :
API Win32 : les fonctions de style C classiques exportées à partir de DLL système (
user32.dll, ,kernel32.dllshell32.dll, etc.). Celles-ci couvrent les opérations de bas niveau telles que la gestion des fenêtres, les E/S de fichiers, le contrôle de processus et l’accès matériel. Elles existent depuis les versions les plus anciennes de Windows et restent le moyen d'accéder à de nombreuses fonctionnalités du système d'exploitation qui n'ont pas d'équivalent managé.API Windows Runtime (WinRT) : surface d’API moderne orientée objet (espaces de noms commençant par
Windows.*) introduite avec Windows 8. Les API WinRT couvrent des domaines tels que les notifications, la capture multimédia, Bluetooth, la géolocalisation, etc. La plupart des API WinRT sont directement accessibles à partir de .NET sans effort spécial, mais certaines ont des restrictions dans les applications de bureau ou nécessitent un handle de fenêtre (HWND) pour fonctionner.
Quand vous serez confronté à l’interop
Vous avez généralement besoin d’interopérabilité lorsque votre infrastructure d’application n’expose pas directement une fonctionnalité de système d’exploitation particulière. Les scénarios courants sont les suivants :
| Scénario | Quelle surface d’API | Example |
|---|---|---|
| Personnaliser le positionnement de la barre de titre ou de la fenêtre | Win32 |
SetWindowPos, DwmExtendFrameIntoClientArea |
| Définir une fenêtre en tant que « toujours en haut » ou contrôler l’ordre Z | Win32 |
SetWindowPos avec HWND_TOPMOST |
| Afficher un sélecteur de fichiers ou partager une boîte de dialogue à partir de WinUI 3 | WinRT (nécessite HWND) |
FileOpenPicker avec InitializeWithWindow |
| Lire la mémoire système ou les compteurs de performances | Win32 |
GlobalMemoryStatusEx, QueryPerformanceCounter |
| Définir un raccourci clavier global | Win32 | RegisterHotKey |
| Envoyer une notification toast (application non empaquetée) | WinRT (avec le Kit de développement logiciel (SDK) d’application | AppNotificationManager |
Dans tous ces cas, vous écrivez du code C# normal, mais appelez dans Windows via une couche d’interopérabilité. Les rubriques ci-dessous vous guident dans chaque approche.
Guide de décision
| J’ai besoin de... | Approche recommandée | Sujet |
|---|---|---|
| Appeler une API Win32 (utilisateur32, noyau32, shell32, etc.) à partir de C# | Utiliser le générateur source CsWin32 — type-safe, aucune signature écrite manuellement | Appeler des API Win32 à partir de C# (CsWin32) |
| Initialiser un objet WinRT avec un handle de fenêtre (sélecteurs, boîtes de dialogue, interface utilisateur de partage) | Utilisez les classes d’interopérabilité COM .NET WinRT (InitializeWithWindow, WindowNativeetc.) |
Appeler les API d'interopérabilité depuis une application .NET |
| Vérifier si une API WinRT fonctionne dans une application de bureau (non UWP) | Consulter la liste des restrictions et alternatives | Les API WinRT non prises en charge dans les applications de bureau |
| Voir un exemple WinUI 3 complet qui personnalise une fenêtre à l’aide d’appels Win32 | Suivez la procédure pas à pas de bout en bout | Procédure pas à pas : application WinUI 3 avec interopérabilité Win32 |
Organigramme rapide
L’API se trouve-t-elle dans un
Windows.*espace de noms WinRT ?- Oui → Consultez les API WinRT non prises en charge dans les applications de bureau pour connaître les restrictions. Si l’API nécessite un descripteur de fenêtre, consultez Appeler des API d’interopérabilité depuis une application .NET.
- Aucune → Passez à l’étape 2.
Est-ce qu’il s’agit d’une API Win32/native (définie dans un en-tête du KIT de développement logiciel (SDK) Windows) ?
- Oui → Utiliser CsWin32 pour générer des liaisons P/Invoke de type safe.
- Aucune → Il peut s’agir d’une interface COM ou d’une bibliothèque native tierce. Consultez l’interopérabilité de .NET avec le code natif pour des conseils généraux sur P/Invoke.
Rubriques connexes
- Appeler des API Win32 à partir de C# (CsWin32)
- Appeler les API d'interopérabilité depuis une application .NET
- Les API WinRT non prises en charge dans les applications de bureau
- Procédure pas à pas : application WinUI 3 avec interopérabilité Win32
- Récupérer un handle de fenêtre (HWND)
- Interopérabilité .NET avec du code natif
Windows developer