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.
Windows aplikasi desktop (WinUI 3, WPF, WinForms, konsol) terkadang perlu memanggil API di luar kerangka kerja terkelola mereka. Halaman ini membantu Anda memahami kapan itu terjadi dan memilih teknik yang tepat.
Dua permukaan API, dua pola interop
Windows mengekspos fungsionalitas melalui dua permukaan API utama:
API Win32 — Fungsi gaya C klasik yang diekspor dari DLL sistem (
user32.dll, ,kernel32.dllshell32.dll, dll.). Ini mencakup operasi tingkat rendah seperti manajemen jendela, I/O file, kontrol proses, dan akses perangkat keras. Mereka sudah ada sejak versi paling awal Windows dan tetap menjadi cara untuk mengakses banyak fitur OS yang tidak memiliki pengelolaan yang setara.Windows Runtime (WinRT) API — Permukaan API modern berorientasi objek (namespace dimulai dengan
Windows.*) yang diperkenalkan dengan Windows 8. API WinRT mencakup area seperti pemberitahuan, pengambilan media, Bluetooth, geolokasi, dan banyak lagi. Sebagian besar API WinRT dapat diakses langsung dari .NET tanpa upaya khusus, tetapi beberapa memiliki batasan di aplikasi desktop atau memerlukan handel jendela (HWND) untuk berfungsi.
Saat Anda menemui interop
Anda biasanya memerlukan interop saat kerangka kerja aplikasi Anda tidak mengekspos kemampuan OS tertentu secara langsung. Skenario umum meliputi:
| Skenario | Cakupan API yang mana | Example |
|---|---|---|
| Mengkustomisasi bilah judul atau penempatan jendela | Win32 |
SetWindowPos, DwmExtendFrameIntoClientArea |
| Atur jendela sebagai "always on top" atau kontrol Z-order | Win32 |
SetWindowPos dengan HWND_TOPMOST |
| Perlihatkan pemilih file atau dialog berbagi dari WinUI 3 | WinRT (perlu HWND) |
FileOpenPicker dengan InitializeWithWindow |
| Membaca memori sistem atau penghitung kinerja | Win32 |
GlobalMemoryStatusEx, QueryPerformanceCounter |
| Daftarkan tombol pintas global | Win32 | RegisterHotKey |
| Kirim notifikasi toast (aplikasi tanpa paket) | WinRT (dengan App SDK) | AppNotificationManager |
Dalam semua kasus ini, Anda menulis kode C# normal tetapi memanggil ke Windows melalui lapisan interop. Topik di bawah ini memandu Anda melalui setiap pendekatan.
Panduan keputusan
| Aku harus... | Pendekatan yang disarankan | Topic |
|---|---|---|
| Panggil WIN32 API (user32, kernel32, shell32, dll.) dari C# | Gunakan generator sumber CsWin32 — jenis aman, tidak ada tanda tangan tertulis tangan | Memanggil API Win32 dari C# (CsWin32) |
| Menginisialisasi objek WinRT dengan handle jendela (pemilih, dialog, antarmuka berbagi) | Gunakan kelas interop .NET WinRT COM (InitializeWithWindow, , WindowNativedll.) |
Panggil API interop dari aplikasi .NET |
| Periksa apakah WinRT API berfungsi di aplikasi desktop (non-UWP) | Lihat daftar pembatasan dan alternatif | API WinRT tidak didukung di aplikasi desktop |
| Lihat contoh WinUI 3 lengkap yang menyesuaikan jendela menggunakan panggilan Win32 | Ikuti panduan dari awal hingga akhir | Panduan: aplikasi WinUI 3 dengan interoperabilitas Win32 |
Diagram alur cepat
Apakah API berada di
Windows.*namespace WinRT?- Ya → Periksa API WinRT yang tidak didukung di aplikasi desktop untuk pembatasan. Jika API memerlukan handle jendela, lihat Memanggil API interop dari aplikasi .NET.
- Tidak → Lanjutkan ke langkah 2.
Apakah itu API Win32/native (didefinisikan dalam header SDK Windows)?
- Ya → Gunakan CsWin32 untuk menghasilkan binding P/Invoke yang aman terhadap tipe.
- Tidak → Ini mungkin antarmuka COM atau pustaka asli pihak ketiga. Lihat interop .NET dengan kode asli untuk panduan P/Invoke umum.
Topik terkait
Windows developer