Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Добавление значений реестра

Ответить
Настройки темы
Delphi - Добавление значений реестра

Новый участник


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


Конфигурация

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


Здравствуйте. Прошу помощи. Я пытаюсь добавить значения в реестр, но не получается.
Вот что есть :
Код: Выделить весь код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var
// Переменная для работы с реестром
Reg: TRegistry;
begin
// Инициализация переменной реестра
Reg := TRegIniFile.Create();
// Выбираем корневой каталог
Reg.RootKey := HKEY_LOCAL_MACHINE;
// Открываем разделы
Reg.OpenKey('SOFTWARE\Programma\Razdel', True);
// Записываем значение
// Ниже строковые
Reg.WriteString('DataFolder', 'C:\\ProgramData\\Programma\\Razdel');
Reg.WriteString('ProgramFolder', 'C:\\Program Files\\Programma\\Razdel');
Reg.WriteString('SetupFolder', 'C:\\Program Files\\Programma\\Razdel\\setup');
Reg.WriteString('SetupLog', 'C:\\ProgramData\\Programma\\Razdel\\Log.log');
Reg.WriteString('Version', '1.0');
// Параметр DWORD (32 бита)
Reg.WriteExpandString('SetupVersion', '000000a1');

// Тут надо мультистроковый (REG_MULTI_SZ)
// Тут надо двоичный параметр (REG_BINARY)

// Закрываем ключ
Reg.CloseKey;
// Освобождаем память
Reg.Free;
end;
end.
Еще на форме будет несколько кнопок. Расположены и действовать они будут следующим образом:
Button1 - для Windows 7 x64
Button2 - для Windows 7 x86
Button3 - для Windows 8 x64
Button4 - для Windows 8 x64
Button5 - для Windows XP

Для каждой кнопки свои значения. Сейчас в коде прописаны действия для Button1. Необходимо еще написать несколько процедур для проверки Windows и разрядности. И по этим результатам ненужные кнопки были бы неактивны, но видимы.
Был бы очень благодарен за помощь.

Отправлено: 23:00, 16-02-2014

 

Аватара для opel431

Ветеран


Contributor


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

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


Откройте для себя JEDI Code Library - http://wiki.delphi-jedi.org/wiki/JEDI_Code_Library и решите все проблемы сразу!

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:31, 17-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


opel431, ничего не понял в этой библиотеке

Отправлено: 11:05, 17-02-2014 | #3


Аватара для opel431

Ветеран


Contributor


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

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


Цитата Karbid87:
ничего не понял в этой библиотеке »
Что Вы не поняли? Установите Jcl + Jcl-API (вполне достаточно для комфортной работы), или весь пакет (Jcl+Jvcl).
Для работы с реестром необходимо в uses прописать JclRegistry и вызывать нужные Вам функции:
RegWriteBinary, RegWriteMultiString!

Для работы с информацией о версии и архитектуре, аналогично - JclSysInfo:
IsWin7, IsWindows64 - возвратят Вам True (or False), если не Seven и не x64. Затем уж что хотите (Button1.Enabled = IsWin7 or not IsWindows64 или через блок begin...end т.д.).
GetWindowsVersionString - вернет Вам в строку все что можно.

Там прекрасный help и хоть и куцые но есть примеры!

И проверяйте открытие ключа, а если не открыли? - if (Reg.OpenKey....) then ведь для этого функция и возвращает логику завершения (Boolean).
Лучше весь блок делать в try..finally..end;

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 17-02-2014 в 11:40.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:20, 17-02-2014 | #4


Новый участник


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

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


opel431, не устанавливается вообще.
не могли бы вы написать мне точные строки. там всё на английском и я не пойму. вы уж меня извините

Последний раз редактировалось Karbid87, 17-02-2014 в 11:56. Причина: добавление сведений


Отправлено: 11:38, 17-02-2014 | #5


Аватара для opel431

Ветеран


Contributor


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

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


Цитата Karbid87:
не устанавливается вообще. »
Какие извинения!
Скачиваете, распаковываете в папку (например JEDI), из папки запускаете Install.bat, переходите на вкладку согласия с лицензией, внизу, ставите чек - I agree with the terms of the... ( "Я согласен с условиями лицензии MLP 1.1 "), на следующей вкладке Delphi или RADStudio (ваша версия Delphi) выбираете путь к пакетам BPL (C:\Users\Public\Documents\RAD Studio\8.0\Bpl) и путь к DCP (C:\Users\Public\Documents\RAD Studio\8.0\Bpl). Жмете кнопку Install.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:40, 17-02-2014 | #6


Новый участник


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

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


opel431, так всё таки установил с вашей помощью.
Теперь при компиляции стал ругаться:
Код: Выделить весь код
[Pascal Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System.pas' or binary equivalents (.dcu)
Прошу вас напишите мне листинг программы с помощью JclRegistry, который у меня в первом посте. И добавьте туда недостающие строки с какими-либо параметрами и значениями.

Отправлено: 14:17, 17-02-2014 | #7


Аватара для opel431

Ветеран


Contributor


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

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


Цитата Karbid87:
Теперь при компиляции стал ругаться: »
Переменные среды проекта (проверьте соответствие путей к папкам) смотрите в ->Tools->Options->Environmental Variables!
Цитата Karbid87:
Прошу вас напишите мне листинг программы с помощью JclRegistry »
Сделаю, но может вечером - я, с планшета.


Вариаций много, для общего понимания достаточно. Код с "коленки", так что, проверяйте.

uses JclRegistry, JclSysInfo, JclStrings;

....

procedure TForm1.FormCreate(Sender: TObject);
begin
if IsWin7 then
...;

if IsWindows64 then
...;
end;

......

var
RootKey: HKEY;
PathKEY:String;
begin
RootKey := HKEY_LOCAL_MACHINE;
SubKey := 'SOFTWARE\Programma\Razdel';

if not RegKeyExists(RootKey, PathKEY) then
ShowMessage('.....! ')
else
begin
if RegValueExists(RootKey, SubKey, 'DataFolder') then // если хотите проверять наличие параметра
RegWriteString(RootKey, SubKey, 'DataFolder', 'C:\\ProgramData\\Programma\\Razdel'); // обычная строка с завершающим нулем.

if RegValueExists(RootKey, SubKey, 'SetupVersion') then
RegWriteDWORD(RootKey, SubKey, 'SetupVersion', 123); // 32-разрядное число (смотрите как записать, то-ли десятичное, то-ли как шестнадцатиричное. Есть перегруженная версия с доп. параметрами)

if RegValueExists(RootKey, SubKey, '.....') then
RegWriteInteger(RootKey, SubKey, '.....', 1); // целое

if RegValueExists(RootKey, SubKey, '.....') then
RegWriteString(RootKey, SubKey, '.....', REG_EXPAND_SZ, '%SystemRoot%\System32\shell32.dll,50'); // ссылки на переменные среды


// ?* смотрите функцию StringsToMultiSz в Help!
if RegValueExists(RootKey, SubKey, '.....') then
RegWriteString(RootKey, SubKey, '.....', REG_MULTI_SZ, (?*)); // Последовательность строки с нулевым символом, завершающийся пустой строкой
end;
end;

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 19-02-2014 в 08:59.


Отправлено: 15:14, 17-02-2014 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Добавление значений реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - Добавление новых значений связанных полей в Access Доярка Программирование и базы данных 4 21-01-2013 13:48
CMD/BAT - Вывод значений определенного ключа реестра на экран VoinLuny Скриптовые языки администрирования Windows 30 15-06-2012 00:02
VBS/WSH/JS - Экспорт значений реестра в общий текстовый файл + добавление доп данных в этот файл fedko Скриптовые языки администрирования Windows 0 17-06-2010 11:52
Служебные - Аддон добавление твиков реестра Bolk Наборы обновлений для Windows XP/2003/Windows 7 11 28-02-2008 17:51
Добавление ветвей реестра Shaytan Microsoft Windows 95/98/Me (архив) 3 12-11-2003 16:51




 
Переход