IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

FAQ et rubrique Perl officielles !!! [FAQ]


Sujet :

Langage Perl

  1. #41
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    grillé par philou
      0  0

  2. #42
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Merci pour l'explication convaincante.
      0  0

  3. #43
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    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 !!
      0  0

  4. #44
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Bonjour,

    La FAQ a subi comme annoncé une mise à jour complète. Merci de donner vos avis et remarques.

    Merci !
      0  0

  5. #45
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    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
      0  0

  6. #46
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    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.
      0  0

  7. #47
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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
      0  0

  8. #48
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    [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 :
    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
    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.

    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
      2  0

  9. #49
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    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 :
    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 :

    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
    Explication de la commande DOS copy con

    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.
    Cela te convient ?
      0  0

  10. #50
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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
      0  0

  11. #51
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    FAQ mise à jours !
      0  0

  12. #52
    Membre du Club

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 48
    Points
    48
    Par défaut Lister des fichiers et suppression si vieux d'un mois
    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
        }
        }
      0  0

  13. #53
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Merci, je vais le mettre en ligne.
      0  0

  14. #54
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Mise à jour de la FAQ effectuée.
      0  0

  15. #55
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Nouvelle question dans la FAQ : Comment supprimer les fichiers vieux de plus de X jours dans des répertoires ?
      0  0

  16. #56
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Nouvelle question dans la FAQ : Comment lire ou créer un fichier raccourci (.lnk) en Perl ?
      0  0

  17. #57
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    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 à :

    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
      |
    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.

    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 :

    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);
    On peut voir sur l'image Reg_Faq_1.jpg la similitude

    NB avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $Key = $RegHash{"HKEY_CLASSES_ROOT"};
    On aurait listé toutes les clés immédiatement sous HKEY_CLASSES_ROOT , plusieurs milliers !

    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 '/'


    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);
    # Dans l'exemple qui suit :
    # 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.


    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);
    # 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
    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);
    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é.


    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]
    Images attachées Images attachées  
      0  0

  18. #58
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Nouvelle question : Comment lister les répertoires de façon récursive ou non ?
      0  0

  19. #59
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    @dmganges Je vais me pencher sur ta proposition.
      0  0

  20. #60
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut Notification de courrier
    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 :

    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"
    PS: Vérifier au préalable que ces HKEY ne soient pas déjà utilisées, modifier leurs noms le cas échéant.
    Fichiers attachés Fichiers attachés
      0  0

Discussions similaires

  1. Participez aux FAQ des rubriques Java, Eclipse et NetBeans !
    Par Mickael Baron dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/01/2007, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo