34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
1

Получить список используемых разрешений для видеокарты

30.10.2015, 15:28. Показов 1828. Ответов 20
Метки нет (Все метки)

Как получить список всех возможных разрешений для видеокарты (монитора) в системе?
Есть примеры?, а то я что-то ничего не смог найти.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2015, 15:28
Ответы с готовыми решениями:

Получить список dll, используемых запущенным процессом
Делаю античит для сетевой игры(готовых решений нет) по способу белого\черного листов и сверкой md5...

Как получить список разрешений экрана?
Как узнать список разрешений, которые поддерживает монитор? Типа как здесь.

Получить список разрешений экрана монитора
Подскажите пожалуйста оптимальный способ чтобы получить список разрешений экрана монитора...

Получить список используемых в проекте библиотек
Здравствуйте, в общем есть такая задача: нужно написать приложение, которое будет анализировать...

20
Лень — мое второе и
3176 / 2371 / 679
Регистрация: 28.11.2014
Сообщений: 3,572
Записей в блоге: 3
30.10.2015, 16:47 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

На форму кинь listbox
вроде все показывает, но они повторяются (разная частота обновления, типа 60Ghz / 75 Ghz и т.д. а еще разная глубина цвета типа 8 бит, 16 бит, 32 бит)

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Imports System
Imports System.Linq
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Public Class Form1
    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpdmode As DEVMODE) As Boolean
    'Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByRef DEVMODE As DEVMODE, ByVal flags As Integer) As Integer
 
    Const ENUM_CURRENT_SETTINGS As Integer = -1
    Const CDS_UPDATEREGISTRY As Integer = &H1
    Const CDS_TEST As Long = &H2
 
    Const CCDEVICENAME As Integer = 32
    Const CCFORMNAME As Integer = 32
 
    Const DISP_CHANGE_SUCCESSFUL As Integer = 0
    Const DISP_CHANGE_RESTART As Integer = 1
    Const DISP_CHANGE_FAILED As Integer = -1
 
    'Public Const dm_BITSPERPEL As Integer = &H40000
    'Public Const dm_PELSWIDTH As Integer = &H80000
    'Public Const dm_PELSHEIGHT As Integer = &H100000
    'Public Const dm_DISPLAYFLAGS As Integer = &H200000
 
    <StructLayout(LayoutKind.Sequential)> Public Structure DEVMODE
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
        Public dmSpecVersion As Short
        Public dmDriverVersion As Short
        Public dmSize As Short
        Public dmDriverExtra As Short
        Public dmFields As Integer
 
        Public dmOrientation As Short
        Public dmPaperSize As Short
        Public dmPaperLength As Short
        Public dmPaperWidth As Short
 
        Public dmScale As Short
        Public dmCopies As Short
        Public dmDefaultSource As Short
        Public dmPrintQuality As Short
        Public dmColor As Short
        Public dmDuplex As Short
        Public dmYResolution As Short
        Public dmTTOption As Short
        Public dmCollate As Short
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
        Public dmUnusedPadding As Short
        Public dmBitsPerPel As Short
        Public dmPelsWidth As Integer
        Public dmPelsHeight As Integer
 
        Public dmDisplayFlags As Integer
        Public dmDisplayFrequency As Integer
    End Structure
 
    Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
    Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height
 
    Public Sub W3ResChanger_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
        Dim DevM As DEVMODE
 
        DevM.dmDeviceName = New [String](New Char(32) {})
        DevM.dmFormName = New [String](New Char(32) {})
        DevM.dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))
 
        Dim dMode = -1
        'While 0 <> 
        Do While EnumDisplaySettings(Nothing, dMode, DevM) = True
            'Dim lResult As Integer
            If DevM.dmPelsWidth > 640 Then
                LVAdd(DevM)
            End If
            dMode += 1
            'End While
        Loop
    End Sub
 
    'vars set in load
    Private Sub LVAdd(DevM)
        Dim currres As String
 
        If DevM.dmPelsHeight = intX And DevM.dmPelsWidth = intY Then
            currres = "Monitor Resolution"
        Else
            currres = ""
        End If
 
        ListBox1.Items.Add(CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres))
        If currres <> "" Then
            ListBox1.SelectedItem = True
        End If
    End Sub
 
End Class
2
Почетный модератор
21367 / 9101 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
30.10.2015, 19:16 3
Orlangur1991, допилите код, убрав дубли (они ни к чему в списке), код достоин FAQ
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
30.10.2015, 20:12  [ТС] 4
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
На форму кинь listbox
Огромное спасибо, даже код не пришлось писать, только убрал лишний.
0
Модератор
Эксперт .NET
3865 / 3188 / 479
Регистрация: 27.01.2014
Сообщений: 5,813
30.10.2015, 20:32 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Памирыч, Fakels, Orlangur1991, для FAQ, допили код, вынес в модуль для использования как функцию, подправил отбор дубликатов, в общем можно удобно пользоваться:

Модуль:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Module GetDispResolutions
    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpdmode As DEVMODE) As Boolean
    Const ENUM_CURRENT_SETTINGS As Integer = -1
    Const CDS_UPDATEREGISTRY As Integer = &H1
    Const CDS_TEST As Long = &H2
    Const CCDEVICENAME As Integer = 32
    Const CCFORMNAME As Integer = 32
    Const DISP_CHANGE_SUCCESSFUL As Integer = 0
    Const DISP_CHANGE_RESTART As Integer = 1
    Const DISP_CHANGE_FAILED As Integer = -1
 
    <Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> Public Structure DEVMODE
        <Runtime.InteropServices.MarshalAsAttribute(Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
        Public dmSpecVersion As Short
        Public dmDriverVersion As Short
        Public dmSize As Short
        Public dmDriverExtra As Short
        Public dmFields As Integer
 
        Public dmOrientation As Short
        Public dmPaperSize As Short
        Public dmPaperLength As Short
        Public dmPaperWidth As Short
 
        Public dmScale As Short
        Public dmCopies As Short
        Public dmDefaultSource As Short
        Public dmPrintQuality As Short
        Public dmColor As Short
        Public dmDuplex As Short
        Public dmYResolution As Short
        Public dmTTOption As Short
        Public dmCollate As Short
        <Runtime.InteropServices.MarshalAsAttribute(Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
        Public dmUnusedPadding As Short
        Public dmBitsPerPel As Short
        Public dmPelsWidth As Integer
        Public dmPelsHeight As Integer
 
        Public dmDisplayFlags As Integer
        Public dmDisplayFrequency As Integer
    End Structure
 
    Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
    Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height
 
    Public Function GetDisplayResolutions_Array() As Array
        Dim ENUM_CURRENT_SETTINGS As Integer = -1
        Dim CDS_UPDATEREGISTRY As Integer = &H1
        Dim CDS_TEST As Long = &H2
        Dim CCDEVICENAME As Integer = 32
        Dim CCFORMNAME As Integer = 32
        Dim DISP_CHANGE_SUCCESSFUL As Integer = 0
        Dim DISP_CHANGE_RESTART As Integer = 1
        Dim DISP_CHANGE_FAILED As Integer = -1
 
        Dim currres As String = ""
        Dim ListOfRes As New ArrayList
 
        Dim DevM As DEVMODE
        DevM.dmDeviceName = New [String](New Char(32) {})
        DevM.dmFormName = New [String](New Char(32) {})
        DevM.dmSize = CShort(Runtime.InteropServices.Marshal.SizeOf(GetType(DEVMODE)))
 
        Dim dMode = -1
        Do While EnumDisplaySettings(Nothing, dMode, DevM) = True
            If DevM.dmPelsWidth > 640 Then
                If DevM.dmPelsHeight = intX And DevM.dmPelsWidth = intY Then
                    currres = "Monitor Resolution"
                Else
                    currres = ""
                End If
                If ListOfRes.Count <> 0 Then
                    If ListOfRes.Item(ListOfRes.Count - 1).ToString <> CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres) Then
                        ListOfRes.Add(CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres))
 
                    End If
                Else
                    ListOfRes.Add(CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres))
                End If
            End If
            dMode += 1
        Loop
        ListOfRes.RemoveAt(0) 'Добавил так как вылезал дубликат моего текущего расширения
        Return ListOfRes.ToArray
    End Function
End Module


Использование:
VB.NET
1
2
3
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ListBox1.Items.AddRange(GetDisplayResolutions_Array)
    End Sub
Изображения
 
2
Почетный модератор
21367 / 9101 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
30.10.2015, 20:44 6
Yury Komar, скопировано в тему
1
Лень — мое второе и
3176 / 2371 / 679
Регистрация: 28.11.2014
Сообщений: 3,572
Записей в блоге: 3
30.10.2015, 21:16 7
Шикарно
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
30.10.2015, 21:42  [ТС] 8
Цитата Сообщение от Yury Komar Посмотреть сообщение
ListOfRes.RemoveAt(0) 'Добавил так как вылезал дубликат моего текущего расширения
для этого перед циклом dMode = -1 ставится в 0

Добавлено через 23 минуты
Цитата Сообщение от Yury Komar Посмотреть сообщение
подправил отбор дубликатов, в общем можно удобно пользоваться:
If ListOfRes.Item(ListOfRes.Count - 1).ToString <> CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres) Then
У меня дубликаты были даже в конце списка, я себе по другому сделал просто поставил условие на ГЦ и глубину цвета.
И было бы правильнее, если бы в лист писалось и гц, типа так - 1024x768 - 60hz
2
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
30.10.2015, 21:47 9
как выводить разрешения для видео карты не в ListBox1 а допустим в Label1.Text ?
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
30.10.2015, 21:53  [ТС] 10
Цитата Сообщение от MACHOMAN Посмотреть сообщение
как выводить разрешения для видео карты не в ListBox1 а допустим в Label1.Text ?
в цикле заменить листбох на лабел, по простому это так
VB.NET
1
label.text = label.text & (CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & 'код перевода строки'
0
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
30.10.2015, 22:04 11
можно примером?
у меня не получается пробую так
VB.NET
1
 Public tX As Integer = (CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & "")
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
30.10.2015, 23:53  [ТС] 12
Цитата Сообщение от MACHOMAN Посмотреть сообщение
у меня не получается
Вставь код который сделал Yury Komar
Чтобы выводить в text/label используй его код примерно так.
VB.NET
1
2
Dim Resolution() = GetDisplayResolutions_Array
Label1.Text = Join(Resolution, vbCrLf)
1
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
31.10.2015, 00:12 13
спасибо
0
Модератор
Эксперт .NET
3865 / 3188 / 479
Регистрация: 27.01.2014
Сообщений: 5,813
31.10.2015, 02:44 14
MACHOMAN, и будь внимательнее.
В типе данных Integer буквенных знаков быть не может.
0
Лень — мое второе и
3176 / 2371 / 679
Регистрация: 28.11.2014
Сообщений: 3,572
Записей в блоге: 3
31.10.2015, 12:17 15
а и правда, как сделать, чтобы дубли не резались, а просто отображался нужный режим?
Типа
800х600х16 60 Hz
800х600х16 75 Hz
800х600х32 60 Hz
800х600х32 75 Hz
0
Модератор
Эксперт .NET
3865 / 3188 / 479
Регистрация: 27.01.2014
Сообщений: 5,813
31.10.2015, 14:14 16
Orlangur1991, а через данные API это наверное невозможно. Если только довериться логике и все дубли самому по порядку отредактировать или спросить у Мелкомягких
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
31.10.2015, 14:15  [ТС] 17
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
а просто отображался нужный режим?
DevM.dmDisplayFrequency - частота
DevM.dmColor -глубина цвета
дописываешь их по аналогии с разрешением, дописав их в соответствующую строку кода.
VB.NET
1
CStr(DevM.dmPelsWidth) & "x" & CStr(DevM.dmPelsHeight) & "x" & CStr(DevM.dmColor) & " " & CStr(DevM.dmDisplayFrequency) & " Hz"
2
Модератор
Эксперт .NET
3865 / 3188 / 479
Регистрация: 27.01.2014
Сообщений: 5,813
31.10.2015, 15:00 18
Fakels, во блин. А памирыч уже в FAQ мой пост добавил... надо бы подправить, чтоб уж как у Microsoft все выглядело
1
Лень — мое второе и
3176 / 2371 / 679
Регистрация: 28.11.2014
Сообщений: 3,572
Записей в блоге: 3
31.10.2015, 16:51 19
Цитата Сообщение от Yury Komar Посмотреть сообщение
надо бы подправить, чтоб уж как у Microsoft все выглядело
было бы здорово

Добавлено через 28 секунд
Цитата Сообщение от Fakels Посмотреть сообщение
дописываешь их по аналогии с разрешением, дописав их в соответствующую строку кода.
Спасибо
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
31.10.2015, 17:54  [ТС] 20
вай я перепутал не DevM.dmColor -глубина цвета а DevM.dmBitsPerPel

Добавлено через 13 минут
А есть ли какие-нибудь подводные камни, ну допустим в системе стоит 2 видеокарты, с какой информация будет браться с первичной, глюков не будет?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2015, 17:54
Помогаю со студенческими работами здесь

RBAC как получить список разрешений авторизованного пользователя?
Всем привет. Собственно вопрос в заголовке Использую Yii2

Получить список всех доступных разрешений экрана с частотами оновления
Собственно сабж. Гуглил, да и местный поиск не обидел... Язык C++ Builder.

Написать программу, которая для введенной строки выдает список символов, используемых в этой строке
Имя входного файла стандартный ввод Имя выходного файла стандартный вывод Ограничение по...

Список используемых линковщиком файлов
Приветствую! Скорее всего у меня проблема в том, что я не могу верно сформулировать вопрос, иначе...

Получить типы переменных используемых в классе
Здравствуйте. Вопрос такой: есть класс Class1, в нем объявлены переменные разных типов с...

Получить имена файлов, используемых процессом
есть некий процесс, он читает некие файлы, хочу получить имена этих файлов в дотнете есть хоть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru