[Win32::TieRegistry] Récupérer : DefaultIcon & command
Bonjour,
En vue de récupérer les icônes et les commandes des programmes dans la base de registre, j'utilise Win32::TieRegistry
Je n'obtiens ces informations qu'une fois sur deux... et encore !
Exemple de registres similaires :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [HKEY_CLASSES_ROOT]
|
+--mailto-------------------(par défaut)--------REG_SZ---------Thunderbird URL
| | |
| | +---EditFlags-----------REG_WORD-------2
| | |
| | +---FriendlyTypeName----REG_SZ---------Thunderbird URL
| | |
| | +---URL Protocol--------REG_SZ
| |
| +---DefaultIcon--------(par défaut)--------REG_SZ---------C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe,0
| |
| +---shell--------------(par défaut)--------REG_SZ---------(Valeur non définie)
| |
| +---open----------(par défaut)--------REG_SZ---------(Valeur non définie)
| |
| +---command---(par défaut)--------REG_SZ---------"C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -osint -compose "%1"
|
=
|
+--migfile-------------------(par défaut)-------REG_SZ---------Migration Store
| | |
| | +---FriendlyTypeName----REG_EXPAND_SZ--@%systemroot%\system32\migwiz\wet.dll,-726RL
| |
| +---DefaultIcon--------(par défaut)--------REG_SZ---------%systemroot%\system32\migwiz\migwiz.exe,0
| |
| +---shell--------------(par défaut)--------REG_SZ---------(Valeur non définie)
| |
| +---open----------(par défaut)--------REG_SZ---------(Valeur non définie)
| |
| +---command---(par défaut)--------REG_SZ---------"C:\Windows\System32\migwiz\migwiz.exe" /Restore "%1"
|
|
= |
Mon programme, en fait 2 extraits :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #!/usr/bin/perl
use strict;
use warnings;
use utf8;
sub win32_reg_read {
my $sub_key = shift;
my $value = shift;
print "PRINT $sub_key $value\n\n";
use Win32::TieRegistry ( Delimiter => '/' );
my $HKEY_CLASSES_ROOT = Win32::TieRegistry->new("HKEY_CLASSES_ROOT");
if ($HKEY_CLASSES_ROOT) {
print "OK HKEY $HKEY_CLASSES_ROOT\n";
#my $skey = $HKEY_CLASSES_ROOT->Open("mailto", { 'Delimiter' => '/' });
my $skey = $HKEY_CLASSES_ROOT->Open($sub_key, { 'Delimiter' => '/' });
if ($skey) {
print "OK SUBKEY $sub_key\n";
my %key_values = $skey->GetValue($value);
foreach (sort keys %key_values) {
print "EACH $_\n";
print $_, "\n"; # a toi d'adapter ton code à ce que tu avais dans ta boucle
}
}
}
}
# DefaultIcon & command
print "\n\nNOT OK :\n";
win32_reg_read("migfile/DefaultIcon","" ); # NOT OK
print "\n\nNOT OK :\n";
win32_reg_read("migfile","DefaultIcon" ); # NOT OK
print "\n\nNOT OK :\n";
win32_reg_read("migfile/shell/open/command","" ); # NOT OK
print "\n\nOK :\n";
win32_reg_read("mailto/DefaultIcon","" ); # OK
print "\n\nOK :\n";
win32_reg_read("mailto/shell/open/command","" ); # OK
# -> renvoie Windows Standard
print "##################################################################\n";
print "\n\nAutre pgm :\n\n";
print "\n\nOK :\n";
my %RegHash;
use Win32::TieRegistry( TiedHash => \%RegHash );
use Data::Dumper;
my $Key = $RegHash{"HKEY_CLASSES_ROOT\\mailto"};
print Dumper $Key->SubKeyNames;
print "\n\nNOT OK :\n";
$Key = $RegHash{"HKEY_CLASSES_ROOT\\migfile"};
print Dumper $Key->SubKeyNames; |
Et enfin les résultats sur la console :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| C:\DevPerl\Registre>perl regedit.pl
NOT OK :
PRINT migfile/DefaultIcon
OK HKEY Win32::TieRegistry=HASH(0x354eedc)
NOT OK :
PRINT migfile DefaultIcon
OK HKEY Win32::TieRegistry=HASH(0x354dd2c)
NOT OK :
PRINT migfile/shell/open/command
OK HKEY Win32::TieRegistry=HASH(0x354ef4c)
OK :
PRINT mailto/DefaultIcon
OK HKEY Win32::TieRegistry=HASH(0x354dc8c)
OK SUBKEY mailto/DefaultIcon
EACH C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe,0
C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe,0
OK :
PRINT mailto/shell/open/command
OK HKEY Win32::TieRegistry=HASH(0x354ef3c)
OK SUBKEY mailto/shell/open/command
EACH "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -osint -compos
e "%1"
"C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -osint -compose "%1
"
##################################################################
Autre pgm :
OK :
$VAR1 = 'DefaultIcon';
$VAR2 = 'shell';
NOT OK :
Can't call method "SubKeyNames" on an undefined value at regedit.pl line 58.
C:\DevPerl\Registre> |
C'est ma première expérience de manipulation du registre en perl...
MERCI d'avance pour vos suggestions !