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. Она возвращает информацию, как о физической, так и о виртуальной памяти.

Наши рекомендации