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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Et enfin les résultats sur la console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
C'est ma première expérience de manipulation du registre en perl...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
MERCI d'avance pour vos suggestions !
Partager