Функция GetSystemMetrics (winuser.h)

Извлекает указанную системную метрику или параметр конфигурации системы.

Обратите внимание, что все измерения, полученные командой GetSystemMetrics , находятся в пикселях.

Синтаксис

int GetSystemMetrics(
  [in] int nIndex
);

Параметры

[in] nIndex

Тип: int

Извлекаемая системная метрика или параметр конфигурации. Этот параметр может принимать одно из указанных ниже значений. Обратите внимание, что все значения SM_CX* имеют ширину, а все значения SM_CY* — высоту. Также обратите внимание, что все параметры, предназначенные для возврата логических данных, представляют TRUE как любое ненулевое значение, а FALSE — как нулевое значение.

Значение Значение
SM_ARRANGE
56
Флаги, указывающие, как система упорядочивает свернутые окна. Дополнительные сведения см. в разделе Примечания этой статьи.
SM_CLEANBOOT
67
Значение , указывающее, как запускается система:
  • 0 Обычная загрузка
  • 1 Отказоустойчивая загрузка
  • 2 Отказоустойчивость при загрузке по сети
Отказоустойчивая загрузка (также называется SafeBoot, Безопасный режим или Чистая загрузка) обходит файлы запуска пользователя.
SM_CMONITORS
80
Количество мониторов дисплея на рабочем столе. Дополнительные сведения см. в разделе Примечания этой статьи.
SM_CMOUSEBUTTONS
43
Количество кнопок мыши или ноль, если мышь не установлена.
SM_CONVERTIBLESLATEMODE
0x2003
Отражает состояние режима ноутбука или сланца, значение 0 для режима сланца и ненулевое значение в противном случае. При изменении этой системной метрики система отправляет широковещательное сообщение через WM_SETTINGCHANGE с параметром ConvertibleSlateMode в LPARAM. Обратите внимание, что эта системная метрика не применяется к настольным компьютерам. В этом случае используйте GetAutoRotationState.
SM_CXBORDER
5
Ширина границы окна в пикселях. Это эквивалентно значению SM_CXEDGE для окон с трехмерной структурой.
SM_CXCURSOR
13
Номинальная ширина курсора в пикселях.
SM_CXDLGFRAME
7
Это значение совпадает с SM_CXFIXEDFRAME.
SM_CXDOUBLECLK
36
Ширина прямоугольника вокруг расположения первого щелчка в последовательности двойного щелчка в пикселях. Второй щелчок должен происходить внутри прямоугольника, определенного SM_CXDOUBLECLK и SM_CYDOUBLECLK, чтобы система рассматривала эти два щелчка двойным щелчком. Два щелчка также должны выполняться в течение указанного времени.

Чтобы задать ширину прямоугольника двойного щелчка, вызовите SystemParametersInfo с SPI_SETDOUBLECLKWIDTH.

SM_CXDRAG
68
Количество пикселей по обе стороны от точки вниз, которую указатель мыши может переместить до начала операции перетаскивания. Это позволяет пользователю легко нажать и отпустить кнопку мыши без непреднамеренного запуска операции перетаскивания. Если это значение отрицательное, оно вычитается слева от точки мыши вниз и добавляется справа от него.
SM_CXEDGE
45
Ширина трехмерной границы в пикселях. Эта метрика является объемным аналогом SM_CXBORDER.
SM_CXFIXEDFRAME
7
Толщина рамки по периметру окна, которое имеет подпись, но не имеет размеров в пикселях. SM_CXFIXEDFRAME — высота горизонтальной границы, а SM_CYFIXEDFRAME — ширина вертикальной границы.

Это значение совпадает с SM_CXDLGFRAME.

SM_CXFOCUSBORDER
83
Ширина левого и правого краев прямоугольника фокуса, который рисует DrawFocusRect . Это значение в пикселях.

Windows 2000: Это значение не поддерживается.

SM_CXFRAME
32
Это значение совпадает с SM_CXSIZEFRAME.
SM_CXFULLSCREEN
16
Ширина клиентской области полноэкранного окна на основном мониторе дисплея в пикселях. Чтобы получить координаты части экрана, которая не скрыта системной панелью задач или панелями инструментов рабочего стола приложения, вызовите функцию SystemParametersInfo со значением SPI_GETWORKAREA.
SM_CXHSCROLL
21
Ширина растрового изображения стрелки на горизонтальной полосе прокрутки в пикселях.
SM_CXHTHUMB
10
Ширина большого пальца в горизонтальной полосе прокрутки в пикселях.
SM_CXICON
11
Системная большая ширина значка в пикселях. Функция LoadIcon может загружать только значки с измерениями, указанными SM_CXICON и SM_CYICON. Дополнительные сведения см. в разделе Размеры значков .
SM_CXICONSPACING
38
Ширина ячейки сетки для элементов в представлении большого значка в пикселях. Каждый элемент помещается в прямоугольник размера SM_CXICONSPACING по SM_CYICONSPACING при упорядочении. Это значение всегда больше или равно SM_CXICON.
SM_CXMAXIMIZED
61
Ширина по умолчанию (в пикселях) развернутого окна верхнего уровня на основном мониторе дисплея.
SM_CXMAXTRACK
59
Максимальная ширина окна по умолчанию с границами подпись и размеров в пикселях. Эта метрика относится ко всему рабочему столу. Пользователь не может перетащить рамку окна на размер, превышающий эти размеры. Окно может переопределить это значение, обрабатывая сообщение WM_GETMINMAXINFO .
SM_CXMENUCHECK
71
Ширина меню по умолчанию проверка пометки растрового изображения в пикселях.
SM_CXMENUSIZE
54
Ширина кнопок строки меню, таких как кнопка закрытия дочернего окна, используемая в интерфейсе нескольких документов, в пикселях.
SM_CXMIN
28
Минимальная ширина окна в пикселях.
SM_CXMINIMIZED
57
Ширина свернутого окна в пикселях.
SM_CXMINSPACING
47
Ширина ячейки сетки для свернутого окна в пикселях. Каждое свернутое окно помещается в прямоугольник такого размера при упорядочении. Это значение всегда больше или равно SM_CXMINIMIZED.
SM_CXMINTRACK
34
Минимальная ширина отслеживания окна в пикселях. Пользователь не может перетащить рамку окна на размер меньше этих размеров. Окно может переопределить это значение, обрабатывая сообщение WM_GETMINMAXINFO .
SM_CXPADDEDBORDER
92
Объем заполнения границы для окон с заголовками в пикселях.

Windows XP/2000: Это значение не поддерживается.

SM_CXSCREEN
0
Ширина экрана основного монитора дисплея в пикселях. Это же значение, полученное путем вызова Метода GetDeviceCaps следующим образом: GetDeviceCaps( hdcPrimaryMonitor, HORZRES).
SM_CXSIZE
30
Ширина кнопки в окне подпись или заголовка окна в пикселях.
SM_CXSIZEFRAME
32
Толщина границы размера по периметру окна, размер которую можно изменить в пикселях. SM_CXSIZEFRAME — это ширина горизонтальной границы, а SM_CYSIZEFRAME — высота вертикальной границы.

Это значение совпадает с SM_CXFRAME.

SM_CXSMICON
49
Системная небольшая ширина значка в пикселях. Небольшие значки обычно отображаются в заголовках окна и в представлении маленьких значков. Дополнительные сведения см. в разделе Размеры значков .
SM_CXSMSIZE
52
Ширина небольших подпись кнопок в пикселях.
SM_CXVIRTUALSCREEN
78
Ширина виртуального экрана в пикселях. Виртуальный экран — это ограничивающий прямоугольник всех мониторов дисплея. Метрика SM_XVIRTUALSCREEN — это координаты левой части виртуального экрана.
SM_CXVSCROLL
2
Ширина вертикальной полосы прокрутки в пикселях.
SM_CYBORDER
6
Высота границы окна в пикселях. Это эквивалентно значению SM_CYEDGE для окон с трехмерной структурой.
SM_CYCAPTION
4
Высота подпись области в пикселях.
SM_CYCURSOR
14
Номинальная высота курсора в пикселях.
SM_CYDLGFRAME
8
Это значение совпадает с SM_CYFIXEDFRAME.
SM_CYDOUBLECLK
37
Высота прямоугольника вокруг расположения первого щелчка в последовательности двойного щелчка в пикселях. Второй щелчок должен выполняться в прямоугольнике, определенном SM_CXDOUBLECLK, и SM_CYDOUBLECLK, чтобы система рассматривала эти два щелчка двойным щелчком. Два щелчка также должны выполняться в течение указанного времени.

Чтобы задать высоту прямоугольника двойного щелчка, вызовите SystemParametersInfo с SPI_SETDOUBLECLKHEIGHT.

SM_CYDRAG
69
Количество пикселей выше и ниже точки мыши вниз, которую указатель мыши может переместить до начала операции перетаскивания. Это позволяет пользователю легко нажать и отпустить кнопку мыши без непреднамеренного запуска операции перетаскивания. Если это значение отрицательное, оно вычитается из выше точки мыши и добавляется под ним.
SM_CYEDGE
46
Высота трехмерной границы в пикселях. Это трехмерный аналог SM_CYBORDER.
SM_CYFIXEDFRAME
8
Толщина рамки по периметру окна, которое имеет подпись, но не имеет размеров в пикселях. SM_CXFIXEDFRAME — высота горизонтальной границы, а SM_CYFIXEDFRAME — ширина вертикальной границы.

Это значение совпадает с SM_CYDLGFRAME.

SM_CYFOCUSBORDER
84
Высота верхнего и нижнего краев прямоугольника фокуса, рисуемого с помощью DrawFocusRect. Это значение в пикселях.

Windows 2000: Это значение не поддерживается.

SM_CYFRAME
33
Это значение совпадает с SM_CYSIZEFRAME.
SM_CYFULLSCREEN
17
Высота клиентской области для полноэкранного окна на основном мониторе дисплея в пикселях. Чтобы получить координаты части экрана, не заслоняемой системной панелью задач или панелью инструментов рабочего стола приложения, вызовите функцию SystemParametersInfo со значением SPI_GETWORKAREA.
SM_CYHSCROLL
3
Высота горизонтальной полосы прокрутки в пикселях.
SM_CYICON
12
Системная большая высота значка в пикселях. Функция LoadIcon может загружать только значки с измерениями, указанными SM_CXICON и SM_CYICON. Дополнительные сведения см. в разделе Размеры значков .
SM_CYICONSPACING
39
Высота ячейки сетки для элементов в представлении больших значков в пикселях. Каждый элемент помещается в прямоугольник размера SM_CXICONSPACING по SM_CYICONSPACING при упорядочении. Это значение всегда больше или равно SM_CYICON.
SM_CYKANJIWINDOW
18
Для двухбайтовых версий системы это высота окна кандзи в нижней части экрана в пикселях.
SM_CYMAXIMIZED
62
Высота по умолчанию (в пикселях) развернутого окна верхнего уровня на основном мониторе дисплея.
SM_CYMAXTRACK
60
Максимальная высота окна по умолчанию с подпись границами и размерами в пикселях. Эта метрика относится ко всему рабочему столу. Пользователь не может перетащить рамку окна на размер, превышающий эти размеры. Окно может переопределить это значение путем обработки сообщения WM_GETMINMAXINFO .
SM_CYMENU
15
Высота однострочного меню в пикселях.
SM_CYMENUCHECK
72
Высота меню по умолчанию проверка точечный рисунок метки в пикселях.
SM_CYMENUSIZE
55
Высота кнопок в строке меню, таких как кнопка закрытия дочернего окна, используемая в интерфейсе нескольких документов, в пикселях.
SM_CYMIN
29
Минимальная высота окна в пикселях.
SM_CYMINIMIZED
58
Высота свернутого окна в пикселях.
SM_CYMINSPACING
48
Высота ячейки сетки для свернутого окна в пикселях. Каждое свернутое окно помещается в прямоугольник такого размера при упорядочении. Это значение всегда больше или равно SM_CYMINIMIZED.
SM_CYMINTRACK
35
Минимальная высота отслеживания окна в пикселях. Пользователь не может перетащить рамку окна на размер меньше этих размеров. Окно может переопределить это значение путем обработки сообщения WM_GETMINMAXINFO .
SM_CYSCREEN
1
Высота экрана основного монитора в пикселях. Это же значение, полученное путем вызова GetDeviceCaps , как показано ниже: GetDeviceCaps( hdcPrimaryMonitor, VERTRES).
SM_CYSIZE
31
Высота кнопки в окне подпись или заголовка в пикселях.
SM_CYSIZEFRAME
33
Толщина границы размера по периметру окна, размер в пикселях. SM_CXSIZEFRAME — это ширина горизонтальной границы, а SM_CYSIZEFRAME — высота вертикальной границы.

Это значение совпадает с SM_CYFRAME.

SM_CYSMCAPTION
51
Высота небольшого подпись в пикселях.
SM_CYSMICON
50
Системная небольшая высота значка в пикселях. Небольшие значки обычно отображаются в заголовках окна и в представлении маленьких значков. Дополнительные сведения см. в разделе Размеры значков .
SM_CYSMSIZE
53
Высота маленьких кнопок подпись в пикселях.
SM_CYVIRTUALSCREEN
79
Высота виртуального экрана в пикселях. Виртуальный экран — это ограничивающий прямоугольник всех мониторов дисплея. Метрика SM_YVIRTUALSCREEN — это координаты для верхней части виртуального экрана.
SM_CYVSCROLL
20
Высота растрового изображения стрелки на вертикальной полосе прокрутки в пикселях.
SM_CYVTHUMB
9
Высота большого пальца в вертикальной полосе прокрутки в пикселях.
SM_DBCSENABLED
42
Ненулевое значение, если User32.dll поддерживает DBCS; в противном случае — 0.
SM_DEBUG
22
Ненулевое значение, если установлена отладочная версия User.exe; в противном случае — 0.
SM_DIGITIZER
94
Ненулевое значение, если текущая операционная система — Windows 7 или Windows Server 2008 R2 и запущена служба ввода планшетного компьютера; в противном случае — 0. Возвращаемое значение — это битовая маска, указывающая тип входных данных дигитайзера, поддерживаемых устройством. Дополнительные сведения см. в подразделе "Примечания".

Windows Server 2008, Windows Vista и Windows XP/2000: Это значение не поддерживается.

SM_IMMENABLED
82
Ненулевое значение, если включены функции диспетчера методов ввода или метода ввода Редактор; в противном случае — значение 0.

SM_IMMENABLED указывает, готова ли система к использованию IME на основе Юникода в приложении Юникода. Чтобы обеспечить работу IME, зависящее от языка, проверка SM_DBCSENABLED и системную кодовую страницу ANSI. В противном случае преобразование ANSI в Юникод может быть выполнено неправильно, или некоторые компоненты, такие как шрифты или параметры реестра, могут отсутствовать.

SM_MAXIMUMTOUCHES
95
Ненулевое значение, если в системе есть дигитайзеры; в противном случае — 0.

SM_MAXIMUMTOUCHES возвращает совокупное максимальное количество контактов, поддерживаемых каждым дигитайзером в системе. Если в системе есть только односенсорные дигитайзеры, возвращаемое значение равно 1. Если в системе есть мультисенсорные дигитайзеры, возвращаемое значение — это количество одновременных контактов, которые может предоставить оборудование.

Windows Server 2008, Windows Vista и Windows XP/2000: Это значение не поддерживается.

SM_MEDIACENTER
87
Ненулевое значение, если текущая операционная система — Windows XP, Media Center Edition, если нет, 0.
SM_MENUDROPALIGNMENT
40
Ненулевое, если раскрывающееся меню выровнены по правому краю соответствующего пункта строки меню; 0, если меню выровнены по левому краю.
SM_MIDEASTENABLED
74
Ненулевое значение, если система включена для иврита и арабского языков, 0, если нет.
SM_MOUSEPRESENT
19
Ненулевое значение, если мышь установлена; в противном случае — 0. Это значение редко равно нулю из-за поддержки виртуальных мышей и из-за того, что некоторые системы обнаруживают наличие порта вместо мыши.
SM_MOUSEHORIZONTALWHEELPRESENT
91
Ненулевое значение, если установлена мышь с горизонтальным колесиком прокрутки; в противном случае — 0.
SM_MOUSEWHEELPRESENT
75
Ненулевое значение, если установлена мышь с вертикальным колесиком прокрутки; в противном случае — 0.
SM_NETWORK
63
Наименьший значимый бит устанавливается при наличии сети; в противном случае он очищается. Остальные биты зарезервированы для использования в будущем.
SM_PENWINDOWS
41
Ненулевое значение, если установлены вычислительные расширения Microsoft Windows для пера; ноль в противном случае.
SM_REMOTECONTROL
0x2001
Эта системная метрика используется в среде служб терминалов для определения удаленного управления текущим сеансом сервера терминалов. Его значение не равно нулю, если текущий сеанс управляется удаленно; в противном случае — 0.

Для управления удаленным сеансом можно использовать такие средства управления службами терминалов, как диспетчер служб терминалов (tsadmin.msc) и shadow.exe. При удаленном управлении сеансом другой пользователь может просматривать содержимое этого сеанса и потенциально взаимодействовать с ним.

SM_REMOTESESSION
0x1000
Эта системная метрика используется в среде служб терминалов. Если вызывающий процесс связан с сеансом клиента служб терминалов, возвращаемое значение не равно нулю. Если вызывающий процесс связан с сеансом консоли служб терминалов, возвращаемое значение равно 0. Windows Server 2003 и Windows XP: Сеанс консоли не обязательно является физической консолью. Дополнительные сведения см. в разделе WTSGetActiveConsoleSessionId.
SM_SAMEDISPLAYFORMAT
81
Ненулевое значение, если все мониторы дисплея имеют одинаковый цветовой формат, в противном случае — значение 0. Два дисплея могут иметь одинаковую битовую глубину, но разные цветовые форматы. Например, красные, зеленые и синие пиксели могут быть закодированы с разным количеством битов, или эти биты могут находиться в разных местах в значении цвета пикселя.
SM_SECURE
44
Эту системную метрику следует игнорировать; Он всегда возвращает значение 0.
SM_SERVERR2
89
Номер сборки, если система — Windows Server 2003 R2; в противном случае — 0.
SM_SHOWSOUNDS
70
Ненулевое, если пользователю требуется, чтобы приложение предоставляло информацию визуально в ситуациях, когда в противном случае она предоставляла бы информацию только в звуковой форме; в противном случае — 0.
SM_SHUTTINGDOWN
0x2000
Ненулевое значение, если текущий сеанс завершает работу; в противном случае — 0.

Windows 2000: Это значение не поддерживается.

SM_SLOWMACHINE
73
Ненулевое значение, если компьютер имеет низкопроизводительный (медленный) процессор; в противном случае — 0.
SM_STARTER
88
Ненулевое значение, если текущая операционная система является Windows 7 Начальная Edition, Windows Vista Starter или Windows XP Starter Edition; в противном случае — значение 0.
SM_SWAPBUTTON
23
Ненулевое значение, если значения левой и правой кнопок мыши меняются местами; в противном случае — 0.
SM_SYSTEMDOCKED
0x2004
Отражает состояние режима закрепления: 0 для режима отстыковки и ненулевое значение в противном случае. При изменении этой системной метрики система отправляет широковещательное сообщение через WM_SETTINGCHANGE с systemDockMode в LPARAM.
SM_TABLETPC
86
Ненулевое значение, если текущая операционная система является выпуском Windows XP Tablet PC или если текущей операционной системой является Windows Vista или Windows 7 и запущена служба ввода планшетного компьютера; в противном случае — 0. Параметр SM_DIGITIZER указывает тип входных данных дигитайзера, поддерживаемых устройством под управлением Windows 7 или Windows Server 2008 R2. Дополнительные сведения см. в подразделе "Примечания".
SM_XVIRTUALSCREEN
76
Координаты левой части виртуального экрана. Виртуальный экран — это ограничивающий прямоугольник всех мониторов дисплея. Метрика SM_CXVIRTUALSCREEN — это ширина виртуального экрана.
SM_YVIRTUALSCREEN
77
Координаты для верхней части виртуального экрана. Виртуальный экран — это ограничивающий прямоугольник всех мониторов дисплея. Метрика SM_CYVIRTUALSCREEN — это высота виртуального экрана.

Возвращаемое значение

Тип: int

Если функция выполняется успешно, возвращаемым значением будет запрошенная системная метрика или параметр конфигурации.

Если функция завершается сбоем, возвращаемое значение равно 0. GetLastError не предоставляет расширенные сведения об ошибке.

Комментарии

Системные метрики могут отличаться от отображения к отображению.

GetSystemMetrics(SM_CMONITORS) подсчитывает только видимые мониторы дисплея. Это отличается от EnumDisplayMonitors, в котором перечисляются как видимые мониторы отображения, так и невидимые псевдомониторы, связанные с драйверами зеркального отображения. Невидимый псевдомониометр связан с псевдоустройством, используемым для зеркало рисования приложения для удаленного взаимодействия или других целей.

Параметр SM_ARRANGE указывает, как система упорядочивает свернутые окна и состоит из начальной позиции и направления. Начальная позиция может иметь одно из следующих значений.

Значение Значение
ARW_BOTTOMLEFT Начните в левом нижнем углу экрана. Позиция по умолчанию.
ARW_BOTTOMRIGHT Начните с правого нижнего угла экрана. Эквивалентно ARW_STARTRIGHT.
ARW_TOPLEFT Начните с левого верхнего угла экрана. Эквивалентно ARW_STARTTOP.
ARW_TOPRIGHT Начните с правого верхнего угла экрана. Эквивалент ARW_STARTTOP | SRW_STARTRIGHT.
 

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

Значение Значение
ARW_DOWN Расположите по вертикали сверху вниз.
ARW_HIDE Скройте свернутые окна, переместив их за видимую область экрана.
ARW_LEFT Расположите по горизонтали слева направо.
ARW_RIGHT Расположите по горизонтали справа налево.
ARW_UP Расположите по вертикали снизу вверх.
 

Параметр SM_DIGITIZER указывает тип дигитайзеров, установленных на устройстве под управлением Windows 7 или Windows Server 2008 R2. Возвращаемое значение — это битовая маска, задающая одно или несколько следующих значений.

Значение Значение
NID_INTEGRATED_TOUCH

0x01

Устройство имеет встроенный сенсорный дигитайзер.
NID_EXTERNAL_TOUCH

0x02

Устройство имеет внешний дигитайзер сенсорного ввода.
NID_INTEGRATED_PEN

0x04

Устройство имеет встроенный дигитайзер пера.
NID_EXTERNAL_PEN

0x08

Устройство имеет внешний дигитайзер пера.
NID_MULTI_INPUT

0x40

Устройство поддерживает несколько источников входных данных дигитайзера.
NID_READY

0x80

Устройство готово к приему входных данных дигитайзера.
 

Этот API не учитывает DPI и не должен использоваться, если вызывающий поток учитывает DPI для каждого монитора. Версию этого API с поддержкой DPI см. в разделе GetSystemMetricsForDPI. Дополнительные сведения об осведомленности о DPI см. в документации по Windows High DPI.

Примеры

В следующем примере функция GetSystemMetrics используется для определения установки мыши и переключения кнопок мыши. В примере также используется функция SystemParametersInfo для получения порогового значения и скорости мыши. Эта информация отображается в консоли.

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")

void main()
{
   BOOL fResult;
   int aMouseInfo[3];
 
   fResult = GetSystemMetrics(SM_MOUSEPRESENT); 
 
   if (fResult == 0) 
      printf("No mouse installed.\n"); 
   else 
   { 
      printf("Mouse installed.\n");

      // Determine whether the buttons are swapped. 

      fResult = GetSystemMetrics(SM_SWAPBUTTON); 
 
      if (fResult == 0) 
         printf("Buttons not swapped.\n"); 
      else printf("Buttons swapped.\n");
 
      // Get the mouse speed and the threshold values. 
 
      fResult = SystemParametersInfo(
         SPI_GETMOUSE,  // get mouse information 
         0,             // not used 
         &aMouseInfo,   // holds mouse information 
         0);            // not used 

      if( fResult )
      { 
         printf("Speed: %d\n", aMouseInfo[2]); 
         printf("Threshold (x,y): %d,%d\n", 
            aMouseInfo[0], aMouseInfo[1]); 
      }
   } 
}

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-sysparams-ext-l1-1-0 (представлено в Windows 8)

См. также раздел

EnumDisplayMonitors

GetSystemMetricsForDPI

SystemParametersInfo