Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Windows desktopové aplikace (WinUI 3, WPF (Windows Presentation Foundation), WinForms, konzola) někdy potřebují volat rozhraní API mimo jejich spravovanou architekturu. Tato stránka vám pomůže pochopit, kdy k tomu dojde, a zvolit správnou techniku.
Dva povrchy rozhraní API, dva vzory vzájemné spolupráce
Windows zpřístupňuje funkce prostřednictvím dvou hlavních ploch rozhraní API:
Rozhraní API Win32 – klasické funkce ve stylu jazyka C exportované ze systémových knihoven DLL (
user32.dll,kernel32.dll,shell32.dllatd.). Ty pokrývají operace nízké úrovně, jako je správa oken, vstupně-výstupní operace souborů, řízení procesů a přístup k hardwaru. Existovaly od nejstarších verzí Windows a zůstávají cestou pro přístup k mnoha funkcím operačního systému, které nemají žádný spravovaný ekvivalent.rozhraní API prostředí Windows Runtime (WinRT) – moderní povrch rozhraní API orientovaný na objekty (obory názvů začínající
Windows.*) zavedený s Windows 8. Rozhraní API WinRT pokrývají oblasti, jako jsou oznámení, zachytávání médií, Bluetooth, geografická poloha a další. Většina rozhraní API WinRT je přímo přístupná z .NET bez zvláštního úsilí, ale některé mají omezení v desktopových aplikacích nebo vyžadují, aby fungovala obslužná rutina oken (HWND).
Kdy se setkáte s interoperabilitou
Obvykle potřebujete interoperabilitu, když vaše architektura aplikace nezpřístupňuje konkrétní funkci operačního systému přímo. Mezi běžné scénáře patří:
| Scénář | Která plocha rozhraní API | Example |
|---|---|---|
| Přizpůsobení záhlaví nebo umístění okna | Win32 |
SetWindowPos, DwmExtendFrameIntoClientArea |
| Nastavit okno jako „vždy navrchu“ nebo řídit pořadí oken | Win32 |
SetWindowPos s HWND_TOPMOST |
| Zobrazení dialogového okna pro výběr souborů nebo sdílení z WinUI 3 | WinRT (vyžaduje HWND) |
FileOpenPicker s InitializeWithWindow |
| Čtení systémové paměti nebo čítačů výkonu | Win32 |
GlobalMemoryStatusEx, QueryPerformanceCounter |
| Zaregistrovat globální klávesovou zkratku | Win32 | RegisterHotKey |
| Odeslání informační zprávy (rozbalené aplikace) | WinRT (se sadou App SDK) | AppNotificationManager |
Ve všech těchto případech napíšete normální kód jazyka C#, ale zavoláte Windows prostřednictvím vrstvy vzájemné spolupráce. Následující témata vás provedou jednotlivými přístupy.
Průvodce rozhodováním
| Potřebuju... | Doporučený přístup | Topic |
|---|---|---|
| Volání rozhraní API Win32 (user32, kernel32, shell32 atd.) z C# | Použití generátoru zdroje CsWin32 – typově bezpečný, bez ručních podpisů | Volání rozhraní API Win32 z C# (CsWin32) |
| Inicializace objektu WinRT pomocí úchytu okna (výběry, dialogy, sdílené uživatelské rozhraní) | Použijte třídy .NET WinRT pro interoperabilitu modelu COM (InitializeWithWindow, WindowNative, atd.) |
volání rozhraní API pro interoperabilitu z aplikace .NET |
| Kontrola, jestli rozhraní API WinRT funguje v desktopové aplikaci (bez UPW) | Projděte si seznam omezení a alternativ. | Rozhraní API WinRT nejsou v desktopových aplikacích podporovaná |
| Podívejte se na úplný příklad WinUI 3 , který přizpůsobí okno pomocí volání Win32. | Postupujte podle kompletního návodu. | Návod: Aplikace WinUI 3 s interoperabilitou Win32 |
Rychlý vývojový diagram
Windows.*- Ano → Omezení najdete v části Rozhraní API WinRT nepodporovaná v desktopových aplikacích. Pokud rozhraní API vyžaduje popisovač okna, viz Volání interoperabilních rozhraní API z aplikace .NET.
- Žádná → Pokračovat ke kroku 2.
Jedná se o nativní rozhraní API win32 (definované v hlavičce sady Windows SDK)?
- Ano → Použijte CsWin32 k vygenerování typově bezpečných vazeb P/Invoke.
- Ne → Může se jednat o rozhraní COM nebo nativní knihovnu třetí strany. Obecné pokyny k P/Invoke najdete v spolupráci platformy .NET s nativním kódem.
Příbuzná témata
Windows developer