?? regunit.pas
字號:
Result := ReadInteger(Name) <> 0;
end;
procedure TRegistry.WriteFloat(const Name: string; Value: Double);
begin
PutData(Name, @Value, SizeOf(Double), rdBinary);
end;
function TRegistry.ReadFloat(const Name: string): Double;
var
Len: Integer;
RegData: TRegDataType;
begin
Len := GetData(Name, @Result, SizeOf(Double), RegData);
//if (RegData <> rdBinary) or (Len <> SizeOf(Double)) then
// ReadError(Name);
end;
procedure TRegistry.WriteCurrency(const Name: string; Value: Currency);
begin
PutData(Name, @Value, SizeOf(Currency), rdBinary);
end;
function TRegistry.ReadCurrency(const Name: string): Currency;
var
Len: Integer;
RegData: TRegDataType;
begin
Len := GetData(Name, @Result, SizeOf(Currency), RegData);
//if (RegData <> rdBinary) or (Len <> SizeOf(Currency)) then
// ReadError(Name);
end;
procedure TRegistry.WriteDateTime(const Name: string; Value: TDateTime);
begin
PutData(Name, @Value, SizeOf(TDateTime), rdBinary);
end;
function TRegistry.ReadDateTime(const Name: string): TDateTime;
var
Len: Integer;
RegData: TRegDataType;
begin
Len := GetData(Name, @Result, SizeOf(TDateTime), RegData);
//if (RegData <> rdBinary) or (Len <> SizeOf(TDateTime)) then
// ReadError(Name);
end;
procedure TRegistry.WriteDate(const Name: string; Value: TDateTime);
begin
WriteDateTime(Name, Value);
end;
function TRegistry.ReadDate(const Name: string): TDateTime;
begin
Result := ReadDateTime(Name);
end;
procedure TRegistry.WriteTime(const Name: string; Value: TDateTime);
begin
WriteDateTime(Name, Value);
end;
function TRegistry.ReadTime(const Name: string): TDateTime;
begin
Result := ReadDateTime(Name);
end;
procedure TRegistry.WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);
begin
PutData(Name, @Buffer, BufSize, rdBinary);
end;
function TRegistry.ReadBinaryData(const Name: string; var Buffer; BufSize: Integer): Integer;
var
RegData: TRegDataType;
Info: TRegDataInfo;
begin
if GetDataInfo(Name, Info) then
begin
Result := Info.DataSize;
RegData := Info.RegData;
if ((RegData = rdBinary) or (RegData = rdUnknown)) and (Result <= BufSize) then
GetData(Name, @Buffer, Result, RegData)
// else ReadError(Name);
end else
Result := 0;
end;
procedure TRegistry.PutData(const Name: string; Buffer: Pointer;
BufSize: Integer; RegData: TRegDataType);
var
DataType: Integer;
begin
DataType := RegDataToDataType(RegData);
RegSetValueEx(CurrentKey, PChar(Name), 0, DataType, Buffer,
BufSize) ;
end;
function TRegistry.GetData(const Name: string; Buffer: Pointer;
BufSize: Integer; var RegData: TRegDataType): Integer;
var
DataType: Integer;
begin
DataType := REG_NONE;
RegQueryValueEx(CurrentKey, PChar(Name), nil, @DataType, PByte(Buffer),
@BufSize) ;
Result := BufSize;
RegData := DataTypeToRegData(DataType);
end;
function TRegistry.HasSubKeys: Boolean;
var
Info: TRegKeyInfo;
begin
Result := GetKeyInfo(Info) and (Info.NumSubKeys > 0);
end;
function TRegistry.ValueExists(const Name: string): Boolean;
var
Info: TRegDataInfo;
begin
Result := GetDataInfo(Name, Info);
end;
function TRegistry.GetKey(const Key: string): HKEY;
var
S: string;
Relative: Boolean;
begin
S := Key;
Relative := IsRelative(S);
if not Relative then Delete(S, 1, 1);
Result := 0;
RegOpenKeyEx(GetBaseKey(Relative), PChar(S), 0, FAccess, Result);
end;
function TRegistry.RegistryConnect(const UNCName: string): Boolean;
var
TempKey: HKEY;
begin
Result := RegConnectRegistry(PChar(UNCname), RootKey, TempKey) = ERROR_SUCCESS;
if Result then
begin
RootKey := TempKey;
FCloseRootKey := True;
end;
end;
function TRegistry.LoadKey(const Key, FileName: string): Boolean;
var
S: string;
begin
S := Key;
if not IsRelative(S) then Delete(S, 1, 1);
Result := RegLoadKey(RootKey, PChar(S), PChar(FileName)) = ERROR_SUCCESS;
end;
function TRegistry.UnLoadKey(const Key: string): Boolean;
var
S: string;
begin
S := Key;
if not IsRelative(S) then Delete(S, 1, 1);
Result := RegUnLoadKey(RootKey, PChar(S)) = ERROR_SUCCESS;
end;
function TRegistry.RestoreKey(const Key, FileName: string): Boolean;
var
RestoreKey: HKEY;
begin
Result := False;
RestoreKey := GetKey(Key);
if RestoreKey <> 0 then
try
Result := RegRestoreKey(RestoreKey, PChar(FileName), 0) = ERROR_SUCCESS;
finally
RegCloseKey(RestoreKey);
end;
end;
function TRegistry.ReplaceKey(const Key, FileName, BackUpFileName: string): Boolean;
var
S: string;
Relative: Boolean;
begin
S := Key;
Relative := IsRelative(S);
if not Relative then Delete(S, 1, 1);
Result := RegReplaceKey(GetBaseKey(Relative), PChar(S),
PChar(FileName), PChar(BackUpFileName)) = ERROR_SUCCESS;
end;
function TRegistry.SaveKey(const Key, FileName: string): Boolean;
var
SaveKey: HKEY;
begin
Result := False;
SaveKey := GetKey(Key);
if SaveKey <> 0 then
try
Result := RegSaveKey(SaveKey, PChar(FileName), nil) = ERROR_SUCCESS;
finally
RegCloseKey(SaveKey);
end;
end;
function TRegistry.KeyExists(const Key: string): Boolean;
var
TempKey: HKEY;
OldAccess: Longword;
begin
OldAccess := FAccess;
try
FAccess := STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS;
TempKey := GetKey(Key);
if TempKey <> 0 then RegCloseKey(TempKey);
Result := TempKey <> 0;
finally
FAccess := OldAccess;
end;
end;
procedure TRegistry.RenameValue(const OldName, NewName: string);
var
Len: Integer;
RegData: TRegDataType;
Buffer: PChar;
begin
if ValueExists(OldName) and not ValueExists(NewName) then
begin
Len := GetDataSize(OldName);
if Len > 0 then
begin
Buffer := AllocMem(Len);
try
Len := GetData(OldName, Buffer, Len, RegData);
DeleteValue(OldName);
PutData(NewName, Buffer, Len, RegData);
finally
FreeMem(Buffer);
end;
end;
end;
end;
procedure TRegistry.MoveKey(const OldName, NewName: string; Delete: Boolean);
var
SrcKey, DestKey: HKEY;
procedure MoveValue(SrcKey, DestKey: HKEY; const Name: string);
var
Len: Integer;
OldKey, PrevKey: HKEY;
Buffer: PChar;
RegData: TRegDataType;
begin
OldKey := CurrentKey;
SetCurrentKey(SrcKey);
try
Len := GetDataSize(Name);
if Len > 0 then
begin
Buffer := AllocMem(Len);
try
Len := GetData(Name, Buffer, Len, RegData);
PrevKey := CurrentKey;
SetCurrentKey(DestKey);
try
PutData(Name, Buffer, Len, RegData);
finally
SetCurrentKey(PrevKey);
end;
finally
FreeMem(Buffer);
end;
end;
finally
SetCurrentKey(OldKey);
end;
end;
procedure CopyValues(SrcKey, DestKey: HKEY);
var
Len: DWORD;
I: Integer;
KeyInfo: TRegKeyInfo;
S: string;
OldKey: HKEY;
begin
OldKey := CurrentKey;
SetCurrentKey(SrcKey);
try
if GetKeyInfo(KeyInfo) then
begin
MoveValue(SrcKey, DestKey, '');
SetString(S, nil, KeyInfo.MaxValueLen + 1);
for I := 0 to KeyInfo.NumValues - 1 do
begin
Len := KeyInfo.MaxValueLen + 1;
if RegEnumValue(SrcKey, I, PChar(S), Len, nil, nil, nil, nil) = ERROR_SUCCESS then
MoveValue(SrcKey, DestKey, PChar(S));
end;
end;
finally
SetCurrentKey(OldKey);
end;
end;
procedure CopyKeys(SrcKey, DestKey: HKEY);
var
Len: DWORD;
I: Integer;
Info: TRegKeyInfo;
S: string;
OldKey, PrevKey, NewSrc, NewDest: HKEY;
begin
OldKey := CurrentKey;
SetCurrentKey(SrcKey);
try
if GetKeyInfo(Info) then
begin
SetString(S, nil, Info.MaxSubKeyLen + 1);
for I := 0 to Info.NumSubKeys - 1 do
begin
Len := Info.MaxSubKeyLen + 1;
if RegEnumKeyEx(SrcKey, I, PChar(S), Len, nil, nil, nil, nil) = ERROR_SUCCESS then
begin
NewSrc := GetKey(PChar(S));
if NewSrc <> 0 then
try
PrevKey := CurrentKey;
SetCurrentKey(DestKey);
try
CreateKey(PChar(S));
NewDest := GetKey(PChar(S));
try
CopyValues(NewSrc, NewDest);
CopyKeys(NewSrc, NewDest);
finally
RegCloseKey(NewDest);
end;
finally
SetCurrentKey(PrevKey);
end;
finally
RegCloseKey(NewSrc);
end;
end;
end;
end;
finally
SetCurrentKey(OldKey);
end;
end;
begin
if KeyExists(OldName) and not KeyExists(NewName) then
begin
SrcKey := GetKey(OldName);
if SrcKey <> 0 then
try
CreateKey(NewName);
DestKey := GetKey(NewName);
if DestKey <> 0 then
try
CopyValues(SrcKey, DestKey);
CopyKeys(SrcKey, DestKey);
if Delete then DeleteKey(OldName);
finally
RegCloseKey(DestKey);
end;
finally
RegCloseKey(SrcKey);
end;
end;
end;
constructor TRegIniFile.Create(const FileName: string);
begin
Create(FileName, KEY_ALL_ACCESS);
end;
constructor TRegIniFile.Create(const FileName: string; AAccess: LongWord);
begin
inherited Create(AAccess);
FFilename := FileName;
OpenKey(FileName, True);
end;
function TRegIniFile.ReadString(const Section, Ident, Default: string): string;
var
Key, OldKey: HKEY;
begin
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
if ValueExists(Ident) then
Result := inherited ReadString(Ident) else
Result := Default;
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end
else Result := Default;
end;
procedure TRegIniFile.WriteString(const Section, Ident, Value: String);
var
Key, OldKey: HKEY;
begin
CreateKey(Section);
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited WriteString(Ident, Value);
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
function TRegIniFile.ReadInteger(const Section, Ident: string; Default: LongInt): LongInt;
var
Key, OldKey: HKEY;
S: string;
begin
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
if ValueExists(Ident) then
begin
S := inherited ReadString(Ident);
Result := StrToInt(S, Default);
end else
Result := Default;
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end
else Result := Default;
end;
procedure TRegIniFile.WriteInteger(const Section, Ident: string; Value: LongInt);
var
Key, OldKey: HKEY;
begin
CreateKey(Section);
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited WriteString(Ident, IntToStr(Value));
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
function TRegIniFile.ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
begin
Result := ReadInteger(Section, Ident, Ord(Default)) <> 0;
end;
procedure TRegIniFile.WriteBool(const Section, Ident: string; Value: Boolean);
const
Values: array[Boolean] of string = ('0', '1');
var
Key, OldKey: HKEY;
begin
CreateKey(Section);
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited WriteString(Ident, Values[Value]);
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
procedure TRegIniFile.ReadSection(const Section: string; Strings: TStrings);
var
Key, OldKey: HKEY;
begin
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited GetValueNames(Strings);
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
procedure TRegIniFile.ReadSections(Strings: TStrings);
begin
GetKeyNames(Strings);
end;
procedure TRegIniFile.ReadSectionValues(const Section: string; Strings: TStrings);
var
KeyList: TStrings;
I: Integer;
begin
clear(KeyList);
try
ReadSection(Section, KeyList);
try
for I := 0 to KeyList.Count - 1 do
Strings.Stringss[I] := ReadString(Section, KeyList.stringss[I], '');
finally
end;
finally
end;
end;
procedure TRegIniFile.EraseSection(const Section: string);
begin
inherited DeleteKey(Section);
end;
procedure TRegIniFile.DeleteKey(const Section, Ident: String);
var
Key, OldKey: HKEY;
begin
Key := GetKey(Section);
if Key <> 0 then
try
OldKey := CurrentKey;
SetCurrentKey(Key);
try
inherited DeleteValue(Ident);
finally
SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -