Текущий архив: 2003.09.29;
Скачать: CL | DM;
Вниз
По реестру Найти похожие ветки
← →
V © (2003-07-16 20:16) [0]Help !!!!!
Помогите начинающему:
Вывожу на Edit из реестра:
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
try
if reg.OpenKey("Control Panel\Desktop",false)
then
begin
Edit1.Text:=IntToStr(reg.ReadInteger("MenuShowDelay"));
reg.CloseKey;
end;
finally
Reg.free; и получаю REG_ DWORD(в конкретном случае значение 400)
( "Control Panel\Desktop",false) Help !!!!!
Помогите начинающему:
Вывожу на Edit из реестра:
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
try
if reg.OpenKey("Control Panel\Desktop",false)
then
begin
Edit1.Text:=IntToStr(reg.ReadInteger("MenuShowDelay"));
reg.CloseKey;
end;
finally
Reg.free; и получаю REG_ DWORD(в конкретном случае значение 400)
но впереди стоящего значения 0х00..... невидит
либо пыаюсь вывести весь раздел:
reg:tregistry;
gop:TStringLIst;
i:integer;
begin
listbox1.items.clear;
gop:=TStringList.create;
reg:=Tregistry.create;
reg.rootkey:=HKEY_CURRENT_USER;
reg.openkey("Control Panel\Desktop",false);
reg.getvaluenames(gop);
for i:=0 to gop.count-1 do
begin
listbox1.items.add(gop.strings[i]);
end;
reg.free;
gop.free;
end; но получаю только имена.Есть ли возможность
получить полную информацию (типа regedit
чтобы пользователь видел что открыто: цифровое,
буквенное ,или какое там есть под 98м и хр.
Кто сможет - пожалуйста подробней в Unit: хочу разобрать что
к чему (не отправляйте в Help -вчем смог разобратся то сделал.
← →
Nik8. © (2003-07-16 22:52) [1]Удалено модератором
← →
Nevermind (2003-07-17 08:24) [2]Иногда приятнее использовать WinAPI функции для работы с реестром, например, таким образом (наскоро: сырец, и без комментариев, надеюсь, разберешся)
implementation
const
RegTypeStrings: array[0..11] of string =
("REG_NONE", "REG_SZ", "REG_EXPAND_SZ ", "REG_BINARY", "REG_DWORD ",
"REG_DWORD_LITTLE_ENDIAN", "REG_DWORD_BIG_ENDIAN", ",REG_LINK", "REG_MULTI_SZ ",
"REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", "REG_RESOURCE_REQUIREMENTS_LIST");
procedure TForm1.Button1Click(Sender: TObject);
var
Key: HKey;
ekIndex, ekNameSz, ekType, qValueSz: Cardinal;
ekName, qValue: PChar;
ValueString: string;
begin
StringGrid1.Cells[0, 0] := "Name";
StringGrid1.Cells[1, 0] := "Type";
StringGrid1.Cells[2, 0] := "Value";
if RegOpenKey(HKEY_CURRENT_USER, "Control Panel\Desktop", Key) = ERROR_SUCCESS then
try
ekType := 0;
ekIndex := 0;
ekNameSz := 256;
qValueSz := 1024;
ekName := AllocMem(ekNameSz);
qValue := AllocMem(qValueSz);
try
while RegEnumValue(Key, ekIndex, ekName, ekNameSz, nil, @ekType, nil, nil) <>
ERROR_NO_MORE_ITEMS do
begin
Inc(ekIndex);
ekNameSz := 256;
StringGrid1.RowCount := ekIndex + 1;
StringGrid1.Cells[0, ekIndex] := ekName;
StringGrid1.Cells[1, ekIndex] := RegTypeStrings[ekType];
RegQueryValueEx(Key, ekName, nil, nil, PByte(qValue), @qValueSz);
qValueSz := 1024;
case ekType of
REG_DWORD: ValueString := IntToStr(PDword(qValue)^);
//здесь необходимо представить, как будут
//интерпретироованы полученные данные в зависимости от
//типа значения, я сделал проосто для примера
else
ValueString := qValue
end;
StringGrid1.Cells[2, ekIndex] := ValueString;
end;
finally
FreeMem(ekName, 256);
FreeMem(qValue, 1024);
end;
finally
( Key) Иногда приятнее использовать WinAPI функции для работы с реестром, например, таким образом (наскоро: сырец, и без комментариев, надеюсь, разберешся)
implementation
const
RegTypeStrings: array[0..11] of string =
("REG_NONE", "REG_SZ", "REG_EXPAND_SZ ", "REG_BINARY", "REG_DWORD ",
"REG_DWORD_LITTLE_ENDIAN", "REG_DWORD_BIG_ENDIAN", ",REG_LINK", "REG_MULTI_SZ ",
"REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", "REG_RESOURCE_REQUIREMENTS_LIST");
procedure TForm1.Button1Click(Sender: TObject);
var
Key: HKey;
ekIndex, ekNameSz, ekType, qValueSz: Cardinal;
ekName, qValue: PChar;
ValueString: string;
begin
StringGrid1.Cells[0, 0] := "Name";
StringGrid1.Cells[1, 0] := "Type";
StringGrid1.Cells[2, 0] := "Value";
if RegOpenKey(HKEY_CURRENT_USER, "Control Panel\Desktop", Key) = ERROR_SUCCESS then
try
ekType := 0;
ekIndex := 0;
ekNameSz := 256;
qValueSz := 1024;
ekName := AllocMem(ekNameSz);
qValue := AllocMem(qValueSz);
try
while RegEnumValue(Key, ekIndex, ekName, ekNameSz, nil, @ekType, nil, nil) <>
ERROR_NO_MORE_ITEMS do
begin
Inc(ekIndex);
ekNameSz := 256;
StringGrid1.RowCount := ekIndex + 1;
StringGrid1.Cells[0, ekIndex] := ekName;
StringGrid1.Cells[1, ekIndex] := RegTypeStrings[ekType];
RegQueryValueEx(Key, ekName, nil, nil, PByte(qValue), @qValueSz);
qValueSz := 1024;
case ekType of
REG_DWORD: ValueString := IntToStr(PDword(qValue)^);
//здесь необходимо представить, как будут
//интерпретироованы полученные данные в зависимости от
//типа значения, я сделал проосто для примера
else
ValueString := qValue
end;
StringGrid1.Cells[2, ekIndex] := ValueString;
end;
finally
FreeMem(ekName, 256);
FreeMem(qValue, 1024);
end;
finally
RegCloseKey(Key);
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2003.09.29;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.029 c