JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

TRegistry

- системный компонент
Системные компоненты JS+
Определяет объект, предназначенный для работы с реестром Windows.

Создание объекта

regObj=new TRegistry();

Собственные свойства
Свойство Тип Описание
Access Enumset права доступа к информации (см. ниже)
LazyWrite Boolean флаг отложенной записи изменений на диск
RootKey Enum корневой ключ (см. ниже)
Только чтение
CurrentKey Number дескриптор HKEY текущего ключа
CurrentPath String путь к текущему ключу

Свойство Access
Значение Описание
KEY_ALL_ACCESS максимальный доступ к информации (комбинация ключей KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK и KEY_SET_VALUE)
KEY_CREATE_LINK права на создание символических ссылок
KEY_CREATE_SUB_KEY права на создание подключей
KEY_ENUMERATE_SUB_KEYS права на чтение имен подключей
KEY_EXECUTE права на чтение информации
KEY_NOTIFY права на уведомления об изменениях
KEY_QUERY_VALUE права на опрос значений параметров
KEY_READ права на чтение информации (комбинация ключей KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS и KEY_NOTIFY)
KEY_SET_VALUE права на установку значений параметров
KEY_WOW64_32KEY права на доступ к 32-битным ключам
KEY_WOW64_64KEY права на доступ к 64-битным ключам
KEY_WOW64_RES комбинация ключей KEY_WOW64_32KEY и KEY_WOW64_64KEY
KEY_WRITE права на запись информации (комбинация ключей KEY_SET_VALUE и KEY_CREATE_SUB_KEY)

Свойство RootKey
Значение Описание
HKEY_CURRENT_USER Содержит настройки текущего пользователя Windows. Является подразделом корневого ключа HKEY_USERS.
HKEY_USERS Содержит настройки всех активных пользователей системы.
HKEY_LOCAL_MACHINE Содержит настойки конфигурации компьютера, относящиеся ко всем пользователям.
HKEY_CLASSES_ROOT Содержит информацию о зарегистрированных типах файлов, а также об объектах COM и ActiveX. Является синонимом ключа HKEY_LOCAL_MACHINE\Software\Classes.
HKEY_CURRENT_CONFIG Содержит информацию о профиле оборудования, используемом локальным компьютером при запуске системы.
HKEY_PERFORMANCE_DATA Содержит счетчики производительности системы и подобную техническую информацию. Данные этого раздела реестра хранятся только в оперативной памяти компьютера.

Собственные методы
Метод Описание
CloseKey сохраняет и закрывает ключ реестра
CreateKey создает ключ реестра c указанным именем
DeleteKey удаляет ключ реестра c указанным именем
DeleteValue удаляет указанный параметр текущего ключа
GetDataAsString возвращает значение указанного параметра в виде строки
GetDataInfo возвращает информацию о данных указанного параметра текущего ключа
GetDataSize возвращает размер данных указанного параметра текущего ключа
GetDataType возвращает тип данных указанного параметра текущего ключа
GetKeyInfo возвращает информацию о текущем ключе
GetKeyNames возвращает список имен дочерних ключей текущего ключа
GetValueNames возвращает список имен параметров текущего ключа
HasSubKeys сообщает о наличии дочерних ключей текущего ключа
KeyExists сообщает о наличии ключа с указанным именем
LoadKey создает указанный временный ключ с использованием указанного файла
MoveKey копирует или переносит указанный ключ
OpenKey открывает ключ с указанным именем
OpenKeyReadOnly открывает ключ с указанным именем только для чтения
ReadBinaryData читает двоичные данные из указанного параметра текущего ключа
ReadBool возвращает лигическое значение указанного параметра текущего ключа
ReadDateTime возвращает значение указанного параметра текущего ключа в формате DateTime
ReadFloat возвращает вещественное значение указанного параметра текущего ключа
ReadInteger возвращает целое значение указанного параметра текущего ключа
ReadString возвращает текстовое значение указанного параметра текущего ключа
RegistryConnect устанавливает соединение с реестром сетевого компьютера
RenameValue переименовывает указанный параметр текущего ключа
ReplaceKey заменяет содержимое указанного ключа из указанного файла
RestoreKey восстанавливает содержимое указанного ключа из указанного файла
SaveKey сохраняет содержимое указанного ключа в указанном файле
UnLoadKey удаляет указанный ключ, созданный методом LoadKey
ValueExists сообщает о наличии указанного параметра текущего ключа
WriteBinaryData сохраняет двоичные данные в указанном параметре текущего ключа
WriteBool сохраняет логическое значение в указанном параметре текущего ключа
WriteDateTime сохраняет значение типа DateTime в указанном параметре текущего ключа
WriteExpandString сохраняет переменную окружения в указанном параметре текущего ключа
WriteFloat сохраняет вещественное значение в указанном параметре текущего ключа
WriteInteger сохраняет целое значение в указанном параметре текущего ключа
WriteString сохраняет текстовое значение в указанном параметре текущего ключа

Стандартные методы

Пример (JS+)
var sel_Itm=0;

// Главная форма
frm=new TForm();
frm.Caption="JS+ - системный компонент TRegistry";
frm.Width =800;
frm.Height=600;

// Строка состояния из двух сегментов
stb=new TStatusBar(frm);
stb.SimplePanel=false;
stp=new TStatusPanel(stb);
stp.Text=" Название ключа";
stp=new TStatusPanel(stb);
stp.Alignment=taCenter;
stp.Text="Последнее изменение";
stp.Width=frm.TextWidth(stp.Text)+20;
stb.Panels[0].Width=stb.ClientWidth-stp.Width;

// Внешняя панель
pnl=new TPanel(frm);
pnl.SetBounds(10,10,frm.ClientWidth-20,stb.Top-20);

// ListView
lsv=new TListView(pnl);
lsv.BorderStyle=bsSingle;
lsv.ViewStyle=vsReport;
lsv.ColumnClick=false;
lsv.Align=alRight;
lsv.Width=pnl.ClientWidth-250;
lsv.OnDblClick=lsv_DblClick;

for (i=w=0;i<3;i++) {
  lsc=new TListColumn(lsv);
  switch (i) {
    case 0: lsc.Caption=" Имя ";
            w+=(lsc.Width=180);
            break;

    case 1: lsc.Caption=" Тип ";
            w+=(lsc.Width=lsv.TextWidth("UNKNOWN")+15);
            break;

    case 2: lsc.Caption=" Значение ";
            lsc.Width=lsv.ClientWidth-w;
  }
}

// Разделитель
spl=new TSplitter(pnl);
spl.Align=alRight;
spl.Width=5;
spl.MinSize=pnl.ClientWidth-lsv.Width-spl.Width;

// Outline
otl=new TOutline(pnl);
otl.BorderStyle=bsSingle;
otl.Align=alClient;
otl.OnExpand=otl_Expand;
otl.OnClick=otl_Click;

// HKEY_CURRENT_USER
otn=new TOutlineNode(otl);
otn.numTag=eval(otn.Text="HKEY_CURRENT_USER");
Hand_Key(otn,false);

// HKEY_LOCAL_MACHINE
otn=new TOutlineNode(otl);
otn.numTag=eval(otn.Text="HKEY_LOCAL_MACHINE");
Hand_Key(otn,false);

frm.ShowModal();

function Hand_Key(Node,Recurse)
{
  var i,stl,reg,otn,stp_Str,key_Str=otl.ItemSeparator;
  var stp=stb.Panels[0];

  if (Node.HasItems) {
    if (Recurse==true) {
      stp_Str=stp.Text;
      for (i=Node.getFirstChild();i>=0;i=Node.getNextChild(i)) {
        stp.Text=" "+otl.Items[i].FullPath;
        Hand_Key(otl.Items[i],false);
      }
      stp.Text=stp_Str;
    }
    return;
  }

  if (Node.Level>1) {
    key_Str+=Node.FullPath.
    substr(Node.FullPath.indexOf(otl.ItemSeparator)+1);
    if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
      key_Str=key_Str.substr(0,i);
  }

  reg=new TRegistry();
  reg.RootKey=Node.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    return;
  }

  reg.GetKeyNames(stl=new TStrings());
  for (i=0;i<stl.Count;i++) {
    if (stl.Strings[i]=="")
      continue;
    otn=new TOutlineNode(Node);
    otn.Text=stl.Strings[i];
    otn.numTag=Node.numTag;
  }
  stl.Delete();

  reg.Delete();
}

// Обработчик события OnExpand
function otl_Expand(otl,index)
{
  Hand_Key(otl.Items[index],true);
}

// Обработчик события OnClick/Outline
function otl_Click(otl)
{
  var i,j,k,d,reg,stl,lvi,otn,stl_Str,key_Str,type_Str,val_Str;
  var bin_Lst,rki=new TRegKeyInfo();

  if (sel_Itm==otl.SelectedItem)
    return;
  otn=otl.Items[sel_Itm=otl.SelectedItem];

  lsv.Clear();

  key_Str=otl.ItemSeparator+otn.FullPath.
  substr(otn.FullPath.indexOf(otl.ItemSeparator)+1);
  if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
    key_Str=key_Str.substr(0,i);

  reg=new TRegistry();
  reg.RootKey=otn.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    return;
  }

  stb.Panels[0].Text=" "+otn.FullPath;
  stb.Panels[1].Text="";
  if (reg.GetKeyInfo(rki)==true) {
    d=new Date(rki.FileTime);
    stb.Panels[1].Text=d.toLocaleDateString();
    d.Delete();
  }

  stl=new TStrings();
  stl.Sorted=true;
  reg.GetValueNames(stl);
  for (i=0;i<stl.Count;i++) {
    if ((stl_Str=stl.Strings[i])=="")
      continue;

    type_Str=val_Str="";

    switch (reg.getDataType(stl_Str)) {
      case rdString :
      case rdExpandString: type_Str="STRING";
                           val_Str=reg.ReadString(stl_Str);
                           break;

      case rdInteger : type_Str="NUMBER";
                           j=reg.ReadInteger(stl_Str);
                           val_Str="0x"+j.toStringEx(16,8).toUpperCase();
                           break;

      case rdBinary : type_Str="BINARY";
                           stb.Panels[0].Text+=" 3";
                           if ((j=reg.GetDataSize(stl_Str))<=0)
                             break;
                           stb.Panels[0].Text+=" 1";
                           bin_Lst=new Array(j);
                           k=reg.ReadBinaryData(stl_Str,bin_Lst,j);
                           stb.Panels[0].Text+=" 2";
                           for (j=0;(j<k) && (j<100);j++)
                             if (bin_Lst[j]!=undefined)
                               val_Str+=" "+bin_Lst[j].toStringEx(16,2).toUpperCase();
                           stb.Panels[0].Text+=" 3";
                           if ((j==100) && (k>j))
                             val_Str+="...";
                           stb.Panels[0].Text+=" 4";
                           val_Str=val_Str.trim();
                           stb.Panels[0].Text+=" 5";
                           bin_Lst.Delete();
                           stb.Panels[0].Text+=" 6";
                           break;

                  default: type_Str="UNKNOWN";
    }

    lvi=new TListItem(lsv);
    lvi.Caption=stl_Str;
    lvi.SubItems.Add(type_Str);
    lvi.SubItems.Add(val_Str);
  }

  stl.Delete();
  reg.Delete();
}

// Обработчик события OnDblClick
function lsv_DblClick(lsv)
{
  var i,j,reg,lvi,otn,frp,lbe,lbl,mem,btn,key_Str,bin_Lst;
  var prm_Ttl,prm_Val="";

  if (((lvi=lsv.Selected)==null) || ((i=otl.SelectedItem)<0))
    return;
  otn=otl.Items[i];
  prm_Ttl=lvi.Caption;

  // Форма параметра
  frp=new TForm();
  frp.Caption=" Просмотр параметра";
  frp.Width=500;
  frp.KeyPreview=true;
  frp.OnKeyPress=frp_KeyPress;

  // Метка параметра
  lbe=new TLabeledEdit(frp);
  lbe.EditLabel.Caption="Параметр: ";
  lbe.BorderStyle=bsSingle;
  lbe.Left=10;
  lbe.Top =10+lbe.EditLabel.Height;
  lbe.Width=frp.ClientWidth-lbe.Left*2;
  lbe.ReadOnly=true;
  lbe.Text=prm_Ttl;

  // Метка значения
  lbl=new TLabel(frp);
  lbl.Caption="Значение: ";
  lbl.Left=lbe.Left;
  lbl.Top =lbe.Top+lbe.Height+10;

  // Текстовое поле значения
  mem=new TMemo(frp);
  mem.BorderStyle=bsSingle;
  mem.SetBounds(lbe.Left,lbl.Top+lbl.Height+5,lbe.Width,200);
  mem.ReadOnly=true;

  key_Str=otl.ItemSeparator+otn.FullPath.
  substr(otn.FullPath.indexOf(otl.ItemSeparator)+1);
  if (key_Str.substr(i=key_Str.length-1)==otl.ItemSeparator)
    key_Str=key_Str.substr(0,i);

  reg=new TRegistry();
  reg.RootKey=otn.numTag;
  if (!reg.OpenKeyReadOnly(key_Str)) {
    reg.Delete();
    frp.Delete();
    return;
  }

  switch (reg.getDataType(prm_Ttl)) {
    case rdString :
    case rdExpandString: prm_Val=reg.readString(prm_Ttl);
                         break;

    case rdInteger : i=reg.readInteger(prm_Ttl);
                         prm_Val=i.toStringEx(16,8).toUpperCase();
                         break;

    case rdBinary : if ((i=reg.GetDataSize(prm_Ttl))==0)
                           break;
                         bin_Lst=new Array(i);
                         j=reg.ReadBinaryData(prm_Ttl,bin_Lst,i);
                         for (i=0;i<j;i++)
                           if (bin_Lst[i]!=undefined)
                             prm_Val+=bin_Lst[i].toStringEx(16,2).toUpperCase();
                         bin_Lst.Delete();
                         break;

                default: reg.Delete();
                         frp.Delete();
                         return;
  }
  mem.Text=prm_Val;
  reg.Delete();

  // Кнопка
  btn=new TButton(frp);
  btn.Caption="ОК";
  btn.Left=lbe.Left+lbe.Width-btn.Width;
  btn.Top =mem.Top+mem.Height+10;
  btn.Hint="Закрыть окно";
  btn.ShowHint=true;
  btn.OnClick=btn_Click;

  frp.ClientHeight=btn.Top+btn.Height+10;

  mem.SetFocus();
  frp.ShowModal();
}

// Обработчик события OnKeyPress
function frp_KeyPress(frp,Key)
{
  switch (Key.Value) {
    case VK_ENTER :
    case VK_ESCAPE: frp.Close();
  }
}

// Обработчик события OnClick/Button
function btn_Click(btn)
{
  btn.Parent.Close();
}
Совместимость
C++ Builder/Delphi
См. также
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Component/System/TRegistry.htm
© 2024,