Войти

Показать полную графическую версию : корневой каталог как его сменить?


hameg
23-02-2004, 10:47
Всем привет!
народ, ктонибуть знает как сменить корневой каталог при работе с рееестром,
и почему следующая строчка  вызывает ошибку
rootkey:=HKEY..........
в справке по делфи сказано что параметр rootkey должен иметь целочисленное значение, но почему то во всех примерах приводится вышеперечисленная строска....?

vunder
23-02-2004, 17:21
Все rootkey в Windows.pas определены как константы
const
{ Reserved Key Handles. }

 {$EXTERNALSYM HKEY_CLASSES_ROOT}
 HKEY_CLASSES_ROOT     = DWORD($80000000);
 {$EXTERNALSYM HKEY_CURRENT_USER}
 HKEY_CURRENT_USER     = DWORD($80000001);
 {$EXTERNALSYM HKEY_LOCAL_MACHINE}
 HKEY_LOCAL_MACHINE    = DWORD($80000002);
 {$EXTERNALSYM HKEY_USERS}
 HKEY_USERS            = DWORD($80000003);
 {$EXTERNALSYM HKEY_PERFORMANCE_DATA}
 HKEY_PERFORMANCE_DATA = DWORD($80000004);
 {$EXTERNALSYM HKEY_CURRENT_CONFIG}
 HKEY_CURRENT_CONFIG   = DWORD($80000005);
 {$EXTERNALSYM HKEY_DYN_DATA}
 HKEY_DYN_DATA         = DWORD($80000006);

Соответственно для работы с реестром нужно
Uses
 Windows, Registry,.....;
...
var
 r: TRegistry;
begin
 r := TRegistry.Create;
 r.rootkey := HKEY_LOCAL_MACHINE;//или что-то другое
...
 r.Free;
end;

hameg
25-02-2004, 20:46
а кто знает что нужно сделать, или какую прогу нужно запустить что бы изменения в реестре которые я сделал в сетевом доступе, вступили в силу?

simonchik
26-02-2004, 02:19
сорри за повторение, но я не понял в чем фишка....просто та же проблема, но в C++

TRegistry& regKey = *new TRegistry();
regKey.RootKey=HKEY_LOCAL_MACHINE;
bool keyGood = regKey.OpenKey("HARDWARE\DEVICEMAP\SERIALCOMM",false);
if (!keyGood) return;
.......
regKey.Free();
таким образом keyGood становиться false и вываливается

Добавлено:

хотя если  
TRegistry& regKey = *new TRegistry();
regKey.RootKey=HKEY_CURRENT_CONFIG;
bool keyGood = regKey.OpenKey("Software",false);
if (!keyGood) return;
.......
regKey.Free();

keyGood становиться true, в чем разница не пойму....

vasketsov
26-02-2004, 22:55
simonchik
Используй OpenKeyReadOnly

simonchik
26-02-2004, 23:20
проблема была решена следующим образом
геморно, но работает :).....

TRegistry& regKey = *new TRegistry();
regKey.RootKey=HKEY_LOCAL_MACHINE;
bool keyGood = regKey.OpenKey("HARDWARE", false);
if (!keyGood) return;

      bool keyGood2 = regKey.OpenKey("DEVICEMAP", false);
              if (!keyGood2) return;

      bool keyGood3 = regKey.OpenKey("SERIALCOMM", false);
              if (!keyGood3) return;

regKey.Free();

shurikan
27-02-2004, 04:27
simonchik
Не забывай, что внутри Си-шной строки символ \ имеет специальное значение, так что должно быть не

bool keyGood = regKey.OpenKey("HARDWARE\DEVICEMAP\SERIALCOMM",false); ,

а

bool keyGood = regKey.OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM",false);
:)

simonchik
02-03-2004, 01:42
да, спасибо, я понял....

hameg
05-03-2004, 18:30
а по моему вопросу ни ктоне знает.....?




© OSzone.net 2001-2012