Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получит из ключа реестра, значения определённы типов [D6, WinXP]


ctranik ©   (2005-06-11 22:37:00) 

Здравтствуйте

Подскажите пожалуйста как с помощью API-функций получит из ключей реестра значения следующих типов :
- REG_DWORD
- REG_BINARY

а то у меня ничего неполучается

Заранее благодарен


Просто Джо   (2005-06-14 01:00:00) [1]

Посмотри исходники метода TRegistry.GetValueNames в модуле Registry.pas - там все просто до безобразия.


ctranik   (2005-06-13 20:43:00) [2]

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


procedure FindValue(CK:HKey;Path,GlobalTargetkey,CurrentTargetKey:string;Select:boolean;var OutList:TstringList);
var
valuelist:tstringlist;
SubBuffer:array[0..1001] of char;
Data: array [0..1001] of byte;
subbufersize:cardinal;
subindex,datasize,datatype:integer;
s:string;

begin

valuelist:=tstringlist.Create;
subindex:=0 ; subbufersize:=1001; datasize:=1001;

while RegEnumValue(ck,subindex,subbuffer,subbufersize,nil,@datatype,@data,@datasize) ERROR_NO_MORE_ITEMS do begin
s:=strpas(subbuffer);
if s='' then s:='Ïî óìîë÷àíèþ';

case Select of
 true :   valuelist.Add(s+' : '+ PChar(@data));

 false:  begin
          if pos(CurrentTargetKey,s)>0 then valuelist.Add(s+' : '+PChar(@data))
          else
           if pos(CurrentTargetKey,PChar(@data))>0 then valuelist.Add(s+' : '+PChar(@data));
         end;  //false
end;//case

inc(subindex);
subbufersize:=1001; datasize:=1001;
end; //while

if (select=true)and(valuelist.Count>0) then begin
  outlist.Add('[');
  outlist.AddStrings(valuelist);
  outlist.Add(']');
end//if
else
if (select=false)and(valuelist.Count>0) then begin
  outlist.Add(GlobalTargetkey+' -- '+path);
  outlist.Add('[');
  outlist.AddStrings(valuelist);
  outlist.Add(']');
end;
valuelist.Free;
end;

> Просто Джо


Просто Джо   (2005-06-12 15:14:00) [3]

Разреши поинтересоваться: ты что в качестве значения для параметра lpValueName так прямо и передаешь экземпляр TStringList? Весело, однако. Уточни, пожалуйста, а лучше приведи кусок своего кода, а то будет совсем грустно.


ctranik   (2005-06-12 11:51:00) [4]


> Anatoly Podgoretsky

привет

использую API -функцию RegEnumValue (
                        HKEY hKey,
                        DWORD dwIndex,
                        LPTSTR lpValueName,
                        LPDWORD lpcbValueName,
                        LPDWORD lpReserved,
                        LPDWORD lpType,
                        LPBYTE lpData,
                        LPDWORD lpcbData) ,
там есть параметр " LPBYTE lpData ", в который загружаются данные, так вот если тип данных  " REG_SZ" то всё нормально пишется в мой список (TstringList), а вот если тип данных "REG_DWORD " или " REG_BINARY " то в мой список записывается только имя параметра а сами данные нет.

Что я должен делать ?


Anatoly Podgoretsky   (2005-06-11 23:03:00) [5]

И как у тебя не получается?


Ученик   (2005-06-11 22:53:00) [6]

Пример в Delphi?\Source\Rtl\Common\Registry.pas


Наверх

Титульная страница Поиск, карта сайта Написать письмо