Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реестр : RegEnumValue 
:(
    Опции темы
JJohn
Дата 19.11.2005, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.9.2005

Репутация: нет
Всего: нет



Есть код:
Цитата

LONG Err2;
  int index=0;
  char ValueName[MAX_PATH], Value[MAX_PATH];;
  DWORD ValueNameSize, tip, ValueSize;

while (1)
    {
    ValueNameSize=MAX_PATH;
  Err2=RegEnumValue(hk,index,&ValueName[0],&ValueNameSize,NULL,&tip,&Value[0],&ValueSize);
    if (Err2==ERROR_NO_MORE_ITEMS) break;
    ...
    }


так вот..... ранее создал ключ с тремя значениями... когда начинаю читать их, одно читается неправильно... почему???
что самое странное, не читается только одно с типом REG_SZ (там строчка из 5 слов), а regedit выводит все правильно...

p.s.> вывожу ее напрямую, например memo1->Lines->Add(ValueName); тоже значение показывает и DEBUG при наведении на ValueName
PM MAIL   Вверх
JoyEx
Дата 19.11.2005, 04:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 4
Всего: 12



я smile не уверен, но может быть еще нужно инициализировать ValueNameSize и ValueSize



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
JJohn
Дата 19.11.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.9.2005

Репутация: нет
Всего: нет



JoyEx
ты не уверен , но ты прав!!!:)

Благодарю за совет)

добавил в цикл ValueSize=MAX_PATH; и все заработало
PM MAIL   Вверх
ORUM
  Дата 19.10.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.10.2009

Репутация: нет
Всего: нет



Доброго времини суток) Если ВЫ не против я продолжу эту тему.
У меня проблема. Нужно вывести параметрии ключа реестра(имя параметра, тип данных, и данные). Функцыя работаэт через раз, и то выводит токо имя, и даже не все((
Подскажите, что не так. Спасиб))
Код


 char lpValueName[255];
  DWORD lpcValueName;
  DWORD lpType;
  LPBYTE lpData;
  DWORD lpcbData;
/**************************/

if(ERROR_SUCCESS==RegQueryInfoKey(hKey3v,cClass,&dwSize,NULL,&dwSubKeys,&dwMaxLength,
&dwMaxClass,
&dwValues,
&dwMaxValue,
&dwMaxData,
&dwSec,
&ftFileTime))

lpcValueName=dwMaxValue;//размер имени=мах размер
lpcbData=dwMaxData;//размер данных=махРазмер

for(i = 0;i<(int)dwValues; i++)
{ 

if(ERROR_SUCCESS==RegEnumValue(hKey3v, (int) i,&lpValueName[0], &lpcValueName,0,&lpType,&lpData[0],&lpcbData))

                                                            
switch ((int)i)
{ 
  case 0:
SetWindowText(hEdit1,(char*)&lpValueName);//вывод инфы
SetWindowText(hEdit2,(char*)&lpType);
SetWindowText(hEdit3,(char*)&lpData);
break; 
  
case 1:
SetWindowText(hEdit4,lpValueName); 
.............

PM MAIL   Вверх
mekhanikus
Дата 20.10.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Код

if(ERROR_SUCCESS==RegEnumValue(hKey3v,
(int) i,
lpValueName, //это - уже адрес буфера
&lpcValueName, //выставлять по максимуму после каждого Enum
0,
&lpType,
lpData, //это - уже адрес буфера
&lpcbData)) //выставлять по максимуму после каждого Enum


Код

SetWindowText(hEdit1,lpValueName); //текст так вывести получится
SetWindowText(hEdit2,(char*)&lpType); //а вот DWORD придется сперва в строку преобразовать. Например с помощью wsprintf
SetWindowText(hEdit3,(char*)&lpData);

PM MAIL   Вверх
ORUM
  Дата 20.10.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.10.2009

Репутация: нет
Всего: нет



mekhanikus- спасиб.

мой програм код теперь:
Код

 char lpValueName[255];//имя
  DWORD lpcValueName;//размер имени
  DWORD lpType;//тип
  LPBYTE lpData;//данные
  DWORD lpcbData;//размер их
/************/

for(i = 0;i<(int)dwValues; i++)
{
lpcValueName=dwMaxValue;//размер имени=максиммальному размеру
lpcbData=dwMaxData;//размер данных=махРазмер даних

if(ERROR_SUCCESS==RegEnumValue(hKey3v, (int) i, lpValueName, &lpcValueName,0, &lpType, lpData, &lpcbData))


switch ((int)i)
{  
 case 0:
SetWindowText(hEdit1,lpValueName);//вывод имени
break;


всеравно не все ключи читает((.  Мне хотя бы все имена вывести,
PM MAIL   Вверх
mekhanikus
Дата 21.10.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Сделай так:
Код

while(ERROR_NO_MORE_ITEMS != RegEnumValue(hKey3v, (int) i, lpValueName, &lpcValueName,0, &lpType, lpData, &lpcbData))

Не забывай инкремировать i.

А тут ты запутался:
Код

lpcValueName=255; // здесь размер буфера lpValueName
lpcbData=???;// а здесь размер буфера lpData

Причем указатель lpData надо бы инициализировать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.