Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   корневой каталог как его сменить? (http://forum.oszone.net/showthread.php?t=29951)

hameg 23-02-2004 10:47 206488

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

vunder 23-02-2004 17:21 206489

Все 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 206490

а кто знает что нужно сделать, или какую прогу нужно запустить что бы изменения в реестре которые я сделал в сетевом доступе, вступили в силу?

simonchik 26-02-2004 02:19 206491

сорри за повторение, но я не понял в чем фишка....просто та же проблема, но в 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 206492

simonchik
Используй OpenKeyReadOnly

simonchik 26-02-2004 23:20 206493

проблема была решена следующим образом
геморно, но работает :).....

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 206494

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

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

а

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

:)

simonchik 02-03-2004 01:42 206495

да, спасибо, я понял....

hameg 05-03-2004 18:30 206496

а по моему вопросу ни ктоне знает.....?


Время: 11:45.

Время: 11:45.
© OSzone.net 2001-