русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Системный реестр Windows XP

Структура системного реестра подобна структуре каталогов: эквивалентом каталога является ключ, а файла – значение. Ключ содержит подключи и значения. Системный реестр Windows XP хранит информацию о конфигурации системы. В целом системный реестр имеет древовидную структуру. Основными ветвями системного реестра являются:

HKEY_CLASSES_ROOT – содержит определения типов документов, связей с файлами и интерфейса командного процессора;
HKEY_CURRENT_USER – содержит параметры настройки текущего пользователя;
HKEY_LOCAL_MACHINE – хранит аппаратные конфигурации, сетевые протоколы и классы программного обеспечения;
HKEY_USERS – используется для хранения выбранных пользователями глобальных параметров (цвет, звук и т.д.), а также параметры настройки рабочего стола;
HKEY_CURRENT_CONFIG – ключ устанавливает связь с ключом отображения, входящим в состав выбранной конфигурации config из HKEY_LOCAL_MACHINE;
HKEY_PERFORMANCE_DATA (Windows 2000 и выше) или HKEY_DYN_DATA (Windows 9x) – хранит данные о каждом аппаратном компоненте системы и данные о производительности системы.

Наиболее часто встречаемые типы значений в реестре: строковый (REG_SZ), двоичный (REG_BINARY), двойное слово (REG_DWORD).
Функции для работы с реестром, используемые при выполнении индивидуальных заданий:

RegCloseKey – закрывает открытый ключ системного реестра
RegCreateKeyEx – создает новый подключ
RegDeleteKey – удаляет ключ из системного реестра
RegDeleteValue – удаляет значение из системного реестра
RegEnumKeyEx – перечисляет все ключи данного ключа
RegEnumValue – перечисляет все значения данного ключа
RegFlushKey – сразу же записывает все изменения, произведенные в системном реестре
RegNotifyChangeKeyValue – указывает на момент изменения ключа или значения в системном реестре
RegOpenKeyEx – открывает существующий ключ системного реестра
RegQueryInfoKey – возвращает информацию о ключе
RegQueryValueEx – возвращает значение ключа
RegSetValueEx – присваивает ключу значение

ПРЕДУПРЕЖДЕНИЕ: Никогда не изменяйте содержимое реестра, если не знаете его назначения!!! Некорректное изменение данных может привести к сбоям в работе операционной системы Windows!!!

Пример. Программа при отсутствии ключа в реестре создает его, при наличии – выводит все значения ключа и удаляет его.

#include <windows.h>
#include <stdio.h>

HKEY hk;
CHAR szBuf[80];
DWORD dwData, dwDsp, dwValues, dwMaxValueNameLen, dwMaxValueData,
dwNameLen, dwValueData, dwIndex, dwType;
LONG lReturn;
LPTSTR lpszVN1, lpszVN2;

int main()
{
//Создаем ключ в реестре
if (RegCreateKeyEx(  HKEY_CURRENT_USER, //ветвь
"Software\\MyLabSPO", //ключ
0, //зарезервировано (должно быть 0)
"", // имя класса (нам не нужно)
REG_OPTION_NON_VOLATILE, // сохранить ключ на диске
KEY_ALL_ACCESS, // полный доступ
NULL, // защита по умолчанию
&hk, //дескриптор нового ключа
&dwDsp)) // состояние ключа (открыт, создан)
{
printf("Key Creation Error\n"); return(0);
}
if (dwDsp==REG_OPENED_EXISTING_KEY)
{
printf("Key Found\n");
// закрытие дескриптора ключа
RegCloseKey(hk);
// открытие ключа
// приведено для примера - в данном случае достаточно
// проанализировать dwDsp==REG_OPENED_EXISTING_KEY

if (RegOpenKeyEx(    HKEY_CURRENT_USER,
"Software\\MyLabSPO",
0,
KEY_ALL_ACCESS,
&hk))
{
printf("Key Open Error\n"); return(0);
}
// Определяем нужные параметры для чтения ключа
// задаем только нужные нам данные

RegQueryInfoKey(     hk,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
&dwValues,  // число значений в ключе
&dwMaxValueNameLen, // максимальная длина имени значения
&dwMaxValueData, // максимальная длина значения
NULL,
NULL );
printf("Values:%d,Max Value Name Length:%d,Max Data Length:%d\n",
dwValues, dwMaxValueNameLen, dwMaxValueData);
// так как строки завершаются 0 - добавляем 1 байт
dwMaxValueNameLen++;
dwMaxValueData++;
// выделяем память для хранения строк
lpszVN1 = (LPTSTR)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwMaxValueNameLen );
lpszVN2 = (LPTSTR)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwMaxValueData );
// читаем значения ключа
do
{
dwNameLen = dwMaxValueNameLen;
dwValueData = dwMaxValueData;
lReturn = RegEnumValue( hk, dwIndex, lpszVN1,
&dwNameLen, 0, &dwType,
(unsigned char *)lpszVN2, &dwValueData );
if (lReturn != ERROR_NO_MORE_ITEMS )
{
printf("%s = %s\n", lpszVN1, lpszVN2);
dwIndex++;
}
}
while( lReturn != ERROR_NO_MORE_ITEMS );
// освобождаем занятую ранее память
if ( lpszVN1 ) HeapFree( GetProcessHeap(), 0, lpszVN1 );
if ( lpszVN2 ) HeapFree( GetProcessHeap(), 0, lpszVN2 );
// удаляем параметры ключа
if (RegDeleteValue( hk, "File Name" ))
printf("Value 1 Delete Error\n");
if (RegDeleteValue( hk, "Application Run" ))
printf("Value 2 Delete Error\n");
// удаляем ключ
if (RegDeleteKey( hk, "" ))
{
printf("Key Delete Error\n");
} else
{
printf("Key Deleted Successfull\n");
}
}
else
{
printf("Key Not Found\nCreated Successfull\n");
strcpy(szBuf, "My Program");
// создаем параметр ключа
if (RegSetValueEx(   hk, // дескриптор ключа
"File Name", // имя значения
0, //зарезервировано (должно быть 0)
REG_SZ, // тип значения
(LPBYTE) szBuf, // значение
strlen(szBuf) + 1)) //длина значения
{
printf("Value 1 Set Error\n"); RegCloseKey(hk); return(0);
}
dwData = 1;
if (RegSetValueEx(   hk,
"Application Run",
0,
REG_DWORD,
(LPBYTE) &dwData,
sizeof(DWORD)))
{
printf("Value 2 Set Error\n"); RegCloseKey(hk); return(0);
}
}
RegCloseKey(hk);
return 0;
}

 

Просмотров: 16854

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.