Открыть ключ: | Код | $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();
|
|