Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Нужен хелп! И просьба не динамить, так как очень нужно.

Вот код который граббит реестр (REG_NONE) и пишет в файл результат.
Код: Выделить весь код
const
  KEY_QUERY_VALUE = 1;

function RegOpenKeyEx(
  hKey: Integer;
  const lpSubKey: String;
  ulOptions: Integer;
  samDesired: Integer;
  var hkeyResult: Integer
): Integer;
external 'RegOpenKeyExA@AdvAPI32.DLL stdcall';

function RegCloseKey(
  hKey: Integer
): Integer;
external 'RegCloseKey@AdvAPI32.DLL stdcall';

type
  Data = array [0..259] of Byte;

function RegQueryValueEx(
  hKey: Integer;
  const lpValueName: String;
  lpReserved: Integer;
  var lpType: Integer;
  var lpData: Data;
  var lpcbData: Integer
): Integer;
external 'RegQueryValueExA@AdvAPI32.DLL stdcall';

function InitializeSetup(): Boolean;
var
  hKey, ValueType, ValueDataLen, i, j: Integer;
  ValueData: Data;
  Value: String;
begin
  RegOpenKeyEx(HKLM, 'SOFTWARE\Classes\Trilogy', 0, KEY_QUERY_VALUE, hKey);
  for i := 1 to 3 do begin
    Value := Format('Value%u', [i]);
    ValueDataLen := SizeOf(ValueData);
    RegQueryValueEx(hKey, Value, 0, ValueType, ValueData, ValueDataLen);
    Value := Format('HKLM,"SOFTWARE\Classes\Trilogy","%s",0x20001', [Value]);
    for j := 0 to ValueDataLen-1 do
      Value := Value+Format(',%.2x', [ValueData[j]]);
    SaveStringToFile('C:\test.txt', Value+#13#10, i>1);
  end;
  RegCloseKey(hKey);
  Result := False;
end;
Вот мой незатейливый код
Код: Выделить весь код
 [_Code]
procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
  SetArrayLength(S, 9);
// -------------------------------------------------------------------------------------------------------------------------------------
  S[00] := '[Version]'
  S[01] := 'Signature=$Windows NT$'
  S[02] := ''
  S[03] := '[DefaultInstall]'
  S[04] := 'AddReg=Add.Reg'
  S[05] := ''
  S[06] := '[Add.Reg]'
  S[07] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe",,0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy\Trilogy.exe"'
  S[08] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe","Path",0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy"'
// -------------------------------------------------------------------------------------------------------------------------------------
  SaveStringsToFile(F, S, False);
end;
Мне нужно к моему коду привязать то, что было выше для того, чтобы дописать
экспортируемые значения из реестра в конец этого файла:
ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf')

Причём это должно неизменно выполниться под процедурой DeinitializeSetup();

Экспорт происходит с тремя значениями Value1, Value2 и Value3, если нужно то можно явно
это указать в коде экспорта вместо индексов типа i>1.

Одним словом проблема в том, что SaveStringToFile() переписывает весь файл,
а мне надо прибавить к моему файлу эти строки в таком виде:

SetArrayLength(S, 12);
...

S[09] :=...
S[10] :=...
S[11] :=...

Так как я в этом нибум-бум, помогите преобразовать? Только желательно целиком код напишите.
Напомню, то что было http://j.imagehost.org/0295/Snap1_1.png

-------
Полезное сообщение


Отправлено: 19:47, 19-06-2010 | #1968