![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 2 Всего: 74 |
Помогите пожалуйста с созданием ключей в реестре:
Например: "откройте раздел HKEY_CURRENT_USER\ Software\Microsoft\Windows\CurrentVersion\ Policies\Explоrer и создайте параметр NoSetFolders типа DWORD со значением, равным 1. " Вот и надо путем Дельфи СОЗДАТЬ параметр типа DWORD с именем "ИМЯ" в разделе "РАЗДЕЛ" и со значением "ЗНАЧЕНИЕ" Аналогично, надо его удалять и изменять... -------------------- Всем добра |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
DRKB !!!
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| SPrograMMer |
|
|||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: 2 Всего: 6 |
-------------------- животное = зверь законченный гентушник |
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
Читай
Реестр - один из важнейших элементов Windows. Там можно найти множество настроек Windows и других программ. Сейчас программистов больше привлекает хранение опций своих программ в реестре нежели в различных ini файлах. Приемущество очевидно : ini файл можно случайно изменить, удалить, или повредить какими-либо некоректными действиями; С записями в реестре это сделать гораздо сложнее... Реестр открывает новые возможности в программировании, в управлении "чужими" программами и других действиях. К примеру в реестре можно прописать программы, которые будут загружаться при старте Windows, но их не будет ни в :"Автозагрузке" ни в Autoexec.bat..., а в реестре их довольно трудно найти даже опытному программисту. Так что - дерзайте. Я уверен, что знание ключевых моментов в этой области значительно облегчит Ваш труд... Работа с реестром разделяется на несколько этапов. 1. Вы должны объявить подключение модуля Registry в Uses. 2. Необходимо создать переменную типа TRegistry и инициализировать ее. 3. Собственно работа с реестром. 4. Уничтожение переменной. Uses ..., Registry,... Var Reg:Tregistry; // Создание переменной Reg begin Reg:=TRegistry.create; // Инициализирование этой же переменной //------------ Программа------------ Reg.Destroy; end; Пункты 1, 2, 4 - ясны. Поэтому оставшаяся часть статьй будет посвящена именно 3-му пункту - работе с реестром. Самое первое дело, после выполнения второго пункта, это определение корневого ключа реестра. Он определяется с помощью свойства RootKey переменной Reg. Корневые ключи реестра: HKEY_CLASSES_ROOT (по умолчанию) HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_CURRENT_CONFIG HKEY_DYN_DATA Следующие свойства: CurrentPath: String; Определяет путь к текущему ключу. CurrentKey: HKEY; Определяет открытый в настоящее время ключ реестра. Procedure CloseKey; Закрывает открытый в данный момент ключ реестра и записывает в реестра все изменения (если таковые были), произведенные в данном ключе. Вызов CloseKey несколько раз или при отсутствии открытого ключа не вызывает ошибки. function CreateKey(const Key: String): Boolean; Создает ключ Key (где Key - путь с разделителями "\", например Software\Test. Имя корневого ключа в пути не указывается !! Он задается через property RootKey. Возвращает True при успешном создании function DeleteKey(const Key: String): Boolean; Удалить ключ Key (аналогично CreateKey, только с точностью до наоборот) function DeleteValue(const Name: String): Boolean; Удалить параметр с именем Name текущего ключа. Очевидно, что предварительно необходимо открыть этот ключ function GetDataInfo(const ValueName: String; var Value: TRegDataInfo): Boolean; Получить информацию о параметре ValueName текущего ключа - его тип и размер. При написании программ применяется редко, т.к. программист и сам знает, какого типа его параметры. А вот при написании разного рода утилит для просмотра и редактирования реестра он просто незаменим. Типы: TRegDataType = (rdUnknown, rdString, rdExpandString, rdInteger, rdBinary); TRegDataInfo = record RegData: TRegDataType; // Тип ключа DataSize: Integer; // Размер данных end; Данная функция возвращает комплексную информацию о параметре, для получения данных о размере или типе можно применять GetDataSize и GetDataType function GetDataSize(const ValueName: String): Integer; Получить размер параметра ValueName текущего ключа в байтах. Если - при ошибке. Для строкового параметра размер учитывает в размере и один байт для #0, завершающего строку . function GetDataType(const ValueName: String): TRegDataType; Получить тип текущего ключа. procedure GetKeyNames(Strings: TStrings); Заполняет указанный Strings списком под ключей текущего ключа. Применяется для построения программ просмотра реестра или в том случае, когда количество подключей неизвестно. Например, одна из моих программ создает в одном из ключей несколько подключей с одинаковой структурой, но их количество заранее неизвестно (настройки пользователей). procedure GetValueNames(Strings: TStrings); Заполняет указанный Strings списком параметров текущего ключа. function HasSubKeys: Boolean; Возвращает True, если текущий ключ имеет подключи и False в противном случае function KeyExists(const Key: String): Boolean; Возвращает True, если ключ Key существует. Полезная функция, рекомендуется применять ее перед открытием ключей. function LoadKey(const Key, FileName: String): Boolean; Создает ключ Key и загружает в него данные из файла с именем FileName. Полезно при написании инсталляторов. Возвращает True при успешном выполнении. procedure MoveKey(const OldName, NewName: String; Delete: Boolean); Копировать или переименовать ключ. В любом случае копирует все из ключа OldName в NewName (со всеми подключами). После копирования анализируется Delete, и если он true, то ключ OldName уничтожается со всем содержимым. Лично у меня не было потребности в применении данной функции - она не требуется программ и предначначена для построения редакторов реестра function OpenKey(const Key: String; CanCreate: Boolean): Boolean; Очень важная функция - с нее начинается работа с ключом. Key - имя открываемого ключа. Если ключ с указанным именем не найден и CanCreate=true, то производится попытка создать ключ с указанным именем. Возвращает признак успешности открытия ключа, его обязательно следует анализировать. function OpenKeyReadOnly(const Key: String): Boolean; Тоже, что и OpenKey, но открытие идет в режиме "только чтение" Внимание !!!!!! Все функции типа Read** при вызове генерируют исключение, если параметр не найден. Это исключение следует отлавливать при помощи try except или проверять наличие параметра при помощи ValueExists перед его чтением. function ReadBinaryData(const Name: String; var Buffer; BufSize: Integer): Integer; Читает значение параметра с именем Name текущего (открытого) ключа в Buffer размером BufSize. function ReadBool(const Name: String): Boolean; Считать значение параметра с именем Name типа Boolean function ReadDate(const Name: String): TDateTime; Считать значение параметра с именем Name типа дата function ReadDateTime(const Name: String): TDateTime; Считать значение параметра с именем Name типа дата-время function ReadTime(const Name: String): TDateTime; Считать значение параметра с именем Name типа время function ReadFloat(const Name: String): Double; Считать значение параметра с именем Name типа Double function ReadInteger(const Name: String): Integer; Считать значение параметра с именем Name типа Integer function ReadString(const Name: String): String; Считать значение параметра с именем Name типа String function RegistryConnect(const UNCName: String): Boolean; Подключить сетевой реестр машины UNCName (формат: \\сетевое имя машины). Перед вызовом этой функции программа должна установить RootKey в значение HKEY_USERS или HKEY_LOCAL_MACHINE. При успешном соединении и открытии удаленного реестра его RootKey ставится в заданное перед вызовам значение свойства RootKey и возвращается True. procedure RenameValue(const OldName, NewName: String); Переименовать параметр текущего ключа с именем OldName в NewName. function ReplaceKey(const Key, FileName, BackUpFileName: String): Boolean; Заменить место хранения ключа. Обычно ключи хранятся в базовом файле реестра, нот вызовом данной функции можно задать в качестве места хранения ключа отдельный файл с именем FileName (его следует предварительно создать при помощи savekey). При каждой перезагрузке компьютера ключ Key будет загружаться значениями, считываемыми из файла этого файла FileName,т.е. по сути мы имеет дело с ульем (hive) в терминологии Windows NT. Определение: Улей - часть реестра (его ячейка). Улей является дискретным набором ключей, подключей и параметров, который находится вверху иерархии реестра. Улей поддерживается одиночным файлом. BackUpFileName - имя резервной копии, которая создается перед перезаписью данных ключа Key. Если кого интересуют подробности, то следует почитать книгу по реестру Windows NT, главы типа "Ульи и файлы" и "Целостность и восстановление улья в реестре". При разработке практических приложений я не разу не применял этот вызов. function RestoreKey(const Key, FileName: String): Boolean; Открывает указанный ключ и перезаписывает его данные и подключи данными из файла FileName. function SaveKey(const Key, FileName: String): Boolean; Сохраняет все параметры указанного ключа и всех его подключей в файле FileName. Может применяться совместно с LoadKey и RestoreKey для создания и восстановления ключей реестра. function UnLoadKey(const Key: String): Boolean; Удалить улей Key из реестра. function ValueExists(const Name: string): Boolean; Проверить, существует ли в текущем ключе параметр с именем Name. Весьма полезная функция, т.к. чтение несуществующего параметра приводит к исключительной ситуации procedure WriteBinaryData(const Name: String; var Buffer; BufSize: Integer); Записать в параметр с именем Name данные из буфера Buffer размером BufSize. Если параметр существовал, то он будет перезаписан. Если параметр не существовал, то он будет создан. Это справедливо и для всех последующих процедур записи параметров Остальные процедуры записи - WriteBool, WriteCurrency,WriteDate,WriteDateTime, WriteExpandString, WriteFloat, WriteInteger, WriteString, WriteTime имеют по два параметра - (имя ключа, значение ключа). Ну вот, класс описали, теперь приведем парочку примеров. Пример - запись. var REG : TRegistry; begin REG := TRegistry.Create; REG.RootKey:=HKEY_LOCAL_MACHINE; REG.OpenKey('Software\Test',true); REG.WriteBool('Test1',true); REG.WriteInteger('Test2',12); REG.CloseKey; REG.Destroy; end; Данный пример создает (если его не было) или открывает ключ реестра HKEY_LOCAL_MACHINE\Software\Test и записывает в него два параметра типа Boolean и Integer. Добавлено @ 15:04
это может будет ключ типа Boolean, либо Integer Добавлено @ 15:05 от куда взято ссылка не пашет |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |