Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Regedit HEX DWORD, запись 
:(
    Опции темы
ВоВеЦ
Дата 22.8.2006, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Подскажите какой командой записываются HEX и DWORD значенния в реестр, в DRKB не нашёл ответ на мой вапрос, а в поисковиках муть какая та...
PM MAIL   Вверх
Fedia
Дата 22.8.2006, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Код

var
  i: Integer;
  reg: TRegistry;
  ar: array [0..7] of Byte;
begin
  for i:=65 to 72 do
  ar[i-65]:=i;
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\SOFTWARE\Test', false) then
  begin
    //для HEX (Binary)
    reg.WriteBinaryData('testBin', ar, 8);
    //для DWORD
    reg.WriteInteger('testInt', 1234);
    reg.CloseKey;
  end;
  FreeAndNil(reg);
end;



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 22.8.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Fedia спасиб, только одно непонятно, если у меня такое значение hex:00,00,00,00 то как его записать в regedit?
PM MAIL   Вверх
Alexeis
Дата 22.8.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Код

reg.WriteBinaryData('testBin', $00000000, 4);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ВоВеЦ
Дата 22.8.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



[Error] Unit1.pas(63): Constant object cannot be passed as var parameter 

                                                             smile 

Чёт ему не дравится в этой строчке, что то надо объяыить const, а вот что не ясно?


Это сообщение отредактировал(а) ВоВеЦ - 22.8.2006, 18:50
PM MAIL   Вверх
Fedia
Дата 22.8.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



ВоВеЦ, да также, только длину массива можно сделать равной 4-м и последний параметр процедуры WriteBinaryData также должет быть 4.
Код

var    
  i: Integer;
  reg: TRegistry;
  ar: array [0..3] of Byte;
begin
  for i:=0 to 3 do
  ar[i]:=0;
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\SOFTWARE\Test', false) then
  begin
    //äëÿ HEX (Binary)
    reg.WriteBinaryData('testBin', ar, 4);
    reg.CloseKey;
  end;
  FreeAndNil(reg);
end;


Добавлено @ 22:34 
Цитата(ВоВеЦ @  22.8.2006,  18:49 Найти цитируемый пост)
Чёт ему не дравится в этой строчке, что то надо объяыить const, а вот что не ясно?

$00000000 - константа, а для процедуры WriteBinaryData нужна переменная.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 23.8.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



С нулями то ясно, спасиб за подсказку, но если мне нужно значение $56130000  к примеру то тут как быть? Пробывал так
Код

const
 ar: array [0..3] of Byte = (56, 13, 00, 00);
begin
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  reg.OpenKey(''\SOFTWARE\Test'', false);
  reg.WriteBinaryData('testBin', ar, 4);
  reg.CloseKey;
  FreeAndNil(reg);
end;


или задавал константу C = $56130000, строчка записи так выглядела   reg.WriteBinaryData('testBin', С, 4); 
Всё равно вылетает ошибка 2мя постами выше... smile 
PM MAIL   Вверх
Fedia
Дата 23.8.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Код

var     
  ar: array [0..3] of Byte;
  //...
  ar[0]:=$56; ar[1]:=$13; ar[2]:=0; ar[3]:=0;
  //...
    reg.WriteBinaryData('testBin', ar, 4);



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 23.8.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Fedia thank you!
Цитата
$00000000 - константа, а для процедуры WriteBinaryData нужна переменная. 

Как то внимания осбого не обратил=)


Это сообщение отредактировал(а) ВоВеЦ - 23.8.2006, 00:27
PM MAIL   Вверх
Fedia
Дата 23.8.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Нашел еще один способ попроще:
Код

var
  value: Integer;
  //...
  value:=$00001356;
  //...
    reg.WriteBinaryData('testBin', value, 4);

Кто-нибудь знает эффективный способ преобразования значения $56130000 в $00001356 ?

Это сообщение отредактировал(а) Fedia - 23.8.2006, 00:46


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
dumb
Дата 23.8.2006, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(Fedia @  23.8.2006,  00:41 Найти цитируемый пост)
Кто-нибудь знает эффективный способ преобразования значения $56130000 в $00001356 ?

bswap, но в данном случае это не нужно - при использовании переменной типа Integer, она в памяти уже "лежит" как надо. т.е. если надо записать $56130000, то так и делать:
Код

value := $56130000;
reg.WriteBinaryData('testBin', value, sizeof(value));

PM MAIL   Вверх
Fedia
Дата 23.8.2006, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(dumb @  23.8.2006,  03:03 Найти цитируемый пост)
bswap, но в данном случае это не нужно - при использовании переменной типа Integer, она в памяти уже "лежит" как надо. т.е. если надо записать $56130000, то так и делать:

Неправда, в этом случае в реестр ляжет 00 00 13 56. Так я сразу попробовал smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
dumb
Дата 23.8.2006, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(Fedia @  23.8.2006,  03:11 Найти цитируемый пост)
Неправда, в этом случае в реестр ляжет 00 00 13 56. Так я сразу попробовал

ты потом как читать будешь? - как строку чтоль?! user posted image
PM MAIL   Вверх
Fedia
Дата 23.8.2006, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(dumb @  23.8.2006,  03:18 Найти цитируемый пост)
ты потом как читать будешь? - как строку чтоль?! 

Могу прочитать как массив. Могу значение для сторонней проги в реестр записать. Согласись, что 00 00 13 56 и 56 13 00 00 нифига не одно и тоже smile Требуется одно, а ты предлагаешь другое. Так что суди сам  smile

Это сообщение отредактировал(а) Fedia - 23.8.2006, 03:24


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 24.8.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



А что делать если константа имеет длинное значение к примеру

Код
 $250043003A006B000000C5C00570049004E0044004F00570053005C0073007600630068006F00730074002E00650078006500220020002F0073006500720076006900630065000000;


Разбивать их на маленькие константы, а потом соединять их не самая лучшая затея, есть варианты попроще?
PM MAIL   Вверх
Yanis
Дата 24.8.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



ВоВеЦ
С помощью WriteBinaryData.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ВоВеЦ
Дата 24.8.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Код

var
value := $$250043003A006B000000C5C00570049004E0044004F00570053005C0073007600630068006F00730074002E00650078006500220020002F007300650072007600690063006500;
begin
reg.WriteBinaryData('testBin', value, sizeof(value));


[Error] Unit1.pas(74): Integer constant too large
[Error] Unit1.pas(74): Constant expression violates subrange bounds
PM MAIL   Вверх
Alexeis
Дата 24.8.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ВоВеЦ, может запихнуть ее в ресурс, в раздел RCDATA, и грузить ее в программе как некий буфер, а затем буфер писать в реестр.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dumb
Дата 24.8.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



что это вообще за константы такие? smile
$$ - тоже неплохо. smile

пора рассказывать, что вообще хочешь сделать. smile 
PM MAIL   Вверх
ВоВеЦ
Дата 24.8.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Что хочу сделать это неважно...
Неужели придётся через массивы их заносить((
PM MAIL   Вверх
Alexeis
Дата 24.8.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ВоВеЦ @  24.8.2006,  18:21 Найти цитируемый пост)
Неужели придётся через массивы их заносить(( 

А чем ресурс не устраивает?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fedia
Дата 24.8.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



ВоВеЦ, а с массивом то как раз милое дело. Тем более что такое значение у тебя наверняка в виде текста храниться.
Код

var
  i, Len: Integer;
  reg: TRegistry;
  ar: array [0..127] of Byte;
  s: PAnsiChar;
begin
  s:='250043003A006B000000C5C00570049004E0044004F00570053005C0073007600630068006F00730074002E00650078006500220020002F007300650072007600690063006500';
  len:=Trunc(Length(s)/2);
  for i:=0 to len - 1 do
  ar[i]:=StrToInt('$' + Copy(s, 1 + i*2, 2));
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\SOFTWARE\Test', false) then
  begin
    reg.WriteBinaryData('testBin', ar, len);
    reg.CloseKey;
  end;
  FreeAndNil(reg);
end;


Добавлено @ 23:33 
А как целочисленную переменную такое значение использовать не получиться. Даже тип Int64 имеет значительно меньшую размерность.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 25.8.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Тему можете закрывать, всем спасибо

Это сообщение отредактировал(а) ВоВеЦ - 25.8.2006, 16:29
PM MAIL   Вверх
ВоВеЦ
Дата 28.8.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Похоже тема не закрыта.... Вдруг откуда невозьмись, появилься еррор=) Причём не чего не менял в коде, вчера запускал прогу, сеня уже не запускается... Ошибка из типа не удалось прочитать память по такому то адрессу...

Вообщем я подумал легче будет занести все ключи в фаил .reg, прикрепить его к ресурсам и запустить. Как занести,прикрепить, распаковать, вопросов нет, а вот как через Delphi запустить распакованый фаил, чтоб занести ключи в реестр непонятно.. Подскажите?



Это сообщение отредактировал(а) ВоВеЦ - 28.8.2006, 01:14
PM MAIL   Вверх
Fedia
Дата 28.8.2006, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Код

  ShellExecute(Application.Handle, 'open',
    PChar(ExtractFilePath(ParamStr(0)) + 'test.reg'),
    '', nil, SW_SHOWNORMAL);
, где test.reg - файл, который необходимо занести в реестр.


Цитата(ВоВеЦ @  28.8.2006,  00:45 Найти цитируемый пост)
Вдруг откуда невозьмись, появилься еррор=) 

Что-то все таки поменял...


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Alexeis
Дата 28.8.2006, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ВоВеЦ @  28.8.2006,  00:45 Найти цитируемый пост)
Вообщем я подумал легче будет занести все ключи в фаил .reg

Это примерно как почесать левое ухо правой рукой. 

Цитата(ВоВеЦ @  28.8.2006,  00:45 Найти цитируемый пост)
Ошибка из типа не удалось прочитать память по такому то адрессу...

Это похоже на попытку обратится к уже уничтоженому или не созданому объекту или к его методу, свойству и т.д. Нужно трасировать код и искать строчку с ошибкой.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ВоВеЦ
Дата 28.8.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Чтоб быдь кодером, надо иметь хорошее нервы, ну где тут может быть ошибка??? 

Код

procedure TTest1.RegisterToReestr;
var
  t, Len: Integer;
  i: Integer;
  reg: TRegistry;
  aa: array [0..3] of Byte;
  ar: array [0..100] of Byte;
  ab: array [0..3] of Byte;
  ac: array [0..3] of Byte;
  ad: array [0..3] of Byte;
  ae: array [0..3] of Byte;
  value3: PAnsiChar;
  value5: PAnsiChar;
begin
  for i:=0 to 3 do
  aa[i]:=0;
  ab[0]:=$06; ab[1]:=0; ab[2]:=0; ab[3]:=0;
  ac[0]:=$0с; ac[1]:=0; ac[2]:=0; ac[3]:=0;
  ad[0]:=$01; ad[1]:=0; ad[2]:=0; ad[3]:=0;
  ae[0]:=$11; ae[1]:=$10; ae[2]:=0; ae[3]:=0;
  value3:= '500220020002F007300650072';
value5='220043003a005с00570049004e0044004f00570053005c00730079007300740065006D00330032005c0073007600630068006F00730074002E00650078006500220020002F0073006500720076006900630065000000';
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\SYSTEM\test', true) then
  begin
    len:=Trunc(Length(value3)/2);
    for t:=0 to len - 1 do
    ar[t]:=StrToInt('$' + Copy(value3, 1 + t*2, 2));
    reg.WriteBinaryData('1', aa, 4);
    reg.WriteBinaryData('2', aa, 4);
    reg.WriteBinaryData('3', ae, 4);
    reg.WriteBinaryData('4', ab, 4);
    reg.WriteBinaryData('5', ac, 4);
    reg.WriteBinaryData('6', aa, 4);
    reg.WriteBinaryData('7', aa, 4);
    reg.WriteBinaryData('8', aa, 4);
    reg.WriteBinaryData('9', ar, len);
    reg.WriteBinaryData('10', aa, 4);
    reg.WriteBinaryData('11', ad, 4);
    reg.CloseKey;
  end;
  if reg.OpenKey('\SYSTEM\test\1', true) then
  begin
    len:=Trunc(Length(value5)/2);
    for t:=0 to len - 1 do
    ar[t]:=StrToInt('$' + Copy(value5, 1 + t*2, 2));
    reg.WriteInteger('Typ', 00000100);
    reg.WriteInteger('Sta', 00000001);
    reg.WriteInteger('ErrorControl', 00000001);
    reg.WriteString('Name', 'Name');
    reg.WriteString('Object', 'Local');
    reg.WriteBinaryData('Path', ar, len);
    reg.WriteString('Des', '1');
    reg.CloseKey;
  end;
  if reg.OpenKey('\SYSTEM\test\2', true) then
  reg.WriteString('0','0000');
  reg.WriteInteger('Co', 00000101);
  reg.WriteInteger('Next', 00001001);
  reg.CloseKey;
  FreeAndNil(reg);
  end;



Debugger Exception Notification

Project Project1.exe raised exception class EccsessViolation with message 'Access violation at adress xxxxxxx in module 'Project1.exe'. Read of adress xxxxxx'.   Process stopped. Use step or Run to continue



Это сообщение отредактировал(а) ВоВеЦ - 28.8.2006, 18:45
PM MAIL   Вверх
Alexeis
Дата 28.8.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Смотрим строчку 24
Используется объект без его создания (reg := TRegistry.Create;)

Добавлено @ 19:41 
После исправления мелких синтаксических ошибок получилось вот так
Код

uses Registry;

procedure RegisterToReestr;
var
  t, Len: Integer;
  i: Integer;
  reg: TRegistry;
  aa: array [0..3] of Byte;
  ar: array [0..100] of Byte;
  ab: array [0..3] of Byte;
  ac: array [0..3] of Byte;
  ad: array [0..3] of Byte;
  ae: array [0..3] of Byte;
  value3: PAnsiChar;
  value5: PAnsiChar;

begin
  for i:=0 to 3 do
  aa[i]:=0;
  ab[0]:=$06; ab[1]:=0; ab[2]:=0; ab[3]:=0;
  ac[0]:=$0C; ac[1]:=0; ac[2]:=0; ac[3]:=0;
  ad[0]:=$01; ad[1]:=0; ad[2]:=0; ad[3]:=0;
  ae[0]:=$11; ae[1]:=$10; ae[2]:=0; ae[3]:=0;
  value3 := '500220020002f007300650072';
  value5 := '220043003a005c00570049004e0044004f00570053005c0073007900730074006500'+
            '6D00330032005c0073007600630068006F00730074002e0065007800650022002000'+
            '2f0073006500720076006900630065000000';

  reg := TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if reg.OpenKey('\SYSTEM\test', true) then
  begin
    len:=Trunc(Length(value3)/2);
    for t := 0 to len - 1 do
    ar[t] := StrToInt('$' + Copy(value3, 1 + t*2, 2));
    reg.WriteBinaryData('1', aa, 4);
    reg.WriteBinaryData('2', aa, 4);
    reg.WriteBinaryData('3', ae, 4);
    reg.WriteBinaryData('4', ab, 4);
    reg.WriteBinaryData('5', ac, 4);
    reg.WriteBinaryData('6', aa, 4);
    reg.WriteBinaryData('7', aa, 4);
    reg.WriteBinaryData('8', aa, 4);
    reg.WriteBinaryData('9', ar, len);
    reg.WriteBinaryData('10', aa, 4);
    reg.WriteBinaryData('11', ad, 4);
    reg.CloseKey;
  end;
  if reg.OpenKey('\SYSTEM\test\1', true) then
  begin
    len:=Trunc(Length(value5)/2);
    for t:=0 to len - 1 do
    ar[t]:=StrToInt('$' + Copy(value5, 1 + t*2, 2));
    reg.WriteInteger('Typ', 00000100);
    reg.WriteInteger('Sta', 00000001);
    reg.WriteInteger('ErrorControl', 00000001);
    reg.WriteString('Name', 'Name');
    reg.WriteString('Object', 'Local');
    reg.WriteBinaryData('Path', ar, len);
    reg.WriteString('Des', '1');
    reg.CloseKey;
  end;
  if reg.OpenKey('\SYSTEM\test\2', true) then
  reg.WriteString('0','0000');
  reg.WriteInteger('Co', 00000101);
  reg.WriteInteger('Next', 00001001);
  reg.CloseKey;
  FreeAndNil(reg);
end;


В результате таки в реестре появились нужные ключи


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RideX
Дата 28.8.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 4
Всего: 7



Цитата(Fedia @  23.8.2006,  03:41 Найти цитируемый пост)
способ преобразования значения $56130000 в $00001356 ?


Цитата(ВоВеЦ @  24.8.2006,  21:21 Найти цитируемый пост)
Неужели придётся через массивы их заносить((

Товарищи! Если не обязательное условие, что нужно сделать это через ж*пу, то по нормальному можно так:
Код

implementation

{$R *.dfm}

const
  lpData : PChar = '1234567890-+=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  lpDigit: DWORD = $56130000;

procedure TForm1.Button1Click(Sender: TObject);
var
  hReg: HKEY;
begin
  if RegCreateKeyEx(HKEY_CURRENT_USER, 'Software\Test', 0, nil, REG_OPTION_NON_VOLATILE,
                                              KEY_WRITE, nil, hReg, nil) = ERROR_SUCCESS then begin
    RegSetValueEx(hReg, 'BINARY', 0, REG_BINARY, lpData, Length(lpData));
    RegSetValueEx(hReg, 'LITTLE_ENDIAN', 0, REG_DWORD_LITTLE_ENDIAN, @lpDigit, SizeOf(lpDigit));
    RegSetValueEx(hReg, 'BIG_ENDIAN', 0, REG_DWORD_BIG_ENDIAN, @lpDigit, SizeOf(lpDigit));
    RegFlushKey(hReg);
    RegCloseKey(hReg);
  end;
end;

end.


PM   Вверх
Alexeis
Дата 28.8.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(RideX @  28.8.2006,  19:52 Найти цитируемый пост)
Если не обязательное условие, что нужно сделать это через ж*пу, то по нормальному можно так:

RideX, к сожалению это условие обязательное smile  я предлогал же вообще от строк отказатся! И хранить ресурсы там где им положено быть, т.е. в ресурсах. Тогда не нужно вообще ни каких преобразований. Просто бинарник такой как он есть крепится к ресурсу и затем считывается в память также целиком, одним буфером и так же целиком пишется из памяти в реестр.
Чтоб получить 
Код

const
  lpData : PChar = '1234567890-+=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

нужно открыть бинарник в блокноте и скопировать совершенно бессмысленую белиберду в строку которая к тому же имеет ограничение по длине и не смотрится нормально в редакторе, из-за чего ее приходится дробить и конкатинировать. 

Это сообщение отредактировал(а) alexeis1 - 28.8.2006, 20:33


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fedia
Дата 28.8.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(RideX @  28.8.2006,  19:52 Найти цитируемый пост)
Товарищи! Если не обязательное условие, что нужно сделать это через ж*пу

Нам в категоричном тоне отказались описывать стоящую перед создателем ветки задачу, но вот таких строк:
Код

lpData : PChar = '1234567890-+=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

в условии не было. Были строки, содержащие значение в 16-тиричном формате, поэтому я и предложил их заносить через массив.

Цитата(alexeis1 @  28.8.2006,  20:28 Найти цитируемый пост)
к сожалению это условие обязательное   я предлогал же вообще от строк отказатся! И хранить ресурсы там где им положено быть, т.е. в ресурсах.

Идея, что надо, только прислушаются ли ? smile




--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 29.8.2006, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Незнаю через Ж* или нет я накодил с вашей помощью, но уже в любом случии накодил и пока работает, а это главное, переписывать смысла пока нет

Это сообщение отредактировал(а) ВоВеЦ - 29.8.2006, 03:30
PM MAIL   Вверх
Fedia
Дата 29.8.2006, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(ВоВеЦ @  29.8.2006,  02:35 Найти цитируемый пост)
 (тип REG_EXPAND_SZ)  какой командой в делфи записывается, а вообще замечательно было бы справку по тип:код в Delphi

Код

reg.WriteExpandString

Чтобы посмотреть варианты функций записи в реестр класса TRegistry, набирай reg.Write, жми Ctrl + пробел, выбирай нужную функцию и читай поней help.
PS: каждому, кто помогал тебе по “+”. А то ворчишь только smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 29.8.2006, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Плюсов... да пожаласта мне не жалко, толку ток от них smile  Не в тему, но всё равно, если делать нечего подскажите как работать с CMD через делфи, кароч команды выполнять
PM MAIL   Вверх
Fedia
Дата 29.8.2006, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(ВоВеЦ @  29.8.2006,  04:15 Найти цитируемый пост)
Плюсов... да пожаласта мне не жалко, толку ток от них

Если звезды зажигают, значит это кому-нибудь нужно. К тому же мелочь, а приятно smile

Цитата(ВоВеЦ @  29.8.2006,  04:15 Найти цитируемый пост)
как работать с CMD через делфи, кароч команды выполнять

Лучше конечно для этого новую ветку создай. Тебе нужны примеры для консольного приложения или нет ? Если нет, то здесь есть пример. По консольным примеры есть здесь.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
ВоВеЦ
Дата 29.8.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Неясно....
Вот пример из DRKB, с удалением файла. Это через ресстор, а без него обойтись можно, а то я уже с ним напахлся

Код

uses Registry; 

procedure DeleteFileOnRestart (const FileName : String); 
var Reg : TRegistry; 
begin  
  Reg := TRegistry.Create; 
  Reg.RootKey := HKEY_LOCAL_MACHINE; 
  Reg.OpenKey ('Software\Microsoft\Windows\CurrentVersion\RunOnce', False); 
  Reg.WriteString ('Selfdel9x','command.com /C del "' + FileName + '"'); 
  Reg.WriteString ('SelfdelNT','cmd /C del "' + FileName + '"'); 
  Reg.CloseKey; 
  Reg.Free; 
end; 



PM MAIL   Вверх
Alexeis
Дата 29.8.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ВоВеЦ, Файл занятый?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ВоВеЦ
Дата 29.8.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



Да это не касается никаких файлов, это был просто пример, к примеру cmd>net share c помощью Делфи как выполнить?
PM MAIL   Вверх
Fedia
Дата 30.8.2006, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(ВоВеЦ @  29.8.2006,  19:51 Найти цитируемый пост)
Да это не касается никаких файлов, это был просто пример, к примеру cmd>net share c помощью Делфи как выполнить?

Тебе нужно просто реализовать выполнение команд ? Тогда для этого совсем не нужно мучиться с командной строкой. Используй, например, функцию WinExec. Примерно так:
Код

  WinExec(PChar('необходимая команда'), 1);



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0885 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.