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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И снова ключи реестра 
:(
    Опции темы
SoWa
Дата 28.4.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Помогите пожалуйста с созданием ключей в реестре:
Например:
"откройте раздел
HKEY_CURRENT_USER\ Software\Microsoft\Windows\CurrentVersion\ Policies\Explоrer
и создайте параметр NoSetFolders типа DWORD со значением, равным 1. "
Вот и надо путем Дельфи СОЗДАТЬ параметр типа DWORD с именем "ИМЯ" в разделе "РАЗДЕЛ"
и со значением "ЗНАЧЕНИЕ"
Аналогично, надо его удалять и изменять...


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
z-END
Дата 28.4.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



DRKB !!!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
SPrograMMer
Дата 28.4.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

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



Код
Uses Registry;

Var
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_CURRENT_USER;
  Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\ Policies\Explоrer',False); // c True будет создавать если его нет
  Reg.CreateKey(...);
  Reg.Deletekey(...);
  Reg.ReadInteger(ИМЯ);
  Reg.WrteString(ИМЯ, ЗНАЧЕНИЕ);
  и т д
  REg.Free
End;



--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Негодяй
Дата 28.4.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Порядочный
***


Профиль
Группа: Завсегдатай
Сообщений: 1513
Регистрация: 13.2.2005
Где: Kazakhstan, Almat y

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



Читай smile

Реестр - один из важнейших элементов 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
Цитата(SoWa @ 28.4.2005, 14:26)
Например:
...
и создайте параметр NoSetFolders типа DWORD со значением, равным 1.

это может будет ключ типа Boolean, либо Integer
Добавлено @ 15:05
от куда взято ссылка не пашет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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