grillé par philou
grillé par philou
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Merci pour l'explication convaincante.
La FAQ Perl va subir quelques corrections (grammaire, orthographe, formulation de phrases, codes...). N'hésitez pas à nous en faire part de bogues à corriger. De plus, si vous souhaitez ou avez des idées de nouvelles questions dans la FAQ, dites le nous.
Merci d'avance !!
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Bonjour,
La FAQ a subi comme annoncé une mise à jour complète. Merci de donner vos avis et remarques.
Merci !
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Je cherche des volontaires pour mettre à nouveau à jour la FAQ Perl.
En effet, cela m'a pris quelques jours pour mettre la FAQ à jour, mais je souhaiterais que l'on puisse à nouveau la mettre à jour pour y rajouter dans certaines sections, les nouveautés issues de Perl 5.10, 5.12 et 5.14.
Comme vous avez dû le lire ici, ActiveState ne propose plus que les versions 5.12 et 5.14. il serait donc intéressant que notre FAQ soit à jour dans les possibilités que nous offrent ces nouvelles versions.
N'hésitez donc pas à vous proposer ou même faire pas de vos participations dans ce fil et je les rajouterais dans la FAQ.
Merci
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Quelques mises à jour et nouvelles questions ont été rajoutées dans la FAQ Perl en rapport avec Perl 5.10, 5.12. Vous trouverez des nouveaux opérateurs tels yada-yada, each pour les listes et quelques pragmas.
Si vous avez des rajouts, même par rapport à perl 5.14, n'hésitez pas.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Pour la rubrique 4.Perl avancé->Operateurs, il faudrait ajouter l'opérateur "smart matching" (~~, chercher "Smart" dans perldoc perlsyn).
Merci pour l'opérateur each sur les tableaux et yada-yada
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
[Q] Comment utiliser * sur la ligne de commande windows ?
[R]
L'invité de commande Windows se démarque des shells Unix par le fait que l'expansion des caractères génériques de fichier n'est pas fait pas l'invité de commande (le shell), mais doit être réalisé par le programme qui est appelé par la commande.
Or, par défaut, Perl ne réalise pas cette opération, qui n'est pas nécessaire pour les autres shell. Pour remédier à ce manque, il existe une astuce que voici :
On pourra (re)définir PERL5OPT au niveau du système de sorte que l'option soit active pour tous les invités de commande.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 C:\> copy con c:\perl\lib\Wild.pm # Wild.pm - emulate shell @ARGV expansion on shells that don't use File::DosGlob; @ARGV = map { my @g = File::DosGlob::glob($_) if /[*?]/; @g ? @g : $_; } @ARGV; 1; ^Z C:\> set PERL5OPT=-MWild
Cette astuce est tirée de cet article, au paragraphe Command-line Wildcard Expansion.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Merci philou, après quelques modifications, voici ce que donnera ta Q/R.
Lieu dans la FAQ : divers
Question : Comment utiliser * sur la ligne de commande windows ?
Réponse :
Cela te convient ?L'invite de commande Windows se démarque des shells Unix par le fait que l'expansion des caractères génériques de fichier n'est pas fait par l'invite de commande (le shell), mais doit être réalisé par le programme qui est appelé par la commande.
Or, par défaut, Perl ne réalise pas cette opération, qui n'est pas nécessaire pour les autres shell (Linux/Unix/Mac). Pour remédier à ce manque, il existe une astuce que voici :
Explication de la commande DOS copy con
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 C:\> copy con C:\Perl\lib\Wild.pm # Wild.pm - emulate shell @ARGV expansion on shells that don't use File::DosGlob; @ARGV = map { my @g = File::DosGlob::glob($_) if /[*?]/; @g ? @g : $_; } @ARGV; 1; ^Z C:\> set PERL5OPT=-MWild
La commande COPY suivante permet de copier ce que vous entrez au clavier vers un fichier de sortie (C:\perl\lib\Wild.pm en espérant que Perl est bien installé dans le C:\).
Une fois que vous avez tapé la commande et appuyé sur ENTRÉE, le DOS copie dans C:\Perl\lib\Wild.pm toutes les données saisies.
Appuyez ensuite la combinaison de touches "CTRL"+"Z" pour marquer la fin du fichier. Le caractère CTRL+Z est symbolise à l’écran par "^Z". Vous pouvez également interrompre la commande COPY [CON] en appuyant sur la touche F6, qui génère le caractère CTRL+Z de fin de fichier symbolise à l’écran par "^Z". Ensuite, vous appuyez sur la touche "ENTRÉE".
À ce stade, le fichier est créé. Il permettra à Perl d'émuler le comportement attendu du caractère étoilé.
Afin que votre terminal DOS fasse appel au module Wild nouvellement créé, une variable d'environnement temporaire a été définie de la sorte : set PERL5OPT=-MWild. À chaque fois que perl sera appelé dans le terminal DOS en cours d'utilisation, l'option -MWild sera ajoutée.
On pourra (re)définir PERL5OPT au niveau du système de sorte que l'option soit active pour tous les invites de commande DOS.
Cette astuce est tirée de cet article, au paragraphe Command-line Wildcard Expansion.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
C'est proprement parfait
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
FAQ mise à jours !
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Hello,
Voici un script permettant de lister des fichiers textes dans un répertoire.
De comparer leur dernière date de modification.
Si les dates sont vieilles au minimum d'un mois, les fichiers sont supprimés.
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 #! /usr/bin/perl use strict; use warnings; use POSIX 'strftime'; use DateTime; use Data::Dumper; my (@infos,%hash,$date,@monthoffile); ## Affiche la date du jour au format YYYY-MM-DDJHH-MM-SS my $mydate = DateTime->now(); my @month = split('-',$mydate); ##### Liste les fichiers ayant l'extension .txt my @list = glob("/dossier/sousdossier/*.txt"); ### recupere le nombre de fichier my $numberoffile = scalar(@list); for (my $v = 0;$v<$numberoffile;$v++){ @infos = stat($list[$v]); ### recupere les informations du fichier en seconde $date = strftime("%Y-%m-%d",localtime($infos[9])); #### format l'information du fichier @monthoffile = split('-',$date); #### recupere le mois de la date if($month[1] != $monthoffile[1]){ ### verifie si le mois de creation du fichier est different de celui en cours print $list[$v]."\n fichier supprime\n"; unlink $list[$v]; ### supprime le fichier } }
Merci, je vais le mettre en ligne.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Mise à jour de la FAQ effectuée.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Nouvelle question dans la FAQ : Comment supprimer les fichiers vieux de plus de X jours dans des répertoires ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Nouvelle question dans la FAQ : Comment lire ou créer un fichier raccourci (.lnk) en Perl ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Bonjour,
[Q1] Comment récupérer en perl la valeur d'une clé dans le registre windows ?
[R] En utilisant le module Win32::TieRegistry
Je n'ai rien inventé, tout est là :
http://search.cpan.org/~adamk/Win32-...TieRegistry.pm
http://www.bribes.org/perl/docfr/win32tieregistry.html
A partir d'un exemple nous allons récupérer la position du fichier icône associé à un type de fichier ainsi que la comande pour lancer une application.
Ces deux informations sont contenues dans le registre (regedit) de Windows et sont connues sous les noms de :
- DefaultIcon pour l'icône
- command pour la ligne de commande
Dans le registre, les données sont organisées dans des HKEY.
HKEY signifiant "handle key" soit "poignée de clés" les données sont stockées dans des "ruches" qui sont des blocs, éventuellement chaînés, de 4096 caractères.
Ces HKEY sont au nombre de cinq, leurs noms sont explicites :
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
Les informations que nous recherchons sont dans HKEY_CLASSES_ROOT
Toutes autres informations peuvent être trouvées avec le module perl Win32::TieRegistry
Il suffit de connaître le chemin de l'information pour y accéder, c'est ce qui est bien souvent le moins évident !
Il est également possible de modifier, mettre à jour... le registre.
Faut-il préciser combien une sauvegarde du registre peut éviter d'avoir à tout réinstaller ?
Avant de nous perdre dans la forêt, à l'aide d'un exemple, voyons comment Windows gère les associations des fichiers icônes, avec les extensions des fichiers .mcl .exe RealPlayer.exe batfile ...etc. :
- Une application de gestion de messagerie écrite en perl se trouve dans C:\Mail
- Cette application peut produire deux types de fichiers :
-- des fichiers de notification qui auront l'extension .mail
-- des fichiers d'anomalie qui auront l'extension .ano
Nous prenons, sur le net ou ailleurs, deux icônes, un qui symbolise une enveloppe qui à pour nom enveloppe.ico, l'autre qui symbolise un avertissement, exclamation.ico que nous sauvegardons respectivement en Mail.ico et Warn.ico dans le répertoire C:Mail :
C:\Mail\Mail.ico (enveloppe.ico)
C:\Mail\Warn.ico (exclamation.ico)
Pour les fichier de notification :
1) Dans regedit à [HKEY_CLASSES_ROOT] ajoutons une clé: .mail et dans 'valeur chaine' de cette clé: "MAIL.mail"
2) toujours dans [HKEY_CLASSES_ROOT] ajoutons une autre clé: MAIL.mail (nb c'est la 'valeur' mise dans .mail) ici la valeur doit rester à "valeur non définie" ou bien mettre un libellé perso.
3) A l'intérieur de MAIL.mail, créons une clé: DefaultIcon attention la casse à de l'importance, et pour cette clé, la valeur est le path du fichier icône C:\Mail\Mail.ico
Pour les fichier d'anomalie :
1) Dans regedit à [HKEY_CLASSES_ROOT] ajoutons une clé: .ano et dans 'valeur chaine' de cette clé: "ANO.ano"
2) toujours dans [HKEY_CLASSES_ROOT] ajoutons une autre clé: ANO.ano (nb c'est la 'valeur' mise dans .ano) ici la valeur doit rester à "valeur non définie" ou bien mettre un libellé perso.
3) A l'intérieur de ANO.ano, créons une clé: DefaultIcon attention la casse à de l'importance, et pour cette clé, la valeur est le path du fichier icône C:\Mail\Warn.ico
A ces endroits le registre ressemble à :
Une fois cette manip terminée, il faut fermer la session de l'utilisateur puis la rouvrir afin que les modifications soient prises en compte.
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 [HKEY_CLASSES_ROOT] | =------------------------------Nom--------------Type-------------Données | +--.mail-------------------(par défaut)--------REG_SZ----------MAIL.mail | +--MAIL.mail---------------(par défaut)--------REG_SZ----------Rien ou ICONE pour appli MAIL | | | +---DefaultIcon-----(par défaut)--------REG_SZ----------C:\Mail\Mail.ico | = | +--.ano--------------------(par défaut)--------REG_SZ----------ANO.ano | +--ANO.ano-----------------(par défaut)--------REG_SZ----------Rien Info personnelle | | | +---DefaultIcon-----(par défaut)--------REG_SZ----------C:\Mail\Warn.ico |
A partir de cet instant tous les fichiers d'extension .mail auront pour icône Mail.ico , les .ano auront pour icône Warn.ico
A présent nous sommes campés pour recherchés nos valeurs, ou toutes autres, dans le registre, en utilisant le module Win32::TieRegistry (sauf erreur présent dans le core, à télécharger éventuellement).
Premier petit programme qui affiche les clés d'un niveau :
On peut voir sur l'image Reg_Faq_1.jpg la similitude
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 #!/usr/bin/perl use strict; use warnings; use utf8; # Declaration d'un hash my %RegHash; # Création du point d'entrée intermédiaire associé au hash %RegHash use Win32::TieRegistry( TiedHash => \%RegHash ); # Affectation d'un point d'entrée au hash, qui renvoie en fait un hash my $Key = $RegHash{"HKEY_CLASSES_ROOT\\mailto"}; # Edition des keys trouvées au niveau HKEY_CLASSES_ROOT\\mailto foreach (keys %$Key) { print $_, "\n"; } # Dans le cas où les paramètres de sécurités du PC interdisent l'accès au registre, # Il faut faire un raccourci de cmd.exe ayant les droits adminitrateur # et donc temporiser la fermeture de cmd.exe pour avoir le temps de lire print "\n\n<CrtlC> pour sortir\n"; sleep (3600);
NB avec :
On aurait listé toutes les clés immédiatement sous HKEY_CLASSES_ROOT , plusieurs milliers !
Code : Sélectionner tout - Visualiser dans une fenêtre à part my $Key = $RegHash{"HKEY_CLASSES_ROOT"};
NB : Si le programme ne revoie rien 2 cas :
- soit la clé HKEY_CLASSES_ROOT\\mailto n'exsiste pas
- soit il y a un problème au niveau des droits d'exécution
Dans le deuxième cas, trois façons de régler l'anomalie :
- 1 - Aller dans Panneau de configuration => paramètres du contrôle de compte d’utilisateur
Choisir "Ne jamais m'avertir" (pas recommandé !)
- 2 - Lancer l'ouverture d'une console DOS depuis le menu "Démarrer" avec "Exécuter en tant qu'administrateur", (un utilisateur non administrateur devra fournir le mot de passe), puis y lancer perl pgm.pl
- 3 - Créer un raccourci de la console DOS sur le bureau, avec pour paramètres :
--> Cible ==================> C:\Perl\bin\perl.exe C:\DevPerl\Registre/pgm.pl
--> Démarrer dans ==========> C:\DevPerl\Registre
--> Onglet Compatibilité
----> Niveau de privilège ==> Cocher "Exécuter ce programme en tant qu'administrateur"
Dans ce dernier cas, suivant le niveau d'avertissement choisi, il faudra éventuellement confirmer la demande de Windows.
ATTENTION à la sécurité, une personne malveillante peut modifier la source.pl et causer beaucoup de dégâts !
=========================================================================================
Les problèmes de droits d'accès réglés, voyons à présent comment accéder différemment au registre :
# Dans l'exemple qui suit :
# - on précise un délimiteur différent, Delimiter => '/' , qui évite de gérer les \\
# - Au lieu d'affecter un point d'entrée intermédiaire à un hash, on utilse la fonction ->open sur la HKEY à un
# niveau précisé : $Dossier->Open('mailto', { 'Delimiter' => '/' }); toujours en précisant le délimiteur '/'
# Dans l'exemple qui suit :
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 #!/usr/bin/perl -w use strict; use warnings; use utf8; use Win32::TieRegistry( Delimiter => '/' ); # 1 - assignation d'un HKEY à un dossier my $Clef = 'HKEY_CLASSES_ROOT'; my $Dossier = $Registry->{$Clef}; # 2 - ouverture du dossier my $Sous_Dossier = $Dossier->Open('mailto', { 'Delimiter' => '/' }); # 3 - lecture des clés dans le Sous_Sossier print "\n\nClefs de $Dossier->Open\n\n"; my $idx = 0; foreach my $key (keys %$Sous_Dossier) { printf " %3d. %25s\n", ++$idx, $key; } print "\n\n"; ## # sleep (3600);
# On met le tout dans une fonction win32_reg_read qui prend en paramètre une sous-clé ainsi qu'une valeur de clé.
# Si celle-ci contient un dossier, on desecend d'un niveau, si elle = "" on affiche la valeur de la clé.
# Au passage on contrôle notre DefaultIcon de l'appli Mail, ainsi que la commande pour lancer le gestionnaire de # # # messagerie avec son DefaultIcon.
# Enfin, dans le même ordre d'idée :
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 #!/usr/bin/perl use strict; use warnings; use utf8; sub win32_reg_read { my $sub_key = shift; my $value = shift; print "\n=========================\n"; 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 "\nOK HKEY $HKEY_CLASSES_ROOT\n"; 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"; } } } } # Recherche DefaultIcon & command win32_reg_read("mailto/DefaultIcon","" ); win32_reg_read("mailto/shell/open/command","" ); win32_reg_read("MAIL.mail/DefaultIcon","" ); win32_reg_read("ANO.ano","DefaultIcon" ); ## #sleep (3600);
Le mieux serait bien sûr un parcours récursif, comme pour les répertoires, sachant que lorsque un get->subkey échoue on se trouve sur une valeur de clé.
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 #!/usr/bin/perl -w use strict; use warnings; use Win32::TieRegistry( Delimiter => '/' ); # 1 - Assigne une ruche à Hkey my $Hkey = 'HKEY_CLASSES_ROOT'; my $Ruche = (); $Ruche = $Registry->{$Hkey}; print "\n\n\nRuche $Hkey = $Ruche\n"; my @SubKeys = qw / mailto MAIL.mail ManyCam.Effect migfile .mcl anifile ANO.ano batfile brmFile /; foreach my $SubKey ( sort @SubKeys ) { # 2 - Ouvre une sous-clé dans la ruche $SubKey print "\n\n=======================================\n"; print "SubKey = $SubKey\n"; my $Chemin = (); $Chemin = $Ruche->Open($SubKey, { 'Delimiter' => '/' }); if ( $Chemin ) { print "$Ruche OUVERTE ! \n\tChemin de recherhe = $Chemin\n\n"; } else { print "Impossible d'ouvrir $Ruche avec SubKey = $SubKey\n\n"; next; } # 3 - Affiche les Clefs triées du Chemin my $idx = 0; my $ValeurClef = (); foreach my $Clef (sort keys %$Chemin) { $Clef =~ s/\///; $ValeurClef = $Chemin->GetValue($Clef); if ( $ValeurClef ) { printf "CLEF %3d. %20s GetValue = %20s\n", ++$idx, $Clef, $ValeurClef; } } # 4 - Affiche la valeur pour DefaultIcon my $DefaultIcon = "DefaultIcon"; my $SubSubKey = $SubKey .'/'. $DefaultIcon; $Chemin = $Ruche->Open($SubSubKey, { 'Delimiter' => '/' }); if ( ! $Chemin ) { print "Impossible d'ouvrir $Ruche avec SubSubKey = $SubSubKey\n\n"; next; } foreach my $Clef (sort keys %$Chemin) { $Clef =~ s/\///; $ValeurClef = $Chemin->GetValue($Clef); if ( $ValeurClef ) { printf "\nCLEF %3d. %28s GetValue = %20s\n", ++$idx, $SubSubKey, $ValeurClef; } } # 5 - Affiche la valeur pour command my $command = "shell/open/command"; $SubSubKey = $SubKey .'/'. $command; $Chemin = $Ruche->Open($SubSubKey, { 'Delimiter' => '/' }); if ( ! $Chemin ) { print "Impossible d'ouvrir $Ruche avec SubSubKey = $SubSubKey\n\n"; next; } foreach my $Clef (sort keys %$Chemin) { $Clef =~ s/\///; $ValeurClef = $Chemin->GetValue($Clef); if ( $ValeurClef ) { printf "\nCLEF %3d. %28s GetValue = %20s\n", ++$idx, $SubSubKey, $ValeurClef; } } print "\n\n"; } ## # sleep (3600);
Je me suis évidemment largement inspiré de bouts de code trouvés sur Internet, dont je n'ai pas noté toutes les URL.
Les seuls problèmes que j'ai rencontré, sont au niveau des droits d'accès au registre.
Pour finir, il existe plusieurs façons de désigner une icône associée à des fichiers exécutables ou non :
1 - Celle que nous avons utilisé pour l'appli Mail en créant nous même les clés dans le registre DefaultIcon = C:\Mail\Mail.ico
2 - Lorsque DefaultIcon à pour valeur un .dll suivi d'un nombre, dans ce cas l'icône est dans la .dll désigné, comme dans : DefaultIcon = %SystemRoot%\System32\imageres.dll,-68
C'est le cas le plus fréquent !
Dans ce cas, il faut extraire l'icône de la dll.
Je n'ai pas encore fait d'extraction, ce doit être possible en utilisant les informations suivantes :
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
http://search.cpan.org/~bulkdd/Win32-API-0.75/API.pm
plus quelques info pour accéder à l'API :
http://www.developpez.net/forums/d99...e/#post5572583
3 - Lorsque DefaultIcon à pour valeur un .exe ,éventuellement suivi d'un chiffre, dans ce cas il s'agit de l'icône associé à l'exécutable, le chiffre désigne le numéro s'il y en a plusieurs d'associés, comme dans : DefaultIcon = C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe,0
4 - DefaultIcon désigne un fichier dont le chemin est en partie en hexadécimal, comme pour Perl : C:\Windows\Installer\{4552F143-9C76-44A0-8F68-B6E022668375}\_95fe01f856ebc8574541b8763179eadc,0
Je ne sais pas ce que représente le fichier de plus de 300Mo _95fe01f856ebc8574541b8763179eadc
Il peut y avoir d'autres méthodes d'association !!!
Le souci avec le registre c'est de savoir ce qu'on cherche, et une fois qu'on la trouvé, savoir comment l'interprêter !
@djibril :
Mes sources méritent certainement l'intervention d'un pro perl.
C'est le premier jet de ma première participation, s'il manque des précisions, si la présentation est à revoir... n'hésite pas à me renvoyer le tout avec tes commentaires, je corrigerai.
MERCI à toutes et à tous.
[Edit 12:53]
J'avais oublié le nom de clé [DefaultIcon]
Nouvelle question : Comment lister les répertoires de façon récursive ou non ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
@dmganges Je vais me pencher sur ta proposition.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Bonjour djibril,
Comme promis mais avec du retard... voici quelques modules qui me sont utiles...
Je n'ai pas trouvé le moyen de les joindre en MP.
Bien cordialement,
MD
[EDIT Oubli de LISEZMOI.txt]
[EDIT oubli de Reg_Ano_Mail.reg] Décidément !
Pour modifier le registre afin de prendre en compte les icônes Warn.ico et Mail.ico et avoir une visualisation de Mail et d'Ano sur le bureau.
Il faut au minimum fermer la session et la rouvrir pour la prise en compte.
Il semble que le forum n'accepte pas les .reg en pièces jointes, je colle le contenu ici :
PS: Vérifier au préalable que ces HKEY ne soient pas déjà utilisées, modifier leurs noms le cas échéant.
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 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.ano] @="ANO.ano" [HKEY_CLASSES_ROOT\ANO.ano] [HKEY_CLASSES_ROOT\ANO.ano\DefaultIcon] @="C:\\Mail\\Warn.ico" [HKEY_CLASSES_ROOT\.mail] @="MAIL.mail" [HKEY_CLASSES_ROOT\MAIL.mail] [HKEY_CLASSES_ROOT\MAIL.mail\DefaultIcon] @="C:\\Mail\\Mail.ico"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager