Merhabalar, C# Desteklenen Max Ekran Çözünürlüğü Bulmak dersim ile C# Eğitim Setime devam ediyorum. Bu dersimizde monitörümüzün desteklediği maksimum çözünürlüğü bulma konusuna bakacağız.
NOT: Bu derste vereceğimiz kodların düzgün çalışabilmesi için, driverlerimizin güncel olduğu varsayıyoruz. Çünkü eski veya yanlış driverler mönitörün desteklediği maximum çözünürlüğü yanlış gösterilmesine sebep olabilir.
C# Desteklenen Max Ekran Çözünürlüğü Bulmak
Desteklenen max ekran çözünürlüğü bulmak dersimiz için projemize System.Management namespace’ini eklememiş gerekiyor. Bu namespace hali hazırda ekli olmuyor bu yüzden, Solution Explorer > Referances > Sağ Tık Add > Assemblies kısmına gelerek System.Management namespace’i projemize ekliyoruz.
Bunun haricinde kodlarımızda Regex sınıfını da kullanacağız. Yukarıdaki işlemi yaptıktan sonra namespace’leri formumuza ekleyelim.
using System.Management; using System.Text.RegularExpressions;
Bize sadece Height ve Width bilgileri lazım. Bu yüzden bu bilgileri alacak bir class tanımlayalım. Bunu yapmak zorunda değiliz. İsterseniz eklemeyebilirsiniz.
public class Resoulution { public int Width { get; set; } public int Height { get; set; } }
Bu class’ı formumuzda Class seviyesine yazabilirsiniz. Class Seviyesi neresi diye soracak olursanız;
NOT: En üste yazasanız formun desing.cs dosyası devre dışı kalacaktır.
Şimdi form load eventimize gelelim ve kodlarımızı yazalım.
private void max_cozunurluk_bulmak_Load(object sender, EventArgs e) { var scope = new ManagementScope(); var query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution"); List<Resoulution> resolutions = new List<Resoulution>(); using (var searcher = new ManagementObjectSearcher(scope, query)) { var results = searcher.Get(); foreach (var item in results) { var matches = Regex.Matches(item["Caption"].ToString(), "([0-9]+)"); int.TryParse(matches[0].Value, out int width); int.TryParse(matches[1].Value, out int height); resolutions.Add(new Resoulution { Width = width, Height = height }); } resolutions = resolutions.OrderByDescending(x => x.Width) .ThenByDescending(x => x.Height).ToList(); var maxResolution = resolutions.First(); MessageBox.Show($"{maxResolution.Width} x {maxResolution.Height}"); } }
Kodlarımızı açıklamak gerekirse;
- Buradaki derste olduğu gibi ManagementObject sınıfını kullanırken, Windows sistemlerinde bilgisayar hakkındaki bazı almak için, bilgilerin tutulduğu veritabanından sorgulama yaparak bu bilgileri alabiliyoruz. Burada da CIM_VideoControllerResolution tablosundan verileri istiyoruz.
- Yani ManagmentObjectSearcher‘a bir sorgu gönderip cihazın desteklediği tüm çözünürlük bilgilerini listeliyoruz.
- For Each kısmındaki Caption adlı kolondan şuna benzer bir sonuç dönüyor.
- “3840 x 2160 x 4294967296 colors @ 30 Hertz (Interlaced)” Bu bilgiyi Regex ile parçalayarak bize gerekli olan kısmı yani çözünürlük bilgilerini alıyoruz.
- Aldığımız bütün desteklenen çözünürlük bilgilerini Resoulution sınıfımıza ekliyoruz.
- Son olarak Ling kullanarak bu elde ettiğimiz liste içindeki maksimum değerleri alıyoruz.
- Aldığımız max bilgileri messagebox ile gösteriyoruz.
Tüm Bilgileri Almak
Size tüm bilgiler gerekiyor ya da hepsini görmek istiyorsanız, forma bir listbox ve label ekleyelim ve alınan değerleri listbox’a yazalım. Labele de kaç tane bulunduğunu yazalım. Yukarıdaki kodlarımızı aşağıdaki gibi düzenleyelim.
private void max_cozunurluk_bulmak_Load(object sender, EventArgs e) { var scope = new ManagementScope(); var query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution"); List<Resoulution> resolutions = new List<Resoulution>(); using (var searcher = new ManagementObjectSearcher(scope, query)) { var results = searcher.Get(); foreach (var item in results) { var matches = Regex.Matches(item["Caption"].ToString(), "([0-9]+)"); int.TryParse(matches[0].Value, out int width); int.TryParse(matches[1].Value, out int height); resolutions.Add(new Resoulution { Width = width, Height = height }); } } for (int i = 0; i < resolutions.Count; i++) { listBox1.Items.Add(resolutions[i].Width + " x " + resolutions[i].Height); } label1.Text = "Toplamda " + resolutions.Count + " adet bulundu."; }
Burada farklı olarak, bir for döngüsü kullanarak listedeki tüm verileri listbox’a yazdırdık.
Aynılarından bir kaç kere yazılanlar var ama sebebini bilemiyorum. Büyük ihtimalle tüm bilgileri almadığımız için aradaki farklar “4294967296 colors @ 30 Hertz” kısmındaki farklardan dolayıdır.
C# Desteklenen Max Ekran Çözünürlüğü Bulmak yazımda bu kadardı arkadaşlar.Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.