Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
API bir
Windows.*WinRT ad alanında mı?- Evet → Kısıtlamalar için masaüstü uygulamalarında desteklenmeyen WinRT API'lerini denetleyin. API bir pencere tutamacı gerektiriyorsa bkz. .NET uygulamasından birlikte çalışma API'lerini çağırma.
- 2. adıma devam → yok.
Bu bir Win32/yerel API mi (Windows SDK üst bilgisinde tanımlanır)?
- Evet → CsWin32 kullanarak tür güvenli P/Invoke bağlamaları oluşturun.
- hayır → Bir COM arabirimi veya üçüncü taraf yerel kitaplığı olabilir. Genel P/Invoke kılavuzu için bkz. .NET'in yerel kodla birlikte çalışabilirliği.
İlgili konular
- C# 'den Win32 API'lerini çağırma (CsWin32)
- .NET uygulamasından birlikte çalışma API'lerini çağır
- WinRT API'leri masaüstü uygulamalarında desteklenmiyor
- Adım adım kılavuz: Win32 birlikte çalışabilirliğine sahip WinUI 3 uygulaması
- Bir pencere tutamağını (HWND) alın
- .NET'in yerel kod ile birlikte çalışabilirliği
Windows developer