Int nIndex // Возвращаемые системные параметры
); // или установки
Параметры
nIndex
Определяет возвращаемые системные параметры или установки конфигурации. Все параметры SM_CX* обозначают значения ширины. Все параметры SM_CY* обозначают значения высоты. Определены следующие значения:
SM_ARRANGE | Флаг, определяющий, как система размещает минимизированные окна. | |
SM_CLEANBOOT | Значение, определяющее, как система стартовала: 0. Нормальный старт 1. Старт в безопасном режиме 2. Старт в безопасном режиме с сетевыми подключениями. | |
SM_CMOUSEBUTTONS | Количество кнопок на мыши, или нуль, если мыши нет. | |
SM_CXBORDER SM_CYBORDER | Ширина и высота рамки окна в пикселях. Этот параметр эквивалентен SM_CXEDGE 3-D окон. | |
SM_CXCURSOR SM_CYCURSOR | Ширина и высота курсора в пикселях. Размеры курсора поддерживаются текущим драйвером. Система не может создать курсор другого размера. | |
SM_CXDLGFRAME SM_CYDLGFRAME | То же, что SM_CXFIXEDFRAME и SM_CYFIXEDFRAME. | |
SM_CXDOUBLECLK SM_CYDOUBLECLK | Ширина и высота прямоугольника локализации вокруг первого и двойного кликов. Чтобы система распознала второй клик двойного клика, второй клик должен попасть внутрь этого прямоугольника. (Второй клик должен удовлетворять и определенным временным требованиям.) | |
SM_CXDRAG SM_CYDRAG | Ширина и высота прямоугольника, лимитирующего перемещения указателя мыши перед началом операции перетаскивания. Это позволяет пользователю легко нажимать и отпускать кнопки мыши без случайного выполнения операции перетаскивания. | |
SM_CXEDGE SM_CYEDGE | Размерность в пикселях 3-D рамки. Это 3-D эквивалент SM_CXBORDER и SM_CYBORDER. | |
SM_CXFIXEDFRAME SM_CYFIXEDFRAME | Толщина рамки вокруг немасштабируемого окна с заголовком. SM_CXFIXEDFRAME – это ширина горизонтальной рамки, а SM_CYFIXEDFRAME – высота вертикальной. То же, что SM_CXDLGFRAME и SM_CYDLGFRAME. | |
SM_CXFRAME SM_CYFRAME | То же, что SM_CXSIZEFRAME и SM_CYSIZEFRAME. | |
SM_CXFULLSCREEN SM_CYFULLSCREEN | Ширина и высота клиентской области для полноэкранного режима. Для получения координат части экрана, не заслоняемой треем, следует вызывать функцию SystemParametersInfo со значением SPI_GETWORKAREA. |
SM_CXHSCROLL SM_CYHSCROLL | Ширина в пикселях изображения стрелки на горизонтальной полосе прокрутки и высота в пикселях горизонтальной полосы прокрутки. |
SM_CXHTHUMB | Ширина в пикселях ползунка горизонтальной полосы прокрутки. |
SM_CXICON SM_CYICON | Ширина и высота пиктограммы по умолчанию в пикселях. Типовое значение 32x32, однако, оно сильно зависит от аппаратуры видеотракта. Функция LoadIcon может загружать пиктограммы только этого размера. |
SM_CXICONSPACING SM_CYICONSPACING | Ширина и высота прямоугольника, используемого для размещения пиктограммы с заголовком. Это значение больше или равно SM_CXICON и SM_CYICON. |
SM_CXMAXIMIZED SM_CYMAXIMIZED | Размер по умолчанию максимизированного окна верхнего уровня. |
SM_CXMAXTRACK SM_CYMAXTRACK | Максимальный размер в пикселях по умолчанию окна, имеющего заголовок и изменяемые границы. |
SM_CXMENUCHECK SM_CYMENUCHECK | Размер по умолчанию в пикселях изображения маркера меню. |
SM_CXMENUSIZE SM_CYMENUSIZE | Размер в пикселях по умолчанию кнопок меню. |
SM_CXMIN SM_CYMIN | Минимальные ширина и высота окна в пикселях. |
SM_CXMINIMIZED SM_CYMINIMIZED | Размер в пикселях нормально минимизированного окна. |
SM_CXMINSPACING SM_CYMINSPACING | Размер в пикселях сетки для минимизированных окон. Каждое расставляемое минимизированное окно помещается в прямоугольник этого размера. Эти значения меньше или равны SM_CXMINIMIZED и SM_CYMINIMIZED. |
SM_CXMINTRACK SM_CYMINTRACK | Минимальная отслеживаемая ширина и высота окна в пикселях. Пользователь не может уменьшить окно до размеров уменьшить окно до размеров, меньше указанных. |
SM_CXSCREEN SM_CYSCREEN | Ширина и высота экрана в пикселях. |
SM_CXSIZE SM_CYSIZE | Ширина и высота кнопки в пикселях на полосе заголовка. |
SM_CXSIZEFRAME SM_CYSIZEFRAME | Толщина в пикселях размерной рамки по периметру окна, если размер окна может быть изменен. SM_CXSIZEFRAME это ширина горизонтальной границы, а SM_CYSIZEFRAME это высота вертикальной границы. То же, что SM_CXFRAME и SM_CYFRAME. |
SM_CXSMICON SM_CYSMICON | Рекомендованный размер малой пиктограммы в пикселях. Малые пиктограммы обычно изображаются в заголовке окна и в режиме отображения маленьких иконок. |
SM_CXSMSIZE SM_CYSMSIZE | Размер в пикселях малой кнопки заголовка. |
SM_CXVSCROLL SM_CYVSCROLL | Ширина в пикселях вертикальной полосы прокрутки и высота в пикселях изображения стрелки вертикальной полосы прокрутки. |
SM_CYCAPTION | Высота в пикселях нормального заголовка. |
SM_CYKANJIWINDOW | Для двухбайтовой версии набора символов Windows высота и ширина окна Kanji в нижней части экрана. |
SM_CYENU | Высота в пикселях однострочной полоски меню. |
SM_CYSMCAPTION | Высота в пикселях малого заголовка. |
SM_CYVTHUMB | Высота в пикселях ползунка вертикальной полосы прокрутки. |
SM_DBCSENABLED | TRUE или не нуль, если установлена двухбайтовая версия набора символов (DBCS) USER.EXE; FALSE или нуль, в противном случае. |
SM_DEBUG | TRUE или не нуль, если установлена отладочная версия USER.EXE is installed; FALSE или нуль, в противном случае. |
SM_MENUDROPALIGNMENT | TRUE или не нуль, если выпадающее меню выровнено справа относительно соответствующе элемента строки меню; FALSE или нуль, если левое выравнивание. |
SM_MIDEASTENABLED | TRUE, если система разрешает использование восточных языков. |
SM_MOUSEPRESENT | TRUE или не нуль, если установлена мышь; FALSE или нуль, в противном случае. |
SM_MOUSEWHEELPRESENT | Только Windows NT: TRUE или не нуль, если установлена мышь с колесом прокрутки; FALSE или нуль, в противном случае. |
SM_NETWORK | Младший значащий бит установлен, если сеть представлена; в противном случае, сброшен. Остальные разряды зарезервированы для дальнейшего использования. |
SM_PENWINDOWS | TRUE или не нуль, если установлено Microsoft Windows световое перо; нуль или FALSE, в противном случае. |
SM_SECURE | TRUE, если представлена система безопасности, FALSE, в противном случае. |
SM_SHOWSOUNDS | TRUE или не нуль, если пользователю требуется визуальная информация, которая по умолчанию предоставляется в аудио-форме; FALSE или нуль, в противном случае. |
SM_SLOWMACHINE | TRUE, если компьютер имеет медленный процессор, FALSE, в противном случае. |
SM_SWAPBUTTON | TRUE или не нуль, если назначение левой и правой кнопок мыши поменяны местами; FALSE или нуль, в противном случае. |
Возвращаемые значения
Если функция выполнена успешно, возвращается значение запрошенного системного параметра или установки конфигурации.
Если возникла ошибка при выполнении функции, возвращается значение «нуль». Функция GetLastError предоставляет дополнительную информацию об ошибке.
Примечания. Системные параметры зависят от типа видеоподсистемы.
SM_ARRANGE установки определяют, как система располагает минимизированные окна, в зависимости от стартовой позиции и направления. Стартовая позиция может принимать оно из следующих значений.
ARW_BOTTOMLEFT Начинает с левого нижнего угла экрана (позиция по умолчанию).
ARW_BOTTOMRIGHT Начинает с правого нижнего угла экрана. Эквивалентно ARW_STARTRIGHT.
ARW_HIDE Скрывать минимизированные окна при перемещении их за пределы видимой области экрана.
ARW_TOPLEFT Начинает с левого верхнего угла экрана. Эквивалентно ARV_STARTTOP.
ARW_TOPRIGHT Начинает с правого верхнего угла экрана. Эквивалентно ARW_STARTTOP | SRW_STARTRIGHT.
Направление, в котором могут располагаться окна, может принимать одно из следующих значений.
ARW_DOWN Вертикальное расположение, сверху вниз.
ARW_LEFT Горизонтальное расположение, слева направо.
ARW_RIGHT Горизонтальное расположение, справа налево.
ARW_UP Вертикальное расположение, снизу вверх.
// Проверка наличия мыши
if(GetSystemMetrics(SM_MOUSEPRESENT)==0)
{ Application->MessageBox(”Для работы программы необходима мышь”,”Системные требования”,MB_OK);
Application->Terminate();
}
3.3 Определение частоты процессора
Для определения частоты процессора можно использовать ассемблерную команду rdtsc (Read Time Stamp Counter). Это ассемблерная инструкция для платформы x86, читающая счётчик TSC (Time Stamp Counter) и возвращающая в регистрах EDX:EAX 64-битное количество тактов с момента последнего сброса процессора.
// Определение частоты процессора ============================
AnsiString a;
Try
{ unsigned __int64 count_1,count_2;
unsigned int lo,hi;
fasm(&lo,&hi);
count_1=((unsigned __int64)hi)*(((unsigned __int64)1)<<32)+(unsigned __int64)lo;
Sleep(500);
fasm(&lo,&hi);
count_2=((unsigned __int64)hi)*(((unsigned __int64)1)<<32)+(unsigned __int64)lo;
frequency_proc=(int)(count_2-count_1)/(500000); // Частота в МГц
}
catch(...) // Реакция на системное исключение [не может выполниться
// функция Fasm()]
{ AnsiString f1,f2;
f1=”Не тот тип процессора”;
f2=”Системные требования”;
Application->MessageBox(f1.c_str(),f2.c_str(),MB_OK);
Application->Terminate();
}
// Системного исключения не было, вычисляем частоту процессора
if(frequency_proc<500)
{ AnsiString a,f2;
f2=”Системные требования”;
a=”Частота процессора ЭВМ менее 500 Мгц”+
+AnsiString((int)frequency_proc)+ ”Мгц)\n”;
Application->MessageBox(a.c_str(),f2.c_str(),MB_OK);
}
Ассемблерная функция
//---- «Fasm» -----------------------------------------
void fasm(unsigned int *plo,unsigned int *phi)
{ unsigned int lo,hi;
Asm
{
Rdtsc
Mov lo,eax
Mov hi,edx
}
*plo=lo;
*phi=hi;
}
3.4 Определение объема оперативной памяти
Для получения информации о доступной оперативной памяти можно использовать функцию API Win32 GlobalMemoryStatus. Она возвращает информацию, как о физической, так и о виртуальной памяти.