Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jako deweloper aplikacji desktopowych w języku C# na platformie .NET, można używać klas międzyoperacyjnych C#, które reprezentują różne funkcje interoperacyjności oraz interfejsy interoperacyjności środowiska Windows Runtime (WinRT) COM. Należą do nich klasy języka C# reprezentujące funkcję IWindowNative, IInitializeWithWindow, getWindowIdFromWindow i wiele innych.
W tym temacie wymieniono dostępne klasy międzyoperacyjności języka C# i pokazano, jak z nich korzystać. W sekcji Tło na końcu tematu opisano, jak interfejsy międzyoperacyjne były używane w poprzednich wersjach platformy .NET i dlaczego wprowadzono zmiany.
Skonfiguruj projekt platformy .NET do używania klas międzyoperacyjnych C#
Klasy międzyoperacyjności języka C# wymienione w następnej sekcji (Dostępne klasy międzyoperacyjności języka C#) są dostępne na platformie .NET w ramach zestawu SDK aplikacji systemu Windowslub przy użyciu określonego monikera platformy docelowej, jak zobaczymy.
W projekcie pulpitowym WinUI 3 w języku C#
Podczas tworzenia nowego projektu WinUI 3 w programie Visual Studio (zobacz Tworzenie pierwszego projektu WinUI 3), projekt jest już skonfigurowany i możesz rozpocząć korzystanie z wszystkich klas międzyoperacyjności języka C#.
W innych typach projektów pulpitowych C# (WPF lub WinForms)
W przypadku innych typów projektów klasycznych platformy .NET, takich jak Windows Presentation Foundation (WPF) lub Windows Forms (WinForms)— należy skonfigurować projekt przed uzyskaniem dostępu do klas międzyoperacyjności języka C#. W przypadku pierwszego zestawu klas wymienionych poniżej należy odwołać się do Windows App SDK . W drugim zestawie należy skonfigurować Target Framework Moniker, który jest przeznaczony dla systemu Windows 10 w wersji 1809 lub nowszej, w następujący sposób:
Otwórz plik projektu dla aplikacji desktopowej w C# na platformie .NET.
W pliku
.csprojzmodyfikuj element TargetFramework, aby docelowo odnosił się do określonej wersji .NET i Windows SDK. Na przykład poniższy element jest odpowiedni dla projektu platformy .NET 6 przeznaczonego dla systemu Windows 10 w wersji 2004.<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> </PropertyGroup>
Aby uzyskać więcej informacji — w tym listę innych obsługiwanych wartości — zobacz Użyj opcji Moniker platformy docelowej.
Dostępne klasy międzyoperacyjności języka C#
Note
Poniższe klasy wymagają zestawu .NET 6 SDK lub nowszego.
Poniżej przedstawiono dostępne klasy międzyoperacyjności języka C#, mapowane z ich podstawowej funkcji międzyoperacyjnej lub interfejsu międzyoperacyjności WinRT COM. Każda wymieniona klasa implementuje funkcje/metody swojego podstawowego interfejsu API międzyoperacyjności oraz zapewnia typowo bezpieczne otoki dla parametrów i zwracanych wartości. Na przykład Windows.ApplicationModel.DataTransfer.DragDrop.Core.DragDropManagerInterop.GetForWindow wymaga parametru uchwytu okna IntPtr (HWND) i zwraca obiekt CoreDragDropManager . Wszystkie poniższe klasy międzyoperacyjności języka C# i skojarzone metody są statyczne.
Dostępny jako część zestawu SDK aplikacji systemu Windows
Klasa Microsoft.UI.Win32Interop implementuje metody międzyoperacyjności języka C# w poniższej tabeli. Aby zapoznać się z przykładem kodu, zobacz Zarządzanie oknami aplikacji.
| Funkcja Interop | Metoda międzyoperacyjności języka C# |
|---|---|
| GetDisplayIdFromMonitor | (Microsoft.UI) DisplayId Win32Interop.GetDisplayIdFromMonitor(IntPtr hmonitor) |
| GetIconFromIconId | (Microsoft.UI) IntPtr Win32Interop.GetIconFromIconId(IconId iconId) |
| GetIconIdFromIcon | (Microsoft.UI) IconId Win32Interop.GetIconIdFromIcon(IntPtr hicon) |
| GetMonitorFromDisplayId | (Microsoft.UI) IntPtr Win32Interop.GetMonitorFromDisplayId(DisplayId displayId) |
| GetWindowFromWindowId | (Microsoft.UI) IntPtr Win32Interop.GetWindowFromWindowId(WindowId windowId) |
| GetWindowIdFromWindow | (Microsoft.UI) WindowId Win32Interop.GetWindowIdFromWindow(IntPtr hwnd) |
Dostępne za pośrednictwem identyfikatora platformy docelowej
| Interfejs interoperacyjny WinRT COM | Klasa międzyoperacyjności języka C# |
|---|---|
| IAccountsSettingsPaneInterop | (Windows.UI.ApplicationSettings) AccountsSettingsPaneInterop |
| IDisplayInformationStaticsInterop | Wprowadzone w ramach TFM net6.0-windows10.0.22621.0 i .NET 6.0.7.(Windows.Graphics.Display) DisplayInformationInterop |
| IDragDropManagerInterop | (Windows.ApplicationModel.DataTransfer.DragDrop.Core) DragDropManagerInterop |
| IInitializeWithWindow | (WinRT.Interop) InitializeWithWindow |
| IInputPaneInterop | (Windows.UI.ViewManagement) InputPaneInterop |
| IPlayToManagerInterop | (Windows.Media.PlayTo) PlayToManagerInterop |
| IPrintManagerInterop | (Windows.Graphics.Print) PrintManagerInterop |
| IRadialControllerConfigurationInterop | (Windows.UI.Input) RadialControllerConfigurationInterop |
| IRadialControllerIndependentInputSourceInterop | (Windows.UI.Input.Core) RadialControllerIndependentInputSourceInterop |
| IRadialControllerInterop | (Windows.UI.Input) RadialControllerInterop |
| ISpatialInteractionManagerInterop | (Windows.UI.Input.Spatial) SpatialInteractionManagerInterop |
| ISystemMediaTransportControlsInterop | (Windows.Media) SystemMediaTransportControlsInterop |
| IUIViewSettingsInterop | (Windows.UI.ViewManagement) UIViewSettingsInterop |
| IUserConsentVerifierInterop | (Windows.Security.Credentials.UI) UserConsentVerifierInterop |
| IWebAuthenticationCoreManagerInterop | (Windows.Security.Authentication.Web.Core) WebAuthenticationCoreManagerInterop |
| IWindowNative | Tylko winUI 3 (WinRT.Interop) WindowNative Aby uzyskać alternatywy dla WPF i WinForms, zobacz Pobieranie uchwytu okna (HWND). |
Przykład kodu
W tym przykładzie kodu pokazano, jak używać dwóch klas międzyoperacyjności języka C# w aplikacji WinUI 3 (zobacz Tworzenie pierwszego projektu WinUI 3). Przykładowym scenariuszem jest wyświetlenie elementu Windows.Storage.Pickers.FolderPicker. Jednak przed wyświetleniem selektora w aplikacji komputerowej należy zainicjować go przy użyciu uchwytu (HWND) okna właściciela.
- Uchwyt okna (HWND) można uzyskać przy użyciu interfejsu międzyoperacyjnego IWindowNative WinRT COM. A (zaglądając w tabelę w poprzedniej sekcji) ten interfejs jest reprezentowany przez klasę C# WinRT.Interop.WindowNative.
thisW tym miejscu obiekt jest odwołaniem do obiektu Microsoft.UI.Xaml.Window z głównego pliku kodu za pomocą okna. - Aby zainicjować fragment interfejsu użytkownika za pomocą okna właściciela, należy użyć interfejsu międzyoperacyjności IInitializeWithWindow WinRT COM. Ten interfejs jest reprezentowany przez klasę międzyoperacyjną WinRT.Interop.InitializeWithWindow C#.
private async void myButton_Click(object sender, RoutedEventArgs e)
{
// Create a folder picker.
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
// 1. Retrieve the window handle (HWND) of the current WinUI 3 window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
// 2. Initialize the folder picker with the window handle (HWND).
WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hWnd);
// Use the folder picker as usual.
folderPicker.FileTypeFilter.Add("*");
var folder = await folderPicker.PickSingleFolderAsync();
}
Zobacz również Pobieranie uchwytu okna (HWND) i Wyświetlanie obiektów interfejsu użytkownika WinRT, które są zależne od CoreWindow.
Background
Poprzednie wersje programów .NET Framework i .NET Core zawierały wbudowaną wiedzę na temat środowiska WinRT. W poprzednich wersjach można zdefiniować interfejs międzyoperacyjności bezpośrednio w języku C# za pomocą atrybutu ComImport , a następnie bezpośrednio rzutować projektowaną klasę na ten interfejs międzyoperacyjności.
Ponieważ WinRT jest technologią specyficzną dla systemu Windows, aby zapewnić obsługę przenośności i wydajności platformy .NET, z kompilatora języka C# i środowiska uruchomieniowego platformy .NET usunięto obsługę projekcji WinRT i przenieśliśmy ją do zestawu narzędzi C#/WinRT (zobacz Wbudowana obsługa winRT została usunięta z platformy .NET).
Chociaż technika ComImport nadal działa w przypadku interfejsów międzyoperacyjności opartych na protokole IUnknown, nie działa już w przypadku interfejsów opartych na protokole IInspectable, które są używane do współdziałania z WinRT.
Zamiast tego, w .NET można użyć klas międzyoperacyjności C# opisanych w tym temacie.
Rozwiązywanie problemów i znane problemy
Obecnie nie ma znanych problemów z klasami międzyoperacyjnymi C#. Aby przekazać opinię lub zgłosić inne problemy, dodaj swoją opinię do istniejącego problemu lub zgłoś nowy problem w repozytorium GitHub WindowsAppSDK.
Tematy pokrewne
Windows developer