Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sebagai pengembang aplikasi desktop C#, dalam .NET Anda dapat menggunakan kelas interop C# yang mewakili beberapa fungsi interoperabilitas dan antarmuka interoperabilitas COM Windows Runtime (WinRT). Ini termasuk kelas C# yang mewakili IWindowNative, IInitializeWithWindow, fungsi GetWindowIdFromWindow , dan banyak lainnya.
Topik ini mencantumkan kelas interop C# yang tersedia, dan menunjukkan cara menggunakannya. Bagian Background di akhir topik menjelaskan bagaimana antarmuka interop digunakan dalam versi .NET sebelumnya, dan mengapa perubahan dilakukan.
Mengonfigurasi project desktop .NET untuk menggunakan kelas interop C#
Kelas interop C# yang tercantum di bagian berikutnya (
Dalam proyek desktop C# WinUI 3
Saat Anda membuat project WinUI baru di Visual Studio (lihat
Di jenis project desktop C# lainnya (WPF atau WinForms)
Untuk jenis project desktop .NET lainnya—seperti Windows Presentation Foundation (WPF) atau Windows Forms (WinForms)—Anda harus mengonfigurasi project sebelum dapat access kelas interop C#. Untuk set kelas pertama yang tercantum di bawah ini, Anda harus mereferensikan Windows App SDK. Untuk set kedua, Anda harus mengonfigurasi Target Framework Moniker yang menargetkan Windows 10, versi 1809 atau yang lebih baru, seperti ini:
Buka file project untuk project desktop C# .NET Anda.
Dalam file
.csproj, ubah elemen TargetFramework untuk menargetkan versi .NET dan Windows SDK tertentu. Misalnya, elemen berikut sesuai untuk project .NET 6 yang menargetkan Windows 10, versi 2004.<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> </PropertyGroup>
Untuk informasi selengkapnya—termasuk daftar nilai lain yang didukung—lihat Menggunakan opsi Target Framework Moniker.
Kelas interop C# yang tersedia
Note
Kelas di bawah ini memerlukan .NET 6 SDK atau yang lebih baru.
Berikut adalah kelas interop C# yang tersedia, dipetakan dari fungsi interop yang mendasar atau antarmuka interop WinRT COM. Setiap kelas yang tercantum mengimplementasikan fungsi/metode API interop yang mendasarnya, dan menyediakan pembungkus jenis yang aman untuk parameter dan nilai pengembalian. Misalnya, Windows.ApplicationModel.DataTransfer.DragDrop.Core.DragDropManagerInterop.GetForWindow memerlukan parameter handle jendela IntPtr (HWND), dan mengembalikan objek CoreDragDropManager . Semua kelas interop C# di bawah ini dan metode terkait statis.
Tersedia sebagai bagian dari Windows App SDK
Kelas Microsoft.UI.Win32Interop mengimplementasikan metode interop C# dalam tabel di bawah ini. Untuk contoh kode, lihat Mengelola jendela aplikasi.
| Fungsi interoperabilitas | Metode interop 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) |
Tersedia melalui Target Framework Moniker
| Antarmuka interop WinRT COM | Kelas interop C# |
|---|---|
| IAccountsSettingsPaneInterop | (Windows.UI.ApplicationSettings) AccountsSettingsPaneInterop |
| IDisplayInformationStaticsInterop | Diperkenalkan dengan TFM net6.0-windows10.0.22621.0 dan .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.Printing) 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 | Hanya WinUI (WinRT.Interop) WindowNative Untuk alternatif untuk WPF dan WinForms, lihat Retrieve handle jendela (HWND). |
Contoh kode
Contoh kode ini menunjukkan cara menggunakan dua kelas interop C# dalam aplikasi WinUI (lihat Buat proyek WinUI pertama Anda). Contoh skenarionya adalah menampilkan Windows. Storage. Pickers.FolderPicker. Tetapi sebelum menampilkan pemilih di aplikasi desktop, penting untuk menginisialisasi dengan handle (HWND) jendela pemilik.
- Anda dapat memperoleh handle jendela (HWND) dengan menggunakan antarmuka interop WinRT COM IWindowNative. Dan (melihat tabel di bagian sebelumnya) antarmuka tersebut diwakili oleh kelas interop WinRT.Interop.WindowNative C#. Di sini,
thisobjek adalah referensi ke objek Microsoft.UI.Xaml.Window dari file kode jendela utama di belakang. - Untuk menginisialisasi sepotong UI dengan jendela pemilik, Anda menggunakan antarmuka interop IInitializeWithWindow WinRT COM. Dan antarmuka tersebut diwakili oleh kelas interop 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 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();
}
Lihat juga Akses handle jendela (HWND) dan tampilkan objek UI WinRT yang bergantung pada CoreWindow.
Background
Versi sebelumnya dari .NET Framework dan .NET Core memiliki pengetahuan bawaan tentang WinRT. Dengan versi sebelumnya, Anda dapat menentukan antarmuka interop langsung di C# dengan atribut ComImport , dan kemudian langsung mentransmisikan kelas yang diproyeksikan ke antarmuka interop tersebut.
Karena WinRT adalah teknologi khusus Windows, untuk mendukung tujuan portabilitas dan efisiensi .NET, kami mengangkat dukungan proyeksi WinRT dari compiler C# dan runtime .NET, dan memindahkannya ke C#/WinRT toolkit (lihat Dukunganbuilt-in untuk WinRT dihapus dari .NET).
Meskipun teknik ComImport masih berfungsi untuk antarmuka interop berbasis IUnknown, teknik ini tidak lagi berfungsi untuk antarmuka berbasis IInspectable yang digunakan untuk beroperasi dengan WinRT.
Jadi sebagai pengganti, dalam .NET, Anda dapat menggunakan kelas interop C# yang dijelaskan dalam topik ini.
Pemecahan masalah dan masalah yang diketahui
Saat ini tidak ada masalah yang diketahui untuk kelas interop C#. Untuk memberikan umpan balik, atau melaporkan masalah lain, tambahkan umpan balik Anda ke masalah yang ada, atau ajukan masalah baru pada WindowsAppSDK GitHub repo.
Topik terkait
Windows developer