Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VC#] Получение списка доступных разрешений экрана, Как получить список? 
V
    Опции темы
MuForum
Дата 9.1.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



Доброе время суток!
- Необходимо получить список всех доступных разрешений экрана, зная значения параметров 'Качество цветопередачи' и 'Частота обновления экрана'.
- То есть, как в 'Раб.стол -> Правый клик -> Свойства -> Параметры -> Разрешение экрана'
- Мне необходимо сделать такой же скролл.
- Для получения разрешение раб.стола используют:
Код

Screen.PrimaryScreen

- Но вот как получить именно список зная эти параметры, что-то не соображаю, да и поиск по googl'у не очень помог.


# Добавлено: Данный способ не поможет, так как он возвращает список подключенных экранов/раб.столов.
Код

    int index;
    int upperBound; 

    // Gets an array of all the screens connected to the system.

    Screen [] screens = Screen.AllScreens;
    upperBound = screens.GetUpperBound(0);

    for(index = 0; index <= upperBound; index++)
    {

        // For each screen, add the screen properties to a list box.

        listBox1.Items.Add("Device Name: " + screens[index].DeviceName);
        listBox1.Items.Add("Bounds: " + screens[index].Bounds.ToString());
        listBox1.Items.Add("Type: " + screens[index].GetType().ToString());
        listBox1.Items.Add("Working Area: " + screens[index].WorkingArea.ToString());
        listBox1.Items.Add("Primary Screen: " + screens[index].Primary.ToString());

    }



P.S. -> Может меня кто-то пнуть в правильное направление?

Это сообщение отредактировал(а) MuForum - 9.1.2009, 00:44


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
QryStaL
Дата 9.1.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32





--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Partizan
Дата 9.1.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



MuForum, http://www.codeproject.com/KB/cs/csdynamicscrres.aspx - похоже это то, что нужно


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MuForum
Дата 9.1.2009, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



Цитата(Partizan @ 9.1.2009,  00:54)
MuForum, http://www.codeproject.com/KB/cs/csdynamicscrres.aspx - похоже это то, что нужно

К сожалению не совсем =(
- Я уже находил эту тема на кодепрожект, тут меняется разрешение экрана, а мне нужно получить список доступных разрешений.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
nagg
Дата 9.1.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 6.1.2008
Где: Minsk

Репутация: 4
Всего: 4



Нашёл у себя в загашнике:

Код

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Collections.Generic;

namespace Resolution
{
    [StructLayout(LayoutKind.Sequential)]
    public struct DEVMODE1 
    {
        [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] public string dmDeviceName;
        public short dmSpecVersion;
        public short dmDriverVersion;
        public short dmSize;
        public short dmDriverExtra;
        public int   dmFields;
        public short dmOrientation;
        public short dmPaperSize;
        public short dmPaperLength;
        public short dmPaperWidth;
        public short dmScale;
        public short dmCopies;
        public short dmDefaultSource;
        public short dmPrintQuality;
        public short dmColor;
        public short dmDuplex;
        public short dmYResolution;
        public short dmTTOption;
        public short dmCollate;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName;
        public short dmLogPixels;
        public short dmBitsPerPel;
        public int   dmPelsWidth;
        public int   dmPelsHeight;
        public int   dmDisplayFlags;
        public int   dmDisplayFrequency;
        public int   dmICMMethod;
        public int   dmICMIntent;
        public int   dmMediaType;
        public int   dmDitherType;
        public int   dmReserved1;
        public int   dmReserved2;
        public int   dmPanningWidth;
        public int   dmPanningHeight;
    };

    public class User_32
    {
        [DllImport("user32.dll")]
        public static extern int EnumDisplaySettings (string deviceName, int modeNum, ref DEVMODE1 devMode );         
        [DllImport("user32.dll")]
        public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);

        public const int ENUM_CURRENT_SETTINGS = -1;
        public const int CDS_UPDATEREGISTRY = 0x01;
        public const int CDS_TEST = 0x02;
        public const int DISP_CHANGE_SUCCESSFUL = 0;
        public const int DISP_CHANGE_RESTART = 1;
        public const int DISP_CHANGE_FAILED = -1;
    }


    public static class Resolution
    {
        private const long DM_BITSPERPEL = 0x04;
        private const long DM_PELSWIDTH = 0x08;
        private const long DM_PELSHEIGHT = 0x01;

        /// <summary>
        /// Список доступных разрешений
        /// </summary>
        public static List<DEVMODE1> GetDisplayResolutions()
        {
            int dMode = -1;
            List<DEVMODE1> availScrRes = new List<DEVMODE1>();
            DEVMODE1 DM = new DEVMODE1();
            DM.dmSize = (short)Marshal.SizeOf(DM);
            DM.dmFields = (int)(DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL);
            while (User_32.EnumDisplaySettings(null, dMode, ref DM) > 0)
            {
                availScrRes.Add(DM);
                dMode++;
            }
            return availScrRes;
        }
    }

}




А вот использование (например в классе формы - заполнения ListBox доступными разрешениями:

Код

        public void FillListBox()
        {
            List<DEVMODE1> devmodeList = Resolution.GetDisplayResolutions();
            List<string> resolutions = new List<string>();
            foreach (DEVMODE1 devmode in devmodeList)
            {
                resolutions.Add(string.Format("{0}x{1} ({2} bit)",
                    devmode.dmPelsWidth,
                    devmode.dmPelsHeight,
                    devmode.dmBitsPerPel));
            }
            foreach (string s in resolutions)
                listBox1.Items.Add(s);
        }


--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
MuForum
Дата 9.1.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



nagg, огромное, человеческое СПАСиБО =)

P.S. -> Правда немного есть недочёт, но сейчас буду разбираться, исправлю опубликую тут.
- Находит по 3 раза почему-то одно и тоже разрешение экрана =(

Это сообщение отредактировал(а) MuForum - 9.1.2009, 01:17


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.