Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Desktop-Apps (WinUI 3, WPF, WinForms, Konsole) müssen manchmal APIs außerhalb ihres verwalteten Frameworks aufrufen. Diese Seite hilft Ihnen zu verstehen, wann dies geschieht, und wählen Sie die richtige Technik aus.
Zwei API-Oberflächen, zwei Interopmuster
Windows macht Funktionen über zwei Haupt-API-Oberflächen verfügbar:
Win32-APIs – Die klassischen C-Stil-Funktionen, die aus System-DLLs (
user32.dll,kernel32.dll, ,shell32.dllusw.) exportiert wurden. Diese umfassen Vorgänge auf niedriger Ebene wie Fensterverwaltung, Datei-E/A, Prozesssteuerung und Hardwarezugriff. Sie sind seit den frühesten Versionen von Windows vorhanden und können weiterhin auf viele Betriebssystemfeatures zugreifen, die keine verwaltete Entsprechung haben.Windows-Runtime -APIs (WinRT) – Eine moderne objektorientierte API-Oberfläche (beginnend mit
Windows.*) eingeführt mit Windows 8. WinRT-APIs decken Bereiche wie Benachrichtigungen, Medienaufnahme, Bluetooth, Geolocation und vieles mehr ab. Auf die meisten WinRT-APIs kann direkt über .NET ohne besonderen Aufwand zugegriffen werden, aber einige haben Einschränkungen in Desktop-Apps oder erfordern ein Fensterhandle (HWND), um zu funktionieren.
Wenn Sie auf Interop stoßen
In der Regel benötigen Sie Interop, wenn Ihr App-Framework keine bestimmte Betriebssystemfunktion direkt verfügbar macht. Zu den gängigen Szenarien gehören:
| Szenario | Welche API-Oberfläche | Example |
|---|---|---|
| Anpassen der Titelleiste oder Fensterplatzierung | Win32 |
SetWindowPos, DwmExtendFrameIntoClientArea |
| Ein Fenster als "immer im Vordergrund" festlegen oder die Z-Reihenfolge steuern | Win32 |
SetWindowPos mit HWND_TOPMOST |
| Ein Dateiauswahlfenster oder einen Freigabedialog in WinUI 3 anzeigen | WinRT (benötigt HWND) |
FileOpenPicker mit InitializeWithWindow |
| Lesen von Systemspeicher oder Leistungsindikatoren | Win32 |
GlobalMemoryStatusEx, QueryPerformanceCounter |
| Registrieren eines globalen Hotkeys | Win32 | RegisterHotKey |
| Senden einer Toastbenachrichtigung (nicht paketierte App) | WinRT (mit App SDK) | AppNotificationManager |
In all diesen Fällen schreiben Sie normalen C#-Code, rufen jedoch Windows über eine Interoperabilitätsebene auf. Die folgenden Themen führen Sie durch jeden Ansatz.
Leitfaden zur Entscheidungsfindung
| Ich muss... | Empfohlener Ansatz | Thema |
|---|---|---|
| Aufrufen einer Win32-API (User32, kernel32, shell32 usw.) von C# | Verwenden des CsWin32-Quellgenerators – typsicher, ohne handschriftlichen Signaturen | Aufrufen von Win32-APIs aus C# (CsWin32) |
| Initialisieren eines WinRT-Objekts mit einem Fensterziehpunkt (Auswahl, Dialogfelder, Freigeben der Benutzeroberfläche) | Verwenden der .NET WinRT COM-Interoperabilitätsklassen (InitializeWithWindow, WindowNativeusw.) |
Interop-APIs aus einer .NET-Anwendung aufrufen |
| Überprüfen, ob eine WinRT-API in einer Desktop-App (nicht UWP) funktioniert | Weitere Informationen finden Sie in der Liste "Einschränkungen und Alternativen" | WinRT-APIs werden in Desktop-Apps nicht unterstützt |
| Ein vollständiges WinUI 3-Beispiel zum Anpassen eines Fensters mithilfe von Win32-Aufrufen | Durchlaufen Sie die End-to-End-Schritt-für-Schritt-Anleitung | Exemplarische Vorgehensweise: WinUI 3-App mit Win32-Interoperabilität |
Schnellflussdiagramm
Befindet sich die API in einem
Windows.*WinRT-Namespace?- Ja → Informationen zu Einschränkungen finden Sie unter WinRT-APIs, die in Desktop-Apps nicht unterstützt werden. Wenn die API ein Fensterhandle erfordert, siehe Aufrufen von Interop-APIs aus einer .NET-App.
- Keine → Fahren Sie mit Schritt 2 fort.
Ist es eine Win32/native API (definiert in einem Windows SDK-Header)?
- Ja → Verwenden von CsWin32 zum Generieren von typsicheren P/Invoke-Bindungen.
- Keine → Es kann sich um eine COM-Schnittstelle oder eine systemeigene Drittanbieterbibliothek handeln. Allgemeine Anleitungen zu P/Invoke finden Sie unter .NET Interoperabilität mit systemeigenem Code.
Zugehörige Themen
Windows developer