Windows uygulamaları için birlikte çalışma yaklaşımınızı seçin

Windows masaüstü uygulamalarının (WinUI 3, WPF, WinForms, konsol) bazen yönetilen çerçeveleri dışında API'leri çağırması gerekir. Bu sayfa, bunun ne zaman gerçekleştiğini anlamanıza ve doğru tekniği seçmenize yardımcı olur.

İki API yüzeyi, iki birlikte çalışma deseni

Windows iki ana API yüzeyi aracılığıyla işlevselliği kullanıma sunar:

  • Win32 API'leri — Sistem DLL'lerinden (user32.dll, kernel32.dll, shell32.dllvb.) dışarı aktarılan klasik C stili işlevlerdir. Bunlar pencere yönetimi, dosya G/Ç, işlem denetimi ve donanım erişimi gibi alt düzey işlemleri kapsar. Bunlar, Windows'nin en eski sürümlerinden bu yana mevcut ve yönetilen eşdeğeri olmayan birçok işletim sistemi özelliğine erişmenin yolu olmaya devam ediyor.

  • Windows Çalışma Zamanı (WinRT) API'leri — Windows 8 ile sunulan modern, nesne odaklı API yüzeyi (ile Windows.*başlayan ad alanları). WinRT API'leri bildirimler, medya yakalama, Bluetooth, coğrafi konum ve daha fazlası gibi alanları kapsar. WinRT API'lerinin çoğuna .NET özel bir çaba olmadan doğrudan erişilebilir, ancak bazılarının masaüstü uygulamalarında kısıtlamaları vardır veya çalışması için bir pencere tutamacı (HWND) gerekir.

Birlikte çalışmayla ne zaman karşılaşacaksınız?

Genellikle, uygulama çerçeveniz belirli bir işletim sistemi özelliğini doğrudan sağlamadığında birlikte çalışabilirlikten (interop) yararlanmanız gerekir. Yaygın senaryolar şunlardır:

Scenario Hangi API alanı Example
Başlık çubuğunu veya pencere yerleşimini özelleştirme Win32 SetWindowPos, DwmExtendFrameIntoClientArea
Pencereyi "her zaman üstte" olarak ayarlama veya Z sırasını denetleme Win32 SetWindowPos ile HWND_TOPMOST
WinUI 3'ten dosya seçici veya paylaş iletişim kutusunu gösterme WinRT (HWND gerektirir) FileOpenPicker ile InitializeWithWindow
Sistem belleğini veya performans sayaçlarını okuma Win32 GlobalMemoryStatusEx, QueryPerformanceCounter
Genel kısayol tuşunu kaydet Win32 RegisterHotKey
Anlık bildirim gönder (paketlenmemiş uygulama) WinRT (Uygulama SDK'sı ile) AppNotificationManager

Tüm bu durumlarda, normal C# kodu yazarsınız ancak birlikte çalışma katmanı aracılığıyla Windows çağrısında bulunursunuz. Aşağıdaki konular her yaklaşımda size yol gösterir.

Karar kılavuzu

... yapmam gerekiyor… Önerilen yaklaşım Topic
C'den win32 API'sini (user32, kernel32, shell32 vb.) çağırma# CsWin32 kaynak oluşturucuyu kullanma — tür açısından güvenli, elle yazılmış imza yok C# 'den Win32 API'lerini çağırma (CsWin32)
WinRT nesnesini pencere tutamacı ile başlatma (seçiciler, iletişim kutuları, kullanıcı arabirimini paylaşma) .NET WinRT COM birlikte çalışma sınıflarını (InitializeWithWindow, WindowNativevb.) kullanın .NET uygulamasından birlikte çalışma API'lerini çağır
WinRT API'lerinin masaüstü (UWP olmayan) uygulamasında çalışıp çalışmadığını denetleme Kısıtlamalar ve alternatifler listesine bakın WinRT API'leri masaüstü uygulamalarında desteklenmiyor
Win32 çağrılarını kullanarak bir pencereyi özelleştiren eksiksiz bir WinUI 3 örneğine bakın Uçtan uca kılavuzu izleyin Adım adım kılavuz: Win32 birlikte çalışabilirliğine sahip WinUI 3 uygulaması

Hızlı akış çizelgesi

  1. API bir Windows.* WinRT ad alanında mı?

  2. Bu bir Win32/yerel API mi (Windows SDK üst bilgisinde tanımlanır)?