Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/141: Рейтинг темы: голосов - 141, средняя оценка - 4.55
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287

Как программно узнать разрешение экрана

15.01.2012, 15:25. Показов 28458. Ответов 26

Студворк — интернет-сервис помощи студентам
Здравствуйте
Visual Basic
1
2
3
MsgBox$ _
            "Экран Вашего монитора имеет разрешение: " & GetSystemMetrics(0&) & "x" & GetSystemMetrics(1&) & vbCrLf & _
                                                       "Размер Вашего монитора: " & Application.UsableWidth & "x" & Application.UsableHeight, vbExclamation, "Информация"
Всё условно, реальный размер экрана монитора узнать можно?, у меня отображает MsgBox разрешение 1024*768, размер 769*529
А реально размер монитора - 370*305
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2012, 15:25
Ответы с готовыми решениями:

Как узнать текущее разрешение экрана?
а? :)

Как из программы получить разрешение экрана
Добрый день, Для адаптации форм под текущие настройки экрана я с помощью функции WinAPI GetSystemMetrics() определяю размер экрана...

как программно поменять разрешение экрана?
Подскажите пожалуйста, как программно поменять разрешение экрана? Просто не на всех машинах может оказаться то разрешение в настройках...

26
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
16.01.2012, 07:39

Не по теме:

Ципихович Эндрю, а вес монитора Вас не интересует:D
Для получения подобной инфы, мне кажется, нужна база по производителям, маркам и т.д. и т.п.
Возможно, я ошибаюсь?



Добавлено через 36 минут
Visual Basic
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
Option Explicit
Private Const LOGPIXELSX = 88 ' Logical pixels/inch in X
Private Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Private Const HORZRES = 8 ' Horizontal width in pixels
Private Const VERTRES = 10 ' Vertical width in pixels
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDc As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub usbGetFormSize()
Dim x As Variant
Dim y As Variant
Dim hDc As Long, lngRetVal As Long
Dim varScreenX As Variant, varScreenY As Variant
Dim varPixToInchX As Variant, varPixToInchY As Variant
hDc = GetDC(0)
'Get the Screen size in pixels for X & Y
varScreenX = GetDeviceCaps(hDc, HORZRES)
varScreenY = GetDeviceCaps(hDc, VERTRES)
'Get the conversion of pixels/inch for X & Y
varPixToInchX = GetDeviceCaps(hDc, LOGPIXELSX)
varPixToInchY = GetDeviceCaps(hDc, LOGPIXELSY)
'Convert to миллиметры.
x = varScreenX / varPixToInchX * 25.4
y = varScreenY / varPixToInchY * 25.4
End Sub
Существует вот такой подход к решению,
но доверять ему я бы не стал!
3
1703 / 190 / 19
Регистрация: 20.11.2011
Сообщений: 281
16.01.2012, 10:41
Цитата Сообщение от Апострофф Посмотреть сообщение
Для получения подобной инфы, мне кажется, нужна база по производителям, маркам и т.д. и т.п.
Привет, Володь. Все гораздо проще. Рулетки будет достаточно:-) Производители часто неверно указывают параметры своих изделий.
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
16.01.2012, 17:03
Цитата Сообщение от kuklp Посмотреть сообщение
Производители часто неверно указывают параметры своих изделий
как на коробках 0,25 Вт акустики пишут 300 Вт !!!
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
16.01.2012, 20:01  [ТС]
270*203 - неутешительно, против
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
А реально размер монитора - 370*305
0
16.01.2012, 20:12

Не по теме:

AIDA64 как-то мАгёт (раздел монитор).

0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
16.01.2012, 20:20  [ТС]
может я не с того конца зашёл, тема такая есть на работе монитор 24", широкоэкранный, сделаешь всё там, про формы говорю, делаю большими, домой придёшь, на 19" не очень удобно. Вот программно инициализацию активацию формы хочу править- как лучше поступить?
0
16.01.2012, 20:53

Не по теме:

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
как лучше поступить
на работе - работать, а формы - дома, ну если конечно это Ваша работа - формы делать, тогда где то поменять монитор - самое то

0
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
16.01.2012, 20:58
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Вот программно инициализацию активацию формы хочу править- как лучше поступить?
Не с размеров экрана, а с разрешения надо начинать!
'Get the Screen size in pixels for X & Y
varScreenX = GetDeviceCaps(hDc, HORZRES)
varScreenY = GetDeviceCaps(hDc, VERTRES)
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
16.01.2012, 21:12  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
разрешение 1024*768
и что это даёт?
есть разрешение монитора, есть форма, как её ужимать правильно, до каких пределов?
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
18.01.2012, 05:17  [ТС]
апну тему
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
и что это даёт?
есть разрешение монитора, есть форма, как её ужимать правильно, до каких пределов?
0
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
18.01.2012, 10:30
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
реальный размер экрана монитора узнать можно?
Цитата Сообщение от Diskretor Посмотреть сообщение
AIDA64 как-то мАгёт (раздел монитор).
Нашел полный список констант для GetDeviceCaps - всё оказалось до смешного просто
Но по прежнему врёт!
Visual Basic
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
Option Explicit
 
Private Const DRIVERVERSION  As Long = 0     'Версия драйвера
Private Const TECHNOLOGY     As Long = 2     'Классификация устройства
 
Private Const HORZSIZE       As Long = 4     '!!!Размер по горизонтали в мм.
Private Const VERTSIZE       As Long = 6     '!!!Размер по вертикали в мм.
 
Private Const HORZRES        As Long = 8     'Размер по горизонтали в точках
Private Const VERTRES        As Long = 10    'Размер по вертикали в точках
Private Const BITSPIXEL      As Long = 12    'Кол-во бит на точку
Private Const PLANES         As Long = 14    'Number of planes
Private Const NUMBRUSHES     As Long = 16    'Number of brushes the device has
Private Const NUMPENS        As Long = 18    'Number of pens the device has
Private Const NUMMARKERS     As Long = 20    'Number of markers the device has
Private Const NUMFONTS       As Long = 22    'Number of fonts the device has
Private Const NUMCOLORS      As Long = 24    'Макс. кол-во возможных цветов
Private Const PDEVICESIZE    As Long = 26    'Size required for device descripto
Private Const CURVECAPS      As Long = 28    'Curve capabilities
Private Const LINECAPS       As Long = 30    'Line capabilities
Private Const POLYGONALCAPS  As Long = 32    'Polygonal capabilities
Private Const TEXTCAPS       As Long = 34    'Text capabilities
Private Const CLIPCAPS       As Long = 36    'Clipping capabilities
Private Const RASTERCAPS     As Long = 38    'Bitblt capabilities
Private Const ASPECTX        As Long = 40    'Length of the X leg
Private Const ASPECTY        As Long = 42    'Length of the Y leg
Private Const ASPECTXY       As Long = 44    'Length of the hypotenuse
Private Const SHADEBLENDCAPS As Long = 45    'Shading and blending caps (IE5)
Private Const LOGPIXELSX     As Long = 88    'Logical pixels/inch in X
Private Const LOGPIXELSY     As Long = 90    'Logical pixels/inch in Y
Private Const SIZEPALETTE    As Long = 104   'Number of entries in physical palette
Private Const NUMRESERVED    As Long = 106   'Number of reserved entries in palette
Private Const COLORRES       As Long = 108   'Количество цветов
Private Const VREFRESH       As Long = 116   'Текущий рефрешь по вертикали в Гц
                                             '(только для монитора)
Private Const DESKTOPVERTRES As Long = 117   'Размер десктопа по горизонтали
Private Const DESKTOPHORZRES As Long = 118   'Размер десктопа по вертикали
Private Const BLTALIGNMENT   As Long = 119   'Preferred blt alignment
 
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub ScreenSize()
MsgBox GetDeviceCaps(GetDC(0), 4) & " X " & GetDeviceCaps(GetDC(0), 6) & " mm"
End Sub
2
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
18.01.2012, 11:27
Цитата Сообщение от Апострофф Посмотреть сообщение
Нашел полный список констант для GetDeviceCaps - всё оказалось до смешного просто
Но по прежнему врёт!
У меня практически не врет, измерил линейкой, расхождение в пару милиметров.
Только не понятно, зачем нужен именно размер в миллиметрах, когда нужно ориентироваться на разрешение экрана.
Какая разница 17 или 22 дюймовый монитор, если разрешение экрана и там и там 1024х768 и форма одинаково будет смотрется на обоих мониторах (относительно других объектов)
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
18.01.2012, 11:45
Visual Basic
1
2
3
4
5
6
Private Sub Form_Load()
k = 0.5
Me.Width = k * Screen.Width
Me.Height = k * Screen.Height
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
End Sub
2
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
18.01.2012, 14:49
Цитата Сообщение от gaw Посмотреть сообщение
Me.Width = k * Screen.Width
Me.Height = k * Screen.Height
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
End Sub
Идея понятна, но в VBA нет объекта Screen,
да и все контролы на форме тоже надо масштабировать.
Всё это уже делалось неоднократно, но у ТС проблемы с поиском, кажется
1
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
18.01.2012, 16:38
Цитата Сообщение от Апострофф Посмотреть сообщение
Идея понятна, но в VBA нет объекта Screen
виноват, - исправлюсь ==> это Ципихович Ендрю наверное онлайн гипнозом обладает
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
18.01.2012, 19:11  [ТС]
Цитата Сообщение от m-ch Посмотреть сообщение
Только не понятно, зачем нужен именно размер в миллиметрах, когда нужно ориентироваться на разрешение экрана.
так я и спрашиваю как? знаю разрешение, как далее считать?

Цитата Сообщение от Апострофф Посмотреть сообщение
MsgBox GetDeviceCaps(GetDC(0), 4) & " X " & GetDeviceCaps(GetDC(0), 6) & " mm"
выдаёт 380*285 против
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
А реально размер монитора - 370*305
ну более мене похоже на правду, замерю завтра у других

Добавлено через 5 минут
Апострофф, зачем людей пугать если хватает этого:
Visual Basic
1
2
3
4
5
6
7
8
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub ScreenSize()
 
    MsgBox GetDeviceCaps(GetDC(0), 4) & " X " & GetDeviceCaps(GetDC(0), 6) & " mm"
 
End Sub
я имею ввиду - константы для общего развития?
0
126 / 1 / 1
Регистрация: 15.11.2011
Сообщений: 80
01.01.2013, 22:45
Столкнулась с такой же проблемой как и автор темы.

Но так и не вижу решения.
Мне тоже надо определить разрешение экрана, но без "user32".
Помогите
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.01.2013, 23:40
Не хотите "user32" (почему?!) - используйте WMI (это медленнее)
Visual Basic
1
2
3
4
5
6
7
8
With GetObject("winmgmts:\\.\root\cimv2")
    For Each x In .ExecQuery("Select * From Win32_DisplayConfiguration")
        MsgBox "Horizontal resolution: " & x.PelsWidth
        MsgBox "Vertical resolution: " & x.PelsHeight
        MsgBox "Name: " & x.DeviceName
        MsgBox "Color depth: " & x.BitsPerPel
    Next
End With
Утянуто с http://blogs.technet.com/b/hey... puter.aspx и слегка переработано
2
126 / 1 / 1
Регистрация: 15.11.2011
Сообщений: 80
02.01.2013, 00:17
Цитата Сообщение от Казанский Посмотреть сообщение
Не хотите "user32" (почему?!) - используйте WMI (это медленнее)[
на 64-битной системе все эти библиотеки не работают.
Ваш пример заработал, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2013, 00:17
Помогаю со студенческими работами здесь

Как изменить разрешение экрана программно?
Подскажите пожалуйста как изменить разрешение экрана (на 600*800) программно? А это будет работать если монитор не 4/3 а 16/9 ? (А...

Как программно поменять разрешение экрана?
как программно поменять расширение экрана!

Как программно изменить разрешение экрана?
Помогите! Есть допустим 5 кнопок Первая подписана как "800x600" Вторая "1024x768" Третья "1152x864" Четвертая...

Как программно поменять разрешение экрана?
Можно ли средствами Qt изменить разрешение экрана?

Как узнать разрешение экрана?
Всем привет. Есть вопрос: Не подскажите как узнать разрешение экрана?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru