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

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

шестнадцатиричные значения ключей в реестре [D6, WinXP]


Вася ©   (2006-10-15 14:59:00) 

Привет всем! Нужно прочитать значение IPAddress из ключа реестра
SYSTEM\CurrentControlSet\Services\{F7A33661-7511-485A-AEAA-55683BEBCCE8}\Parameters\Tcpip
оно есть hex(7)
при создании объекта TRegistry в дельфи возникли трудности с извлечением значения из ключа. Методы объекта не позволяют читать шестнадцатиричные значения. Как это  сделать?
TRegistry.readstring(), .readbinary и пр выдаёт ошибку...


Anatoly Podgoretsky   (2006-10-16 19:20:00) [1]

Это не STRING, а список WideString = 0.0.0.0
Дельфи поддержки не имеет, надо писать свою функцию.


Вася   (2006-10-16 09:17:00) [2]

a := TRegistry.Create;
  a.RootKey := HKEY_LOCAL_MACHINE;
  a.OpenKey('SYSTEM\CurrentControlSet\Services\{F7A33661-7511-485A-AEAA-55683BEBCCE8}\Parameters\Tcpip', false);
  adress:=a.ReadString('IPAddress');
  a.Free;


Вася   (2006-10-16 09:15:00) [3]

Приведу кусок из *.reg файла

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{F7A33661-7511-485A-AEAA-55683BEBCCE8}\Parameters\Tcpip]
"EnableDHCP"=dword:00000001
"IPAddress"=hex(7):30,00,2e,00,30,00,2e,00,30,00,2e,00,30,00,00,00,00,00
"SubnetMask"=hex(7):30,00,2e,00,30,00,2e,00,30,00,2e,00,30,00,00,00,00,00
"DefaultGateway"=hex(7):00,00

В редакторе реестра действительно оно имеет тип мульти строка, но при попытке записать вместо что то типа "192.168.64.56", в реестр то записывается нормально, только утилита (подключение по локальной сети-настройка протокола TCP/IP-свойства), не видит адреса, выдаёт пустую строку, а если записать так, как приведено выше - всё ок. По поводу строки с ошибкой:

   a := TRegistry.Create;
   a.RootKey := HKEY_LOCAL_MACHINE;
   a.OpenKey('SYSTEM\CurrentControlSet\Services\{F7A33661-7511-485A-AEAA-55683BEBCCE8}\Parameters\Tcpip', false);
   adress:=a.ReadString('IPAddress');
   str:='IPAddress';
   adress:=a.
   a.Free;

так понятнее, просто хотел сэкономить место.


kami   (2006-10-15 19:21:00) [4]

Вася   (15.10.06 14:59)
оно есть hex(7)

Посмотрел несколько подобных значений IPAddress- все имеют тип REG_MULTI_SZ
Работать с ними можно, например, так :
http://www.delphiworld.narod.ru/base/ex_tregistry.html
Только подправить нужно, глуповасто там разбиение по строкам сделано, да и еще что-то было плохое - уже не помню, давно под себя переделывал.


Anatoly Podgoretsky   (2006-10-15 15:45:00) [5]

Ключ не может быть ни каким hex - это всего лишь имя.
А в данном ключе очень много параметров.
Тебе надо разобраться, что ты хочешь получить, пока ничего получить нельзя.
readstring надо вызывать с параметрами и вообще у тебя ошибка в 17 строке.


Наверх

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