Publicité
Discussion fermée Actualité déjà publiée
Page 3 sur 4 PremièrePremière 1234 DernièreDernière
Affichage des résultats 41 à 60 sur 64
  1. #41
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    grillé par philou

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  2. #42
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    octobre 2009
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : octobre 2009
    Messages : 481
    Points : 665
    Points
    665

    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
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

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

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  4. #44
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Bonjour,

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

    Merci !

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  5. #45
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    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

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  6. #46
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    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.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  7. #47
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 984
    Points : 3 411
    Points
    3 411

    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é
    Using strict and warnings is good for you.
      0  0

  8. #48
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 984
    Points : 3 411
    Points
    3 411

    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 :
    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é
    Using strict and warnings is good for you.
      2  0

  9. #49
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    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 :
    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 ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  10. #50
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 984
    Points : 3 411
    Points
    3 411

    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é
    Using strict and warnings is good for you.
      0  0

  11. #51
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    FAQ mise à jours !

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  12. #52
    Nouveau 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 : 36
    Points
    36

    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 :
    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
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Merci, je vais le mettre en ligne.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  14. #54
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Mise à jour de la FAQ effectuée.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  15. #55
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Nouvelle question dans la FAQ : Comment supprimer les fichiers vieux de plus de X jours dans des répertoires ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  16. #56
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Nouvelle question dans la FAQ : Comment lire ou créer un fichier raccourci (.lnk) en Perl ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  17. #57
    Membre Expert Avatar de dmganges
    Homme Profil pro Michel DUFOUR
    Administrateur Unix / Oracle retraité
    Inscrit en
    septembre 2011
    Messages
    872
    Détails du profil
    Informations personnelles :
    Nom : Homme Michel DUFOUR
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur Unix / Oracle retraité
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2011
    Messages : 872
    Points : 1 142
    Points
    1 142

    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 :
    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 :
    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 :
    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 :
    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 :
    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 :
    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
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    Nouvelle question : Comment lister les répertoires de façon récursive ou non ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  19. #59
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 545
    Points : 465 270
    Points
    465 270

    Par défaut

    @dmganges Je vais me pencher sur ta proposition.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
      0  0

  20. #60
    Membre Expert Avatar de dmganges
    Homme Profil pro Michel DUFOUR
    Administrateur Unix / Oracle retraité
    Inscrit en
    septembre 2011
    Messages
    872
    Détails du profil
    Informations personnelles :
    Nom : Homme Michel DUFOUR
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur Unix / Oracle retraité
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2011
    Messages : 872
    Points : 1 142
    Points
    1 142

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •