none
Monitörün en fazla desteklenen ekran çözünürlüğünü kod ile nasıl öğrenirim RRS feed

  • Soru

  • Merhaba, Monitörün en fazla desteklenen ekran çözünürlüğünü kod ile nasıl öğrenebilirim

    ve resimde işaretlediğim yerdeki bilgiyi kod ile çekebilir miyim?

    Yardımlarınız için şimdiden teşekkür ederim.

    1 Aralık 2019 Pazar 01:19

Yanıtlar

  • Güncel sürücülerin yüklü olduğunu varsayarsak (eski veya yanlış sürücüler cihazın desteklediği max çözünürlüğünü bulmakta zorluk çıkarabilirSystem.Management (References'a sağ tıklayıp Add ReferenceAssemblies içinde bulup projene ekleyebilirsin) sınıfını kullanarak elde etmek mümkün.

    Resoulution.cs adında bir sınıfımız olsun

    public class Resoulution
    {
        public int Width { get; set; }
        public int Height { get; set; }
    }


    ManagmentObjectSearcher'a bir sorgu gönderip cihazın desteklediği tüm çözünürlük bilgilerini listeleyelim.

    var scope = new ManagementScope();
    var query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution");
    
    using (var searcher = new ManagementObjectSearcher(scope, query))
    {
        var results = searcher.Get();
    
        List<Resoulution> resolutions = new List<Resoulution>();
    
        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.Add(new Resoulution
        {
            Width = 23,
            Height = 11
        });
    
        resolutions = resolutions.OrderByDescending(x => x.Width)
        .ThenByDescending(x => x.Height).ToList();
    
        var maxResolution = resolutions.First();
    
        MessageBox.Show($"{maxResolution.Width} x {maxResolution.Height}");
    }

    "Caption" sütunundan şuna benzer bir sonuç dönüyor; "3840 x 2160 x 4294967296 colors @ 30 Hertz (Interlaced)". Bunu regex ile parse edip gelen ilk iki sonucu aldık (colors ve hertz bilgisi de 2. ve 3. sıradan alınabilir). Son olarak linq ile liste içindeki en yüksek çözünürlükten aşağı doğru yeniden sıralayalım.

    Uyarı: System.Management sınıfı sağlam dal değil, her cihazda kusursuz bir şekilde çalışmayabileceğinide aklında bulundurman lazım.

    Kaynak


    TR| Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz. EN| If this is the answer to your problem, mark "Propose as Answer" and if it is helpful, you can contribute to the workig of the forum by "Voting".

    • Yanıt Olarak Öneren Muz Güzeli 2 Aralık 2019 Pazartesi 15:50
    • Yanıt Olarak İşaretleyen HakanÇtn 2 Aralık 2019 Pazartesi 16:47
    1 Aralık 2019 Pazar 04:10

Tüm Yanıtlar

  • Güncel sürücülerin yüklü olduğunu varsayarsak (eski veya yanlış sürücüler cihazın desteklediği max çözünürlüğünü bulmakta zorluk çıkarabilirSystem.Management (References'a sağ tıklayıp Add ReferenceAssemblies içinde bulup projene ekleyebilirsin) sınıfını kullanarak elde etmek mümkün.

    Resoulution.cs adında bir sınıfımız olsun

    public class Resoulution
    {
        public int Width { get; set; }
        public int Height { get; set; }
    }


    ManagmentObjectSearcher'a bir sorgu gönderip cihazın desteklediği tüm çözünürlük bilgilerini listeleyelim.

    var scope = new ManagementScope();
    var query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution");
    
    using (var searcher = new ManagementObjectSearcher(scope, query))
    {
        var results = searcher.Get();
    
        List<Resoulution> resolutions = new List<Resoulution>();
    
        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.Add(new Resoulution
        {
            Width = 23,
            Height = 11
        });
    
        resolutions = resolutions.OrderByDescending(x => x.Width)
        .ThenByDescending(x => x.Height).ToList();
    
        var maxResolution = resolutions.First();
    
        MessageBox.Show($"{maxResolution.Width} x {maxResolution.Height}");
    }

    "Caption" sütunundan şuna benzer bir sonuç dönüyor; "3840 x 2160 x 4294967296 colors @ 30 Hertz (Interlaced)". Bunu regex ile parse edip gelen ilk iki sonucu aldık (colors ve hertz bilgisi de 2. ve 3. sıradan alınabilir). Son olarak linq ile liste içindeki en yüksek çözünürlükten aşağı doğru yeniden sıralayalım.

    Uyarı: System.Management sınıfı sağlam dal değil, her cihazda kusursuz bir şekilde çalışmayabileceğinide aklında bulundurman lazım.

    Kaynak


    TR| Sorunuzun yanıtı bu ise "Yanıt Olarak Öner" olarak işaretleyin, eğer faydalı bir yorum ise "Oy Ver"erek forumun işleyişine katkıda bulunabilirsiniz. EN| If this is the answer to your problem, mark "Propose as Answer" and if it is helpful, you can contribute to the workig of the forum by "Voting".

    • Yanıt Olarak Öneren Muz Güzeli 2 Aralık 2019 Pazartesi 15:50
    • Yanıt Olarak İşaretleyen HakanÇtn 2 Aralık 2019 Pazartesi 16:47
    1 Aralık 2019 Pazar 04:10
  • Yardımınız için çok Teşekkür ederim



    3 Aralık 2019 Salı 17:52