Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 15:02   #1
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
Восклицание Получение данных из реестра

Вот кусок кода для проверки:

Код:
HKEY fKey;
DWORD pcbData = 255;
char* pvData = new char[pcbData];

if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".xml", 0, KEY_QUERY_VALUE, &fKey) == ERROR_SUCCESS)                  //Открываем ключ HKEY_CLASSES_ROOT/.xml
{
	if (RegQueryValueEx(fKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData) == ERROR_SUCCESS)                //Читаем его значение (по умолчанию) - "xmlfile"
	{
		RegCloseKey(fKey);																                 //Закрываем ключ
		if(RegOpenKeyEx(HKEY_CLASSES_ROOT, pvData, 0, KEY_QUERY_VALUE, &fKey) == ERROR_SUCCESS)          //Открываем ключ HKEY_CLASSES_ROOT/xmlfile
		{
			if (RegQueryValueEx(fKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData) == ERROR_SUCCESS) //Читаем его значение (по умолчанию) - "XML Document"
				AfxMessageBox(pvData);
			else
				AfxMessageBox("Не могу прочитать HKEY_CLASSES_ROOT\\xmlfile.@");                  //В итоге получаем сообщение об ошибке 
		}
		else
			AfxMessageBox("Не могу открыть HKEY_CLASSES_ROOT\\xmlfile");
	}
	else
		AfxMessageBox("Не могу прочитать HKEY_CLASSES_ROOT\\.xml.@");
}
else
	AfxMessageBox("Не могу открыть HKEY_CLASSES_ROOT\\.xml");
delete[] pvData;
Не хочет читать данные. То что они есть в реестре сомнений нет. Единственное что мне не понятно, так это то, что ошибка возникает в том случае, если у ключа кроме значение по умолчанию есть еще и другие значения.
crymchanin вне форума Ответить с цитированием
Старый 14.03.2012, 16:35   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Смысл такой. В Windows NT/2000 значение ключа по умолчанию может иметь различный тип.
Поэтому прежде чем запрашивать значение, надо запросить тип.
Код:
DWORD regtype = 0;
RegQueryValueEx (fKey, NULL, NULL, &regtype, NULL, &pcbData);
if (ERROR_SUCCESS==RegQueryValueEx (fKey, NULL, NULL, &regtype, (LPBYTE)pvData, &pcbData) )
//...
EUGY вне форума Ответить с цитированием
Старый 14.03.2012, 17:32   #3
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

EUGY, спасибо за информацию, не знал этого. Я кажется разобрался в чем дело. Возвращаемая ошибка - ERROR_MORE_DATA, не хватает размера буфера. Хотя как-то странно что 255 байт не хватает для строки с описанием файла (например тот-же "XML Document"). То есть исходя из этого, если в параметре lpValueName указать NULL или "" то в буфер будут занесены все значения полностью?

Последний раз редактировалось crymchanin; 14.03.2012 в 17:41.
crymchanin вне форума Ответить с цитированием
Старый 14.03.2012, 17:47   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

В pcbData занесена длина в байтах прочитанного в предыдущем вызове RegQueryValueEx, это число - длина строки "xmlfile".
И конечно при попытке чтения строки "XML Document" - ERROR_MORE_DATA.
EUGY вне форума Ответить с цитированием
Старый 14.03.2012, 17:51   #5
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Все ясно, спасибо за помощь.

P.S. Теперь понятно почему функция берет адрес pcbData

Последний раз редактировалось crymchanin; 14.03.2012 в 18:07.
crymchanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение данных из файла и запись этих данных в другой. Jurii77 Microsoft Office Excel 9 23.11.2011 09:42
Чтение данных из реестра TranzitZP Microsoft Office Access 2 30.12.2010 23:01
Формирование реестра из данных первых листов книг z21231904 Microsoft Office Excel 12 03.06.2010 23:05
Чтение данных из реестра на WinAPI... ActiveX Win Api 2 27.06.2008 20:14
Копирование данных из реестра delphin100 Общие вопросы Delphi 5 06.05.2008 16:36