Поскольку в прошлом посте про загрузку / парсинг HTML страницы с помощью библиотеки MSHTML мне пришлось бороться со всплывающим окном методом замены значений в реестре Windows, отвечающего за настройки IE, то в данном посте решил освежить минимальные навыки работы с реестром, а именно – чтение / запись.
Итак, подключаем модули в uses
1 |
uses Registry,Winapi.Windows |
Если заглянуть в него, то можно обнаружить несколько полезных классов
1 2 3 4 5 6 |
ERegistryException TRegDataType TRegDataInfo TRegistry // c ним-то мы и будем работать TRegIniFile TRegistryIniFile |
Наша задача
Прочитать из реестра
1 |
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1A10 |
значение переменной 1A10 и записать какое-то свое значение.
Первым делом посмотрим в редакторе реестра (regedit) какого типа наша переменная?
Переменная типа DWORD!!!
В сети увидел такую информацию на одном из форумов.
Type Range Format
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.Fundamental integer types
Type Range Format
Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
К чему я озаботился типом переменной? А все просто, чтобы корректно прочитать её в Delphi – нам нужно знать каким методом читать из реестра. Если внимательно изучить модуль Registry, то в нем можно увидеть несколько различных методов чтения…
1 2 3 4 5 6 7 8 9 10 11 |
... function ReadCurrency(const Name: string): Currency; function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer): Integer; function ReadBool(const Name: string): Boolean; function ReadDate(const Name: string): TDateTime; function ReadDateTime(const Name: string): TDateTime; function ReadFloat(const Name: string): Double; function ReadInteger(const Name: string): Integer; function ReadString(const Name: string): string; function ReadTime(const Name: string): TDateTime; ... |
С учетом всего этого многообразия, нам нужно выбрать какой-то метод. Нам подходит Readinteger, так как наша переменная не превосходит 2147483647. Согласно описанию EricLaw, она меняется в диапазоне т 0 до 3!
Как прочитать из реестра?
1 2 3 4 5 6 7 8 9 10 11 12 13 |
procedure TForm2.Button1Click(Sender: TObject); var reg : TRegistry; s : string; begin reg:=TRegistry.Create; reg.RootKey:=HKEY_CURRENT_USER; reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\', false); s:=inttostr(reg.ReadInteger('1A10')); reg.CloseKey; reg.Free; showmessage(s); end; |
Как записать в реестр?
//Запишем, например, число 2
1 2 3 4 5 6 7 8 9 10 11 |
procedure TForm2.Button2Click(Sender: TObject); var reg : TRegistry; s : string; begin reg:=TRegistry.Create; reg.RootKey:=HKEY_CURRENT_USER; reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\', false); reg.WriteInteger('1A10',2); reg.Free; Self.Button1Click(Self); end; |