|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Добавление значений реестра |
|
Delphi - Добавление значений реестра
|
Новый участник Сообщения: 7 |
Профиль | Отправить 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 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Откройте для себя JEDI Code Library - http://wiki.delphi-jedi.org/wiki/JEDI_Code_Library и решите все проблемы сразу!
|
------- Отправлено: 06:31, 17-02-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать opel431, ничего не понял в этой библиотеке
|
Отправлено: 11:05, 17-02-2014 | #3 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Karbid87:
Для работы с реестром необходимо в 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
|
Профиль | Отправить PM | Цитировать opel431, не устанавливается вообще.
не могли бы вы написать мне точные строки. там всё на английском и я не пойму. вы уж меня извините |
|
Последний раз редактировалось Karbid87, 17-02-2014 в 11:56. Причина: добавление сведений Отправлено: 11:38, 17-02-2014 | #5 |
Ветеран Сообщения: 1803
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать opel431, так всё таки установил с вашей помощью.
Теперь при компиляции стал ругаться: Прошу вас напишите мне листинг программы с помощью JclRegistry, который у меня в первом посте. И добавьте туда недостающие строки с какими-либо параметрами и значениями. |
Отправлено: 14:17, 17-02-2014 | #7 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Karbid87:
Цитата Karbid87:
Вариаций много, для общего понимания достаточно. Код с "коленки", так что, проверяйте. 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие БД - Добавление новых значений связанных полей в 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 |
|