Открыть ключ: Код |
$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 - хендел ключа, в который пишется результат. После использования его надо закрывать:
Пример:Код |
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