Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 669

•  TDictionary Custom Sort  5 800

•  Fast Watermark Sources  5 603

•  3D Designer  8 215

•  Sik Screen Capture  5 913

•  Patch Maker  6 388

•  Айболит (remote control)  6 378

•  ListBox Drag & Drop  5 237

•  Доска для игры Реверси  94 551

•  Графические эффекты  6 570

•  Рисование по маске  5 643

•  Перетаскивание изображений  4 759

•  Canvas Drawing  5 135

•  Рисование Луны  4 863

•  Поворот изображения  4 410

•  Рисование стержней  3 116

•  Paint on Shape  2 360

•  Генератор кроссвордов  3 228

•  Головоломка Paletto  2 551

•  Теорема Монжа об окружностях  3 328

•  Пазл Numbrix  2 200

•  Заборы и коммивояжеры  2 849

•  Игра HIP  1 820

•  Игра Go (Го)  1 740

•  Симулятор лифта  2 072

•  Программа укладки плитки  1 798

•  Генератор лабиринта  2 240

•  Проверка числового ввода  1 924

•  HEX View  2 225

•  Физический маятник  1 911

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Доступ к реестру средствами API




- Как три программиста могут организовать бизнес?
- Один пишет вирусы, а другой антивирусы.
- А третий?
- Операционные системы, под которыми все это работает.

Создать подраздел в реестре:


RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;

  • Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все.
  • SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается.
  • В любом случае при успешном вызове Result содержит Handle на раздел.
  • Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.

Открыть подраздел:


RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;

  • Раздел Key
  • Подраздел SubKey
  • Возвращает Handle на подраздел в переменной Result. Если раздела с таким именем нет, то он не создается.
  • Возврат - код ошибки или ERROR_SUCCESS, если успешно.

Закрывает раздел:


RegCloseKey(Key: HKey): Longint;

  • Закрывает раздел, на который ссылается Key.
  • Возврат - код ошибки или ERROR_SUCCESS, если успешно.

Удалить подраздел:


RegDeleteKey(Key: HKey; SubKey: PChar): Longint;

  • Удалить подраздел Key\SubKey.
  • Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

Получить имена всех подразделов раздела Key:


RegEnumKey(Key:HKey; index: Longint; Buffer: PChar; cb: Longint): Longint; 

  • Key - Handle на открытый или созданный раздел
  • Buffer - указатель на буфер
  • cb - размер буфера
  • index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой

Возвращает текстовую строку, связанную с ключом Key\SubKey:


RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;

  • Ключ\подключ Key\SubKey.
  • Value - буфер для строки
  • cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
  • Возврат - код ошибки.

Задать новое значение ключу Key\SubKey:


RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;

  • Ключ\подключ Key\SubKey.
  • ValType - тип задаваемой переменной,
  • Value - буфер для переменной
  • cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ.
  • Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

Удаляет значение lpValueName находящееся в ключе hKey:


RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);

  • hKey - ключ. hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.
  • lpValueName - значение, находящееся в ключе hKey.
  • Возвращает ERROR_SUCCESS если успешно.

Выдает список значений у ключа hKey:


LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);

  • hKey - ключ.
  • dwIndex - этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey (т.е. можно использовать в цикле),
  • lpValueName - буфер для названия значения
  • lpcbValueName - размер lpValueName
  • lpReserved должно быть всегда 0
  • lpType - буфер для названия типа (int)
  • lpData - буфер для данных
  • lpcbData-размер для lpData

Примечание:
При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName.


lpcbValueName = sizeof(lpValueName)

Примеры:


{ Создаем список всех подразделов указанного раздела }
procedure TForm1.Button1Click(Sender: TObject);
var
  MyKey: HKey; { Handle для работы с разделом }
  Buffer: array[0 .. 1000] of char; { Буфер }
  Err, { Код ошибки }
  index: longint; { Индекс подраздела }
begin
  Err := RegOpenKey(HKEY_CLASSES_ROOT, 'DelphiUnit', MyKey); { Открыли раздел }
  if Err <> ERROR_SUCCESS then
  begin
    MessageDlg('Нет такого раздела !!', mtError, [mbOk], 0);
    exit;
  end;
  index := 0;
  {Определили имя первого подраздела }
  Err := RegEnumKey(MyKey, index, Buffer, Sizeof(Buffer));
  while err = ERROR_SUCCESS do { Цикл, пока есть подразделы }
  begin
    memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список }
    inc(index); { Увеличим номер подраздела }
    Err := RegEnumKey(MyKey, index, Buffer, Sizeof(Buffer)); { Запрос }
  end;
  RegCloseKey(MyKey); { Закрыли подраздел }
end;





Похожие по теме исходники

GDI+ API

Snake & MiniSaper WinApi

Калькулятор на WinApi

Menu Icon WinApi

 

Octapion (шашки)

Error Vodes Win API

Посторонние окна WinAPI

Windows API (SendMessage)

 

API Hook




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте