Merhaba,
Windows Kiosk modunun (özellikle Tek Uygulamalı - Assigned Access yapısının) getirdiği sıkı güvenlik kısıtlamaları nedeniyle bu sorunla karşılaşmanız oldukça normaldir. UWP uygulamaları zaten kendi içinde izole (sandbox) çalışır; uygulama Kiosk moduna alındığında ise yetkileri daha da kısıtlanır. user32.dll (örneğin ChangeDisplaySettings) gibi doğrudan işletim sisteminin donanım katmanına müdahale eden Win32 API'leri, Kiosk modunun güvenlik duvarına takılır.
Bu durumu aşmak ve ekran boyutunu/çözünürlüğünü kontrol etmek için uygulayabileceğiniz en etkili yöntemler şunlardır:
- Unity'nin Dahili Çözünürlük Yönetimi (En Güvenli ve Pratik Yol)
Eğer amacınız işletim sisteminin çözünürlüğünü değiştirmek yerine, uygulamanın performansını artırmak veya UI ölçeklemesini optimize etmekse, donanım çözünürlüğüne dokunmanıza gerek yoktur. Unity'nin render çözünürlüğünü değiştirerek aynı görsel sonucu elde edebilirsiniz.
Kiosk modu altında Windows, uygulamanın ekranı kaplamasını zorunlu kılar. Siz Unity içinden çözünürlüğü düşürseniz bile Windows bunu ekrana otomatik olarak fitleyecektir (upscaling).
// Ekran modunu koruyarak sadece render çözünürlüğünü değiştirir
Screen.SetResolution(1920, 1080, FullScreenMode.ExclusiveFullScreen);
- Avantajı: Herhangi bir yetki veya API çağrısı gerektirmez, Kiosk modunda kusursuz çalışır.
- Dezavantajı: Monitörün fiziksel yenileme hızını (Hz) veya gerçek masaüstü çözünürlüğünü değiştirmez.
- Shell Launcher v2 ve Win32 Yan Süreç (Sidecar) Kullanımı
Eğer donanım çözünürlüğünü değiştirmek kesinlikle zorunluysa, klasik UWP Kiosk modu yerine Shell Launcher v2 kullanmanız gerekir.
UWP mimarisinde kalıp user32.dll kullanabilmek için şu adımları takip edebilirsiniz:
- UWP projenize bir
FullTrustProcessLauncher(Desktop Bridge) bileşeni ekleyin. Bu, UWP uygulamanızın arkasında çalışabilecek küçük bir Win32 konsol uygulamasıdır. - UWP uygulamanız AppService aracılığıyla bu Win32 arka plan uygulamasına "Çözünürlüğü X yap" komutu gönderir.
- Win32 uygulaması tam yetkiyle (
RunFullTrust) çalışacağı içinuser32.dllkodunu başarıyla tetikler.
TV