Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Получение сведений о компьютере в операционной среде Windows программными средствами





Сведения об устройствах компьютера нужны в ряде случаев, когда параметры важны для выполнения программы. Сведения об устройствах компьютера в Windows 2000, ME, XP хранятся в реестре. Сведения о BIOS материнской платы и видеокарте хранятся в реестре в ключе (Табл. 2):

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System.

Сведения о процессоре содержаться в реестре в ключе:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0.

Параметры: Identifier, ProcessorNameString – соответственно сведения об идентификаторе и имени процессора. Тип этих параметров можно посмотреть в реестре, используя приложение regedit. Для доступа к ключам реестра из программы можно воспользоваться функциями RegOpenKeyEx, RegQueryValueEx и RegCloseKey.

Таблица 2 – Сведения реестра о BIOS и видеокарте

Параметр Тип Описание

SystemBiosDate Строка Дата Bios

SystemBiosVersio n

Несколько строк Версия Bios

VideoBiosDate Строка Дата видеокарты

Функция RegOpenKeyEx

LONG RegOpenKeyEx

(

HKEY hKey,

LPCTSTR lpSubKey,

DWORD ulOptions,

REGSAM samDesired,

PHKEY phkResult

);

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

Параметры:

hKey – описатель открываемого раздела, который может быть получен функціями RegCreateKeyEx и RegOpenKey.

Действуют стандартные описатели:

. HKEY_CLASSES_ROOT

. HKEY_CURRENT_CONFIG

. HKEY_CURRENT_USER

. HKEY_LOCAL_MACHINE

. HKEY_USERS

Для Windows Me/98/95 также: HKEY_DYN_DATA.

lpSubKey – указатель на строку, завершающуюся нулевым байтом, которая содержит имя открываемого раздела. Этот раздел должен быть подразделом, идентифицируемого описателем раздела. Если этот параметр NULL, то функція вернет описатель самого раздела, т. е. раздела, идентифицируемого описателем.

ulOptions – зарезервировано и равно нулю.

samDesired – определяет права доступа (действия, которые будет проделывать с разделом программист). Как уже упоминалось, раздел реестра является системным объектом, а следовательно он имеет дескриптор защиты, именно в нем перечисляются права пользователей на объект.

Определены следующие стандартные макросы:

. KEY_ALL_ACCESS – разрешаются любые действия над разделом;

. KEY_ENUMERATE_SUB_KEYS – разрешается перечисление подразделов данного раздела;

. KEY_READ – разрешается чтение раздела;

. KEY_SET_VALUE – разрешается создавать, удалять параметр или устанавливать его значение;

. KEY_QUERY_VALUE – разрешается запрос параметра раздела.

phkResult – указатель на переменную, получающую описатель открытого раздела.

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

Функция RegQueryValueEx

LONG RegQueryValueEx

(

HKEY hKey,

LPCTSTR lpValueName,

LPDWORD lpReserved,

LPDWORD lpType,

LPBYTE lpData,

LPDWORD lpcbData

);

Функция возвращает информацию о параметре раздела и значение этого параметра.

Параметры:

hKey – описатель открытого раздела. Раздел должен быть открыт с правами KEY_QUERY_VALUE.

lpValueName – указатель на строку, содержащую название параметра, о котором получается информация. Если параметр – NULL или пустая строка, то возвращается информация о параметре по умолчанию.

lpReserved – зарезервирован и равен NULL.

lpType – указатель на переменную, которая получает тип данных, сохраненных в параметре. Если равен NULL, то соответственно, информация не возвращается.

lpData – указатель на массив, получающий данные параметра. Если параметр – NULL, то данные не возвращаются. Если данные – это строка, то функция проверяет наличие нулевого символа.

lpcbData – указатель на переменную, которая определяет размер буфера, принимающего данные из параметра, в байтах. После того, как функция вернет значение, эта переменная будет содержать размер данных, скопированных в буфер.

Если данные носят текстовый характер (REG_xxx_SZ), то также включается и нулевой символ (нулевые символы для REG_MULTI_SZ). Если размер буфера,

недостаточен для сохранения данных, то функция вернет ERROR_MORE_DATA и сохранит требуемый размер буфера в переменную, на которую указывает этот параметр. Если lpData – NULL, а параметр lpcbData не нулевой, функція возвращает ERROR_SUCCESS и сохраняет размер данных в переменной, на которую указывает lpcbData.

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

Функция RegCloseKey

LONG RegCloseKey(HKEY hKey);

Функция закрывает описатель раздела реестра.

Параметры:

hKey – описатель открытого раздела, который подлежит закрытию.

Если описатель успешно освобожден, функция возвращает ERROR_SUCCESS, в противном случае вернет ненулевой код ошибки, определенный в Winerror.h

Пример использования описанных функций для получения информации о дате BIOS представлен в листинге 12.

HKEY hKeyResult = 0;

DWORD dwType;

DWORD dwBytes=256;

char buf[256];

LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,

"HARDWARE\\DESCRIPTION\\System",0, KEY_ALL_ACCESS, &hKeyResult);

lResult=RegQueryValueEx(hKeyResult, "SystemBiosDate", 0, &dwType,(BYTE*)buf, &dwBytes);

RegCloseKey(hKeyResult);

Листинг 12 – Получение информации из ключа реестра

При типе «несколько строк» в буфер buf возвращается массив строк, конец которого определяется двумя нулевыми символами.

Информацию о памяти и е. текущем состоянии можно получить с помощью функции (winbase.h):

Функция GlobalMemoryStatus

void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer);

После вызова функции информацией о состоянии памяти заполняется структура MEMORYSTATUS.

Структура MEMORYSTATUS

typedef struct _MEMORYSTATUS

{

DWORD dwLength; // размер структуры

DWORD dwMemoryLoad; // процент занятой памяти (0-100)

SIZE_T dwTotalPhys; // объ.м физической памяти в байтах

SIZE_T dwAvailPhys; // свободный объ.м физической памяти в байтах

SIZE_T dwTotalPageFile; // объ.м в байтах файла подкачки

SIZE_T dwAvailPageFile; // свободный объ.м файла подкачки

SIZE_T dwTotalVirtual; // объ.м в байтах текущего адресного пространства

SIZE_T dwAvailVirtual; // свободный объ.м в байтах адресного пространства

} MEMORYSTATUS, *LPMEMORYSTATUS;

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

Функция GetComputerName

BOOL GetComputerName

(

LPTSTR lpBuffer, // указатель на буфер

LPDWORD lpnSize // указатель на размер буфера

);

Параметр lpBuffer указывает буфер, в который будет записано имя компьютера. lpnSize – максимальное количество символов. Это значение долино быть не менее MAX_COMPUTERNAME_LENGTH+1. Если функция успішно выполнена, она возвращает true.

Функция GetUserName

BOOL GetUserName

(

LPTSTR lpBuffer,

LPDWORD nSize

);

Параметр lpBuffer указывает буфер, в который будет записано имя пользователя. nSize – максимальное количество символов.

Задание:

1. Написать функцию, которая будет выводить информацию:

– дата Bios;

– версия Bios;

– дата видеокарты;

– идентификатор процессора;

– производитель процессора;

– объ.м физической памяти;

– процент занятой памяти;

– объ.м файла подкачки;

– свободный объ.м файла подкачки;

– адресное пространство;

– имя компьютера;

– имя пользователя.

Контрольные вопросы:

1. Для чего предназначен реестр?

2. Какие основные разделы реестра?

3. Каким образом можно работать со списком строк, получаемых из реестра?

Для самостоятельного изучения:

1. Функции работы с реестром RegOpenKey, RegCreateKeyEx, RegQueryInfoKey,

RegEnumKeyEx, RegEnumValue, RegSetValueEx.







ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.