Все системные метрики windows

Функции получения системной информации

Цель работы: Получение практических навыков по программированию в Win32 API С использованием аппаратных и системных функций.

Интерфейс прикладного программирования (Application Programming Interface Win32 — Win32 API) — это программный интерфейс, который используется для управления 32-разрядными операционными системами Windows 9x (Windows 95, 98, ME) и Windows NT (Windows NT, 2000, XP) . Более точно, Win32 API состоит из набора функций и подпрограмм, предоставляющих программный доступ к возможностям операционной системы. Win32 API содержит более 3000 функции для реализации всех видов сервисов операционной системы.

API-функции Windows входят в состав динамически подключаемых библиотек.

Динамически подключаемая библиотека (Dynamic Link Library — DLL) является исполняемым файлом, который содержит несколько экспортируемых функции (exportable functions), то есть функций, к которым могут обращаться другие исполняемые приложения (ЕХЕ или DLL). Файлы DLL намного проще файлов ЕХЕ, например, в них нет кода, который управлял бы графическим интерфейсом или обрабатывал сообщения Windows.

Для размещения API-функций Windows использует несколько DLL. В действительности большая часть функций Win32 API содержится в трех DLL:

KERNEL32.DLL — содержит около 700 функций, которые предназначены для управления памятью, процессами и потоками;

USER32.DLL — предоставляет порядка 600 функций для управления пользовательским интерфейсом, например, созданием окон и передачей сообщений;

GDI. DLL — экспортирует около 400 функций для рисования графических образов, отображения текста и работы со шрифтами.

Кроме этих библиотек Windows также содержит несколько других DLL более узкой специализации. Здесь приводятся некоторые из них:

COMDLG32.DLL — открывает доступ почти к 20 функциям управления стандартными диалоговыми окнами Windows;

LZ32.DLL — хранит примерно 12 функций архивирования и разархивирования файлов;

ADVAPI32.DLL — экспортирует около 400 функций, связанных с защитой объектов и работой с реестром;

WINMM. DLL — содержит около 200 функций, относящихся к мультимедиа.

Основные Win32 API-функции получения системной информации перечислены ниже:

GetComputerName GetSystemMetrics GetWindowsDirectoty

GetKeyboardTyре GetTempPath SetСоmрuterName

GetSysColor GetUserName SetSysColors

CecSystemDirectory GetVersion SystemParametersInfo

GetSystemlnfo GetVersioriEx GetUserName

Функция GetComputerName используется для получения текущего имени компьютера. Связанная с ней SetСomputerName используется для присвоения имени компьютеру.

LPTSTR IpBuffer, // Адрес буфера имени.

LPDWORD NSize // Размер буфера имени.

В соответствии с документацией, выполнение функции GetComputerName в Windows 9х завершится неудачей, если размер буфера входных данных меньше, чем величина константы MAX_COMPUTERNAME_LENGTH + 1.

Пути к системным каталогам Windows

Функции GetWindowsDirectory, GetSystemDirectory и GetTempPath находят путь к каталогу, к системному каталогу и к каталогу временных файлов Windows. Например, функция GetSystemDirectory определена как:

LPTSTR IpBuffer, // Адрес буфера системного каталога.

); // Размер буфера каталога.

LPTSTR IpBuffer, // Адрес буфера каталога Windows.

UINT NSize // Размер буфера каталога.

DWORD NBufferLength, // Размер буфера в символах.

LPTSTR IpBuffer // Указатель на буфер пути к каталогу

Версия операционной системы

Функция GetVersionEx возвращает информацию о версии операционной системы Windows и может использоваться для определения рабочей системы — Windows 95, Windows 98 или Windows NT. Она объявляется как

LPOSVERSIONINFO IpVersionlnformation. // Указатель на структуру

//с информацией о версии.

Где IpVersionlnformation — указатель на структуру OSVERSIONINFO, которая определена следующим образом:

Typedef struct _OSVERSIONINFO (

TCHAR szCSDVersion[ 128 ];

В документации об этой структуре говорится следующее:

Читайте также:  Особенности оперативной системы windows

Задает размер структуры OSVERSIONINFO в байтах. Для структур это является общим требованием. Так как DWORD — четырехбайтовое беззнаковое типа long и поскольку Delphi и VB преобразуют строку из 128 символов в массив символов ANSI из 128 байт, общий размер структуры составляет. 4×5+ 128 = 148 байт. Это значение возвращает функция Len для VB и SizeOf для Delphi.

Указывает номер основной версии операционной системы. Например, для Windows NT версии 3.51 номер основной версии — 3. Для Windows NT 4.0 и Windows 9х номер основной версии — 4.

Указывает дополнительный номер версии операционной системы. Например, Для Windows NT версии 3.51 дополнительный номер версии — 51. Для Windows NT 4.0 и Windows 95 дополнительный номер версии — 0. Для Windows 98 дополнительный номер версии — 10.

Указывает номер сборки операционной системы для Windows NT. Для Windows 9х два младших байта содержат номер сборки операционной системы, а два старших байта — номер основной версии и дополнительный номер версии.

Идентифицирует платформу операционной системы, может иметь одно из следующих значений:

VER_PLATFORM_WIN32s (= 0) . Win32s, работающая на Windows

VER_PLATFORM_WIN32_WINDOWS (= 1). Win32, работающая на Windows 95 или

VER_PLATFORM_WIN32_NT (= 2). Win32, работающая на Windows NT

В Windows NT содержит строку завершающеюся нулевым символом, например «Service Pack3», которая указывает самую последнюю версию установленного в системе служебного пакета программ (service pack). Строка будет пустой, если служебный пакет не установлен. В Windows 95 включает строку с завершающим нулевым символом, в которой может быть произвольная дополнительная информация об операционной системе.

Функция GetSystemMetrics получает информацию о метриках (системе единиц измерения) объектов операционной системы.

Int Nlndex // Системная метрика или установки конфигурации.

Параметр nIndex принимает значение одной из 84 возможных констант. Функция возвращает запрошенные единицы измерения (в общем случае в пикселах или в безразмерных единицах).

Чтобы дать общее представление о типе возвращаемой информации, здесь приведены образцы некоторых констант для этой функции. Единицы измерения высоты и ширины приведены в пикселах:

SM_CMOUSEBUTTOMS = 43 // Delphi ‘ Количество клавиш мыши.

Const SM_CMOUSEBUTTOMS = 43 // VB

SM_MOUSEWHEELPRESENT = 75 ‘ Истина (True), если мышь имеет

‘ (Только Win NT 4 или Win 98.)

SM_SWAPBUTTON = 23 ‘ Истина (True), если клавиши мыши

‘ можно поменять местами (мышь ‘ для левши).

SM_CXBORDER = 5 ‘ Ширина и высота рамки окна.

SM_CXSCREEN = 0 ‘ Ширина и высота экрана.

SM_CXFULLSCREEN = 16 ‘ Ширина и высота области

‘ приложения в полноэкранном

SM_CXHTHUMB = 10 ‘Ширина прямоугольного курсора

‘в горизонтальной полосе ‘прокрутки.

SM_CXICONS PACING = 38 ‘Размеры ячейки сетки для

SM_CYICONSРАСING = З9 ‘значка в режиме просмотра с ‘крупными значками.

SM_CYCAPTION = 4 ‘ Высота стандартной области ‘заголовка.

Функция SystemParamterslnfo — это мощная функция, предназначенная для получения или установки всех системных параметров. Она может также в процессе установки параметра обновлять пользовательские профили. Ниже приведена ее декларация:

UINT UiAction, // Запрашиваемый или устанавливаемый

UINТ UiParam, // Зависит от принятого системного

PVOID PvParam, // Зависит от принятого системного параметра.

UINT FWinIni // Флаг обновления пользовательского профиля.

Эта функция может принимать, по меньшей мере, 90 различных значений uiAction. Ниже приведены некоторые константы uiAction:

Читайте также:  How to sync time linux

SPI_GETACCESSTIMEOUT — используется для определения данных о временных интервалах, относящихся к специальным возможностям Windows;

SPI_GETANIMATION – используется для определения данных об анимации, используемой при сворачивании и восстановлении окон;

SPI_GETBEEP — признак разрешения звуковых сигналов;

SPI_GETBORDER – параметру присваивается коэффициент, управляющий толщиной рамки для изменения размеров окна;

SPI_GETDEFAULTINPUTLANG – параметру присваивается 32- разрядный дескриптор раскладки клавиатуры по умолчанию;

SPI_GETDRAGFULLWINDOWS – характеристики перемещения окна мышью;

SPI_GETFASTTASKSWITCH – признак определяющий быстрое переключение задач;

SPI_GETFILTERKEYS — используется для определения данных о специальных возможностях, относящихся к работе с клавиатурой;

SPI_GETFONTSMOOTHING — режимы сглаживания шрифтов;

SPI_GETGRIDGRANULARITY – гранулярность сетки рабочего стола;

SPI_GETICONMETRICS — используется для определения информации о характеристиках иконок/

Функции GetSysColor и SetSysColors используются для получения и установки цветов различных элементов системы, таких как кнопки, строки заголовков и т. д. Цветовой палитрой может также управлять пользователь с помощью апплета Display (Экран) на панели Control Panel (Панель управления).

Int nIndex // Элемент экрана.

Где NIndex может принимать значение одной из множества символьных констант, например

Возвращаемое значение — это цвет в формате RGB. В частности, каждый цвет занимает один байт в возвращаемом значении типа unsigned long: красный. Цвет — младший байт, зеленый — следующий байт, далее — синий цвет. Самый старший байт равен нулю. Байты цветов представлены в переменной тина long в обратном порядке, поскольку при записи переменной в память байты располагаются от младших к старшим.

Объявление функции SetsysColors:

Int CElements, // Количество изменяемых

CONST INT *LpaElements, // Адрес массива элементов.

CONST COLORREF *LpaRgbValues // Адрес массива значений RGB.

Здесь cElements определяет количество системных элементов, цвет которых требуется изменить; IpaElements — указатель на целочисленный массив VC++ который содержит индексы изменяемых элементов; IpaRgbvalues ссылается на целочисленный массив VC++ новых значений цвета в формате RGB.

Функции для работы со временем

Во внутренней работе Windows используется универсальное координированное время UTC (Universal Coordinated Time); также встречается термин GMT, то есть «среднее время по Гринвичу» (Greenwich Mean Time), поскольку за точку отсчета принят Гринвич, Англия. Преобразования между системным и местным временем в Windows осуществляются при помощи поправок для местного часового пояса, заданного в системе. Функции Win32 позволяют работать как в местном, так и в системном времени и преобразовывать их по мере необходимости. Win32 также включает ряд функций для работы с файловым временем и датой, то есть временем и датой файлов, хранящимися в файловой системе

Функции Windows, предназначенные для получения информации о времени, перечислены ниже. Следует учитывать, что во внутреннем представлении системы время изменяется в тактах таймера, продолжительность которых может изменяться в зависимости от используемого процессора и операционной системы. Интервал измерения времени в Win32 обычно занимает от 10 до 15 миллисекунд. Длительность такта определяет точность результатов, возвращаемых этими функциями.

Основные функции Windows для работы со временем

Перечисляет календарную информацию, зависящую от локального контекста

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

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

Получает текущее местное время

Возвращает время (в миллисекундах) поступления последнего сообщения s очередь приложения. Время отсчитывается от начала текущего сеанса работы в Windows

Читайте также:  Install windows from bios usb

Получает текущее системное время

Определяет, применяется ли в системе периодическая поправка, повышающая точность отсчета системного времени

Получает продолжительность работы текущего сеанса работы в Windows в миллисекундах

Форматирует время в заданном локальном контексте

Получает информацию о текущем часовом поясе

Задает местное время

Задает системное время

Задает периодическую поправку, применяемую системой для повышения точности отсчета времени

Задает часовой пояс

Преобразует системное время в местное

1. Наименование лабораторной работы, ее цель.

2. Разработанное программное обеспечение приложения, обеспечивающего получение следующей системной информации:

§ Имя компьютера, имя пользователя;

§ Пути к системным каталогам Windows;

§ Версия операционной системы;

§ Системные метрики (не менее 2 метрик);

§ Системные параметры (не менее 2 параметров);

§ Системные цвета (определить цвет для следующих символьных констант и изменить его на любой другой) ;

§ Функции для работы со временем;

ActivateKeyboardLayout, GetCurrencyFormat, GetLastError, OemToChar

CharToOem, GetCursor, GetLocaleInfo, OemToCharBuff,

AnsiToOemBuff, GetCursorPos, GetNumberFormat, SetCaretPos,

ClipCursor, GetDoubleClickTime, GetOEMCP, SetCursor

CreateCaret, GetEnvironmentStrings, GetQueueStatus, SetCursorPos

DestroyCaret, GetEnvironmentVariable, GetSystemDefaultLangID, SetDoubleClickTime

EnumSystemCodePages, GetInputState, GetLastError, SetKeyboardState

ExitWindowsEx, GetKBCodePage, GetSystemDefaultLCID, SetCaretBlinkTime

GetACP, GetKeyboardLayout, GetSystemPowerStatus, SetComputerName

GetAsyncKeyState, GetKeyboardLayoutList, GetTickCount, SetLocaleInfo

GetCaretBlinkTime, GetKeyboardLayoutName, GetLastError, SetSystemCursor

GetCaretPos, GetKeyboardState, GetUserDefaultLangID, SetSystemPowerState

GetClipCursor, GetKeyboardType, GetUserDefaultLCID, ShowCursor

GetCommandLine, GetKeyNameText, MessageBeep, SwapMouseButton

GetCPInfo, GetKeyState, GetLastError, UnloadKeyboardLayout

3. Примеры разработанных приложений (результаты и тексты программ).

Что такое Метрика сети или маршрута

В локальный сетях есть такое понятие Метрика сетевого интерфейса или Метрика Сети — это специальное цифровое значение, означающее число переходов (так называемых «хопов» или «прыжков»), которое влияет на выбор маршрута в сети. В таблице маршрутизации из двух одинаковых предпочтительным является тот маршрут, у которого лучшая метрика маршрута.

На сегодняшний день в операционных системах Windows, Linux, MAC OSX, Android, iOS по умолчанию используется автоматическое назначение метрики сетевого интерфейса. В Windows 10 эту опцию можно отключить или включить в Дополнительных параметрах протокола TCP/IP v4.

Посмотреть текущие значения этого параметра для каждого динамического маршрута можно через командную строку, введя команду route print. Пример вывода директивы Вы можете видеть ниже:

При использовании статической маршрутизации возможно прописать значения параметра вручную при указании статического маршрута.

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

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

У самого медленного интерфейса будет самое большое значение параметра и низший приоритет, а у самого быстрого — наименьшее и высший приоритет.

Скорость интерфейса Значение метрики сети
Менее 500 Кбит/с 50
от 500 Кбит/с до 4 Мбит/с 40
от 4 Мбит/с до 20 Мбит/с 30
от 20 Мбит/с до 80 Мбит/с 25
от 80 Мбит/с до 200 Мбит/с 20
от 200 Мбит/с до 2 Гбит/с 10
от 2 Гбит/с и выше 5

Кстати, надо учитывать что в операционных семействах на основе UNIX (Linux, Android и т.п.) метрика сети используется только для протоколов динамической маршрутизации и особо замарачиваться не стоит, так как при выборе маршрута ядро Линукса игнорирует этот параметр.

Оцените статью