Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Win32::Registry, Базовые знания работы с реестром Windows 
V
    Опции темы
Perl_sapiens
  Дата 23.2.2008, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Открыть ключ:
    
Код

$obj_reg->Open($reg,$hkey);

где
    $obj_reg - имя root ключа:
        $HKEY_LOCAL_MACHINE
        $HKEY_USERS
        $HKEY_CURRENT_USER
        $HKEY_CLASSES_ROOT
        $HKEY_CURRENT_CONFIG
    $reg - путь к ключу (прим. "Software\\Microsoft")
    $hkey - хендел ключа, в который пишется результат. После использования его надо закрывать:
        
Код

$hkey->close();

Пример:
Код

use Win32::Registry;
my $Register = "Software\\MICROSOFT";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->Close();



Список под-ключей:
    
Код

$hkey->GetKeys(\@Key_list);

где
    $hkey - хендел открытого ключа
    @Key_list - список, в который запишется результат
Пример
Код

use Win32::Registry;
my $Register = "Software\\Netscape";
my ($hkey, @key_list, $key);

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->GetKeys(\@key_list);
print "$Register keys\n";
foreach $key (@key_list)
    {
    print "$key\n";
    }
$hkey->Close();



Список Имя-Значение ключа:
    
Код

$hkey->GetValues(\%values);

где
    $hkey - хендел открытого ключа
    %values - хеш вида (Имя, Тип, Значение). Для нормального доступа к этим значениям делается следующее:
Код

        $RegKey    = $values{$Name}->[0]; #Имя значения
        $RegType    = $values{$Name}->[1]; #Тип значения
        $RegValue    = $values{$Name}->[2]; #Само значение

    Типы значений следуют такой нумерации:
        0 => 'REG_0'
        1 => 'REG_SZ'
        2 => 'REG_EXPAND_SZ'
        3 => 'REG_BINARY'
        4 => 'REG_DWORD'
        5 => 'REG_DWORD_BIG_ENDIAN'
        6 => 'REG_LINK'
        7 => 'REG_MULTI_SZ'
        8 => 'REG_RESOURCE_LIST'
        9 => 'REG_FULL_RESOURCE_DESCRIPTION'
        10 => 'REG_RESSOURCE_REQUIREMENT_MAP'
Пример
Код

use Win32::Registry;
my %RegType = (
            0 => 'REG_0',
            1 => 'REG_SZ',
            2 => 'REG_EXPAND_SZ',
            3 => 'REG_BINARY',
            4 => 'REG_DWORD',
            5 => 'REG_DWORD_BIG_ENDIAN',
            6 => 'REG_LINK',
            7 => 'REG_MULTI_SZ',
            8 => 'REG_RESOURCE_LIST',
            9 => 'REG_FULL_RESOURCE_DESCRIPTION',
            10 => 'REG_RESSOURCE_REQUIREMENT_MAP');

my $Register = "Software\\MICROSOFT\\Java VM";
my $RegType, $RegValue, $RegKey, $value;
my %values;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;

$hkey->GetValues(\%values);

foreach $value (keys(%values))
    {
    $RegType    = $values{$value}->[1];
    $RegValue    = $values{$value}->[2];
    $RegKey    = $values{$value}->[0];
    next if ($RegType eq '');  #do not print default value if not assigned
    $RegKey    = 'Default' if ($RegKey eq '');    #name the default key
    print "$RegKey";
    print " ($RegType{$RegType}) : ";

    SWITCH:
        {
        if ($RegType == 4)
            {printf "Ox%1x \n", unpack("L",$RegValue); last SWITCH; }
        if ($RegType == 5)
            {printf "Ox%1x", unpack("N",$RegValue); last SWITCH; }
        if ($RegType < 8 )
            {printf "$RegValue\n"; last SWITCH; }
        print "\n";
        }
    }
$hkey->Close();



Создание ключа:
    
Код

$hkey->Create($key,$subkey);

где
    $hkey - хендел
    $key - имя ключа для открытия или создания
    $subkey - хендел на случай создания подключей для только-что созданного ключа
Пример
Код

use Win32::Registry;
my $Register = "Software";
my $hkey,$SubKey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->Create("FunStuff",$SubKey);
$hkey->Close();




Удвление ключа:
    
Код

$hkey->DeleteKey($subkey);

где
    $hkey - хендел открытого ключа
    $subkey - имя удаляемого под-ключа
!!!: В NT системах можно удалять только пустые ключи
Пример
Код

use Win32::Registry;
my $Register = "Software";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->DeleteKey("FunStuff");
$hkey->Close();




Удалить значение:
    
Код

$hkey->DeleteValue($Name);

где
    $hkey - хендел открытого ключа
    $Name - имя удаляемого значения
Пример
Код

use Win32::Registry;
my $Register = "Software\\FunStuff";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->DeleteValue("MyValue");
$hkey->Close();




Установить  дефолтное значение:
    
Код

$hkey->SetValue($subkey,$type,$value);

где
    $hkey - хендел открытого ключа
    $subkey - имя под-ключа
    $type - тип значения(всегда должен иметь значение REG_SZ)
    $value - значение
Пример
Код

use Win32::Registry;
my $Register = "Software";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->SetValue("FunStuff",REG_SZ,"Let me out !!!");
$hkey->Close();




Установить именное значение:
    
Код

$hkey->SetValueEx($ValueNam,$Reserved,$Type,$Data);

где
    $hkey - хендел открытого ключа
    $ValueNam - имя устанавлимоего значания
    $Reserved - должен быть NULL (undef)
    $Type - тип значения(см. таб. выше)
    $Data - значение
Пример
Код

use Win32::Registry;
my $Register = "Software//FunStuff";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
undef $garbage;
$hkey->SetValueEx("MyValue",$garbage,REG_SZ,"Let me out !!!");
$hkey->Close();




Узнать дефолтное значение
    
Код

$hkey->QueryValue($SubKey,$Value);

где
    $hkey - хендел
    $SubKey - имя под-ключа
    $Value - сюда запишется результат
Пример
Код

use Win32::Registry;
my $Register = "Software\\MICROSOFT\\Java VM";
my $hkey, $value;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->QueryValue($subkey,$value);
print "the unnamed value is : ";
if ($value eq '')
    {
    print "undefined\n";
    }
else
    {
    print "$value\n";
    }
$hkey->Close(); 




Узнать кол-во под-ключей и значений в текущем ключе:
    
Код

$hkey->QueryKey($ClassRef,$SubKey,$Value);

где
    $ClassRef - (незнаю)
    $SubKey - сюда сохраняется кол-во под-ключей
    $Value - сюда - кол-во значений
Пример
Код

use Win32::Registry;
my $Register = "Software\\Netscape";
my $hkey;

$HKEY_LOCAL_MACHINE->Open($Register,$hkey)|| die $!;
$hkey->QueryKey($subkeys,$values);
print "$subkeys keys, $values values\n";
$hkey->Close(); 


Это сообщение отредактировал(а) Perl_sapiens - 23.2.2008, 01:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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