| Win32-Registry documentation | Contained in the Win32-Registry distribution. |
Win32::Registry - accessing the Windows registry [obsolete, use Win32::TieRegistry]
use Win32::Registry;
my $tips;
$::HKEY_LOCAL_MACHINE->Open("SOFTWARE\\Microsoft\\Windows"
."\\CurrentVersion\\Explorer\\Tips", $tips)
or die "Can't open tips: $^E";
my ($type, $value);
$tips->QueryValueEx("18", $type, $value) or die "No tip #18: $^E";
print "Here's a tip: $value\n";
NOTE: This module provides a very klunky interface to access the
Windows registry, and is not currently being developed actively. It
only exists for backward compatibility with old code that uses it.
For more powerful and flexible ways to access the registry, use
Win32::TieRegistry.
Win32::Registry provides an object oriented interface to the Windows Registry.
The following "root" registry objects are exported to the main:: name space. Additional keys must be opened by calling the provided methods on one of these.
$HKEY_CLASSES_ROOT
$HKEY_CURRENT_USER
$HKEY_LOCAL_MACHINE
$HKEY_USERS
$HKEY_PERFORMANCE_DATA
$HKEY_CURRENT_CONFIG
$HKEY_DYN_DATA
The following methods are supported. Note that subkeys can be specified as a path name, separated by backslashes (which may need to be doubled if you put them in double quotes).
$reg_obj->Open($sub_key_name, $sub_reg_obj);
Opens a subkey of a registry object, returning the new registry object in $sub_reg_obj.
$reg_obj->Close();
Closes an open registry key.
$reg_obj->Connect($node_name, $new_reg_obj);
Connects to a remote Registry on the node specified by $node_name, returning it in $new_reg_obj. Returns false if it fails.
$reg_obj->Create($sub_key_name, $new_reg_obj);
Opens the subkey specified by $sub_key_name, returning the new registry object in $new_reg_obj. If the specified subkey doesn't exist, it is created.
$reg_obj->SetValue($sub_key_name, $type, $value);
Sets the default value for a subkey specified by $sub_key_name.
$reg_obj->SetValueEx($value_name, $reserved, $type, $value);
Sets the value for the value name identified by $value_name in the key specified by $reg_obj.
$reg_obj->QueryValue($sub_key_name, $value);
Gets the default value of the subkey specified by $sub_key_name.
$reg_obj->QueryKey($classref, $number_of_subkeys, $number_of_values);
Gets information on a key specified by $reg_obj.
$reg_obj->QueryValueEx($value_name, $type, $value);
Gets the value for the value name identified by $value_name in the key specified by $reg_obj.
my @keys;
$reg_obj->GetKeys(\@keys);
Populates the supplied array reference with the names of all the keys within the registry object $reg_obj.
my %values;
$reg_obj->GetValues(\%values);
Populates the supplied hash reference with entries of the form
$value_name => [ $value_name, $type, $data ]
for each value in the registry object $reg_obj.
$reg_obj->DeleteKey($sub_key_name);
Deletes a subkey specified by $sub_key_name from the registry.
$reg_obj->DeleteValue($value_name);
Deletes a value identified by $value_name from the registry.
$reg_obj->Save($filename);
Saves the hive specified by $reg_obj to a file.
$reg_obj->Load($sub_key_name, $file_name);
Loads a key specified by $sub_key_name from a file.
$reg_obj->Unload($sub_key_name);
Unloads a registry hive.
| Win32-Registry documentation | Contained in the Win32-Registry distribution. |
package Win32::Registry;
use strict; require Exporter; require DynaLoader; use Win32::WinError; require Win32 unless defined &Win32::GetLastError; use vars qw($VERSION $AUTOLOAD @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = '0.10'; @ISA = qw( Exporter DynaLoader ); @EXPORT = qw( HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_PERFORMANCE_DATA HKEY_CURRENT_CONFIG HKEY_DYN_DATA HKEY_USERS KEY_ALL_ACCESS KEY_CREATE_LINK KEY_CREATE_SUB_KEY KEY_ENUMERATE_SUB_KEYS KEY_EXECUTE KEY_NOTIFY KEY_QUERY_VALUE KEY_READ KEY_SET_VALUE KEY_WRITE REG_BINARY REG_CREATED_NEW_KEY REG_DWORD REG_DWORD_BIG_ENDIAN REG_DWORD_LITTLE_ENDIAN REG_EXPAND_SZ REG_FULL_RESOURCE_DESCRIPTOR REG_LEGAL_CHANGE_FILTER REG_LEGAL_OPTION REG_LINK REG_MULTI_SZ REG_NONE REG_NOTIFY_CHANGE_ATTRIBUTES REG_NOTIFY_CHANGE_LAST_SET REG_NOTIFY_CHANGE_NAME REG_NOTIFY_CHANGE_SECURITY REG_OPENED_EXISTING_KEY REG_OPTION_BACKUP_RESTORE REG_OPTION_CREATE_LINK REG_OPTION_NON_VOLATILE REG_OPTION_RESERVED REG_OPTION_VOLATILE REG_REFRESH_HIVE REG_RESOURCE_LIST REG_RESOURCE_REQUIREMENTS_LIST REG_SZ REG_WHOLE_HIVE_VOLATILE ); @EXPORT_OK = qw( RegCloseKey RegConnectRegistry RegCreateKey RegCreateKeyEx RegDeleteKey RegDeleteValue RegEnumKey RegEnumValue RegFlushKey RegGetKeySecurity RegLoadKey RegNotifyChangeKeyValue RegOpenKey RegOpenKeyEx RegQueryInfoKey RegQueryValue RegQueryValueEx RegReplaceKey RegRestoreKey RegSaveKey RegSetKeySecurity RegSetValue RegSetValueEx RegUnLoadKey ); $EXPORT_TAGS{ALL}= \@EXPORT_OK; bootstrap Win32::Registry; sub import { my $pkg = shift; if ($_[0] && "Win32" eq $_[0]) { Exporter::export($pkg, "Win32", @EXPORT_OK); shift; } Win32::Registry->export_to_level(1+$Exporter::ExportLevel, $pkg, @_); } ####################################################################### # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; #reset $! to zero to reset any current errors. local $! = 0; my $val = constant($constname, 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { my ($pack,$file,$line) = caller; die "Unknown constant $constname in Win32::Registry " . "at $file line $line.\n"; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } ####################################################################### # _new is a private constructor, not intended for public use. # sub _new { my $self; if ($_[0]) { $self->{'handle'} = $_[0]; bless $self; } $self; } #define the basic registry objects to be exported. #these had to be hardwired unfortunately. # XXX Yuck! { package main; use vars qw( $HKEY_CLASSES_ROOT $HKEY_CURRENT_USER $HKEY_LOCAL_MACHINE $HKEY_USERS $HKEY_PERFORMANCE_DATA $HKEY_CURRENT_CONFIG $HKEY_DYN_DATA ); } $::HKEY_CLASSES_ROOT = _new(&HKEY_CLASSES_ROOT); $::HKEY_CURRENT_USER = _new(&HKEY_CURRENT_USER); $::HKEY_LOCAL_MACHINE = _new(&HKEY_LOCAL_MACHINE); $::HKEY_USERS = _new(&HKEY_USERS); $::HKEY_PERFORMANCE_DATA = _new(&HKEY_PERFORMANCE_DATA); $::HKEY_CURRENT_CONFIG = _new(&HKEY_CURRENT_CONFIG); $::HKEY_DYN_DATA = _new(&HKEY_DYN_DATA);
sub Open { my $self = shift; die 'usage: $obj->Open($sub_key_name, $sub_reg_obj)' if @_ != 2; my ($subkey) = @_; my ($result,$subhandle); $result = RegOpenKey($self->{'handle'},$subkey,$subhandle); $_[1] = _new($subhandle); return 0 unless $_[1]; $! = Win32::GetLastError() unless $result; return $result; }
sub Close { my $self = shift; die 'usage: $obj->Close()' if @_ != 0; return unless exists $self->{'handle'}; my $result = RegCloseKey($self->{'handle'}); if ($result) { delete $self->{'handle'}; } else { $! = Win32::GetLastError(); } return $result; } sub DESTROY { my $self = shift; return unless exists $self->{'handle'}; RegCloseKey($self->{'handle'}); delete $self->{'handle'}; }
sub Connect { my $self = shift; die 'usage: $obj->Connect($node_name, $new_reg_obj)' if @_ != 2; my ($node) = @_; my ($result,$subhandle); $result = RegConnectRegistry ($node, $self->{'handle'}, $subhandle); $_[1] = _new($subhandle); return 0 unless $_[1]; $! = Win32::GetLastError() unless $result; return $result; }
sub Create { my $self = shift; die 'usage: $obj->Create($sub_key_name, $new_reg_obj)' if @_ != 2; my ($subkey) = @_; my ($result,$subhandle); $result = RegCreateKey($self->{'handle'},$subkey,$subhandle); $_[1] = _new ($subhandle); return 0 unless $_[1]; $! = Win32::GetLastError() unless $result; return $result; }
sub SetValue { my $self = shift; die 'usage: $obj->SetValue($subkey, $type, $value)' if @_ != 3; my $result = RegSetValue($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub SetValueEx { my $self = shift; die 'usage: $obj->SetValueEx($value_name, $reserved, $type, $value)' if @_ != 4; my $result = RegSetValueEx($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub QueryValue { my $self = shift; die 'usage: $obj->QueryValue($sub_key_name, $value)' if @_ != 2; my $result = RegQueryValue($self->{'handle'}, $_[0], $_[1]); $! = Win32::GetLastError() unless $result; return $result; }
sub QueryKey { my $garbage; my $self = shift; die 'usage: $obj->QueryKey($classref, $number_of_subkeys, $number_of_values)' if @_ != 3; my $result = RegQueryInfoKey($self->{'handle'}, $_[0], $garbage, $garbage, $_[1], $garbage, $garbage, $_[2], $garbage, $garbage, $garbage, $garbage); $! = Win32::GetLastError() unless $result; return $result; }
sub QueryValueEx { my $self = shift; die 'usage: $obj->QueryValueEx($value_name, $type, $value)' if @_ != 3; my $result = RegQueryValueEx($self->{'handle'}, $_[0], undef, $_[1], $_[2]); $! = Win32::GetLastError() unless $result; return $result; }
sub GetKeys { my $self = shift; die 'usage: $obj->GetKeys($arrayref)' if @_ != 1 or ref($_[0]) ne 'ARRAY'; my ($result, $i, $keyname); $keyname = "DummyVal"; $i = 0; $result = 1; while ( $result ) { $result = RegEnumKey( $self->{'handle'},$i++, $keyname ); if ($result) { push( @{$_[0]}, $keyname ); } } return(1); }
sub GetValues { my $self = shift; die 'usage: $obj->GetValues($hashref)' if @_ != 1; my ($result,$name,$type,$data,$i); $name = "DummyVal"; $i = 0; while ( $result=RegEnumValue( $self->{'handle'}, $i++, $name, undef, $type, $data )) { $_[0]->{$name} = [ $name, $type, $data ]; } return(1); }
sub DeleteKey { my $self = shift; die 'usage: $obj->DeleteKey($sub_key_name)' if @_ != 1; my $result = RegDeleteKey($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub DeleteValue { my $self = shift; die 'usage: $obj->DeleteValue($value_name)' if @_ != 1; my $result = RegDeleteValue($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub Save { my $self = shift; die 'usage: $obj->Save($filename)' if @_ != 1; my $result = RegSaveKey($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub Load { my $self = shift; die 'usage: $obj->Load($sub_key_name, $file_name)' if @_ != 2; my $result = RegLoadKey($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; }
sub UnLoad { my $self = shift; die 'usage: $obj->UnLoad($sub_key_name)' if @_ != 1; my $result = RegUnLoadKey($self->{'handle'}, @_); $! = Win32::GetLastError() unless $result; return $result; } 1; __END__