Volba přístupu k interoperabilitě pro aplikace Windows

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

  1. Windows.*

  2. Jedná se o nativní rozhraní API win32 (definované v hlavičce sady Windows SDK)?