[..] Personalisation IconTray dans premier script "utile"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
wpicsou
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 23 sept. 2009 22:42
Status : Hors ligne

[..] Personalisation IconTray dans premier script "utile"

#1

Message par wpicsou »

Bonjour à tous,
Nouveau sur AutoIT voici mon premier "vrai" problème, je cherche à automatiser le scan antivirus d'un périphérique USB lors de son insertion sur une machine isolée de mon réseau local afin de vérifier qu'elle soit saine avant de la connecter sur mon LAN (réseau local). J'ai réussi grâce aux nombreux exemples à mettre en place cette fonction (avec deux anti virus) cependant je n'arrive pas à modifier le trayIcon par defaut, j'imagine que c'est ultra simple pour vous cependant je ne saisi pas exactement ou placer ce morceau de code dans mon code créé. Rien ne vaut un peu de code pour exprimer mes dires.

Voici mon "programme" qui fonctionne (automatise le scan USB dès insertion sur la machine et enchaine les deux anti-virus présent sur la machine).

Code : Tout sélectionner

;Initialisation des variables
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colEvents = $objWMIService.ExecNotificationQuery _
    ("Select * From __InstanceOperationEvent Within 5 Where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")

;################################################################################;
;                              Début du programme                                ;
;################################################################################;

While 1
     $objEvent = $colEvents.NextEvent
    If $objEvent.TargetInstance.DriveType = 2 Then ; Si un périphérique de type stockage USB est détecté faire:
        Select
            Case $objEvent.Path_.Class()="__InstanceCreationEvent"   ; -> Lors de l'AJOUT d'un périphérique de stockage USB , faire ce qui suit:
                $lettre_a_scanner = $objEvent.TargetInstance.DeviceId
                MsgBox(64,"désinfector","Votre périphérique USB vient d'être détecté, cliquez sur OK pour lancer l'analyse anti-virale") 
                ;################################################################################;
                ;                   Début du scan par premier anti-virus (offiscan)            ;
                ;################################################################################;          
                
                ShellExecuteWait ("c:\program files\Trend Micro\Officescan Client\pccnt.exe",$lettre_a_scanner)
            
                ;################################################################################;
                ;                   Début du scan par deuxième anti-virus (McAffee)            ;
                ;################################################################################;              
                
                ShellExecuteWait ("c:\program files\Network Associates\VirusScan\scan32.exe",$lettre_a_scanner)
    
                ;################################################################################;
                ;                   FIN DU SCAN            ;
                ;################################################################################;              
    
                MsgBox(64,"désinfector","Analyse terminé vous pouvez déconnecter votre périphérique")      
    
        EndSelect
    EndIf
WEnd
 
Et voici le code que j'ai récupéré afin de modifier le TrayIcon (clic droit sur l'icone d'AutoIT afin d'empêcher aux utilisateurs de stopper (paused) ou de couper le script (exit):

Code : Tout sélectionner

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)   ; Default tray menu items (Script Paused/Exit) will not be shown.

$settingsitem   = TrayCreateMenu("Settings")
$displayitem    = TrayCreateItem("Display", $settingsitem)
$printeritem    = TrayCreateItem("Printer", $settingsitem)
TrayCreateItem("")
$aboutitem      = TrayCreateItem("About")
TrayCreateItem("")
$exititem       = TrayCreateItem("Exit")     ; supprimer ce bouton et modifier les précédents

TraySetState()
TraySetClick(16)

While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = 0
            ContinueLoop
        Case $msg = $aboutitem
            Msgbox(64,"About&#058;","mettre mon texte ici")
        Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

Exit
 
J'ai essayé plusieurs méthodes mais je ne trouve pas de solution fonctionnelle, un coup le clic droit sur l'icône ne fonctionne pas, l'autre fois il fonctionne mais plus la détection de l'insertion de la clé USB , etc ...

J'imagine qui faut mettre les includes en premier ensuite déclarer les variables puis entamer la while 1 mais rien n'y fait. Sachez que continue à chercher de mon coté mais j'arrête pour ce soir (13h d'info aujourd'hui), en espérant que vous me fassiez avancer et ainsi gagner du temps merci.

:D
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#2

Message par Tlem »

Le mieux, serait sans doute de compiler votre script et de lui attribuer un icône spécifique.

Jetez un oeil par ici : http://www.autoitscript.fr/forum/viewto ... =11&t=3453
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
wpicsou
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 23 sept. 2009 22:42
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#3

Message par wpicsou »

Bonjour et merci pour la réponse,
Je vais voir si cela correspond à mon besoin.
je vous remercie pour votre réponse rapide.
wpicsou
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 23 sept. 2009 22:42
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#4

Message par wpicsou »

Pensez-vous que l'IconTray doit mis codé comme une fonction ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#5

Message par Tlem »

Je ne comprend pas votre demande.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
wpicsou
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 23 sept. 2009 22:42
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#6

Message par wpicsou »

Désolé, je viens de me relire et je n'arrive pas à me comprendre moi même. En faites c'est simple, je veux tout simplement personnaliser le clic droit sur l'iconTray comme le démontre de script 2 dans mon script 1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#7

Message par Tlem »

Oui.
Hé bien utilisez les fonctions TrayXXXX. :shock:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
wpicsou
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 23 sept. 2009 22:42
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#8

Message par wpicsou »

Re à tous,
J'ai suivi vos conseils, relu le tutoriel sur le premier script et les descriptions des boucles, etc.

Voici mon code actuel :

Code : Tout sélectionner

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)   ; On supprime le Tray Icon par defaut

;Initialisation des variables
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colEvents = $objWMIService.ExecNotificationQuery("Select * From __InstanceOperationEvent Within 5 Where " & "TargetInstance isa 'Win32_LogicalDisk'")

;####################################################################


TraySetToolTip("titre_de_l'icon_tray") ; titre de l'icontray
;création du menu contextuel de l'icone tray
$tray_icon_aide = TrayCreateItem("Aide")
$tray_icon_contacts = TrayCreateItem("Contacts")
TrayCreateItem("")
$tray_icon_credits = TrayCreateItem("Crédits")
;fin de la création du menu contextuel de l'icone tray
TraySetState() ; affiche le TrayIcon
TraySetClick(16) ; Clic droit configuré pour répondre

;GUISetState()  ; je c pas a quoi ca sert

;################################################################################;
;                              Début du programme                                ;
;################################################################################;

While 1
    
    $tmsg = TrayGetMsg() ; Attribue a la variable $tmsg les actions effectuées sur l'icon tray
    $objEvent = $colEvents.NextEvent
    
    Select
        Case $tmsg = 0
                ContinueLoop
        Case $tmsg = $tray_icon_aide
                ;_affiche_tray_icon_aide()
                MsgBox(64,"désinfector","Aide")
        Case $tmsg = $tray_icon_contacts
                ;_affiche_tray_icon_contacts()
                MsgBox(64,"désinfector","Contacts")
        Case $tmsg = $tray_icon_credits
                ;_affiche_tray_icon_credits()
                MsgBox(64,"désinfector","Crédits")
        Case $objEvent.TargetInstance.DriveType = 2 And $objEvent.Path_.Class()="__InstanceCreationEvent"   ; -> Lors de l'AJOUT d'un périphérique de STOCKAGE USB , faire ce qui suit:
                
                $lettre_a_scanner = $objEvent.TargetInstance.DeviceId
                MsgBox(64,"désinfector","Votre périphérique USB vient d'être détecté, cliquez sur OK pour lancer l'analyse anti-virale")
                ;################################################################################;
                ;                   Début du scan par premier anti-virus (offiscan)            ;
                ;################################################################################;         
                ShellExecuteWait ("c:\program files\Trend Micro\Officescan Client\pccnt.exe",$lettre_a_scanner)
                ;################################################################################;
                ;                   Début du scan par deuxième anti-virus (McAffee)            ;
                ;################################################################################;             
                ShellExecuteWait ("c:\program files\Network Associates\VirusScan\scan32.exe",$lettre_a_scanner)
                ;################################################################################;
                ;                   FIN DU SCAN            ;
                ;################################################################################;             
                MsgBox(64,"désinfector","Analyse terminée vous pouvez déconnecter votre périphérique USB")     
                
    EndSelect       
        WEnd
        
; Création des fonctions précedemment appellées dans la boucle (while1 -> Wend)

;Func _affiche_tray_icon_aide()
;   MsgBox(64, "Aide à l'utilisateur","Il faut faire ceci puis cela")
;EndFunc

;Func _affiche_tray_icon_contacts()
;   MsgBox(64, "Contacts","appeller le 12345678")
;EndFunc

;Func _affiche_tray_icon_credits()
;   MsgBox(64, "Crédits","Créé par win")
;EndFunc

Exit

 
Celui ci fonctionne parfaitement pour lancer les scan anti virus cependant si je clic sur l'IconTray et que je clic sur un des éléments à afficher la fenêtre ne s'ouvre que quelques minutes après.

Je ne trouve pas la raison de ce problème.

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Personalisation IconTray dans premier script "utile"

#9

Message par Tlem »

Votre script est correct, mais il y à deux petits problèmes. ;)

Le premier est la partie :

Code : Tout sélectionner

        Case $tmsg = 0
                ContinueLoop
qui empêche la boucle.

Ensuite, plus important, la ligne

Code : Tout sélectionner

$objEvent = $colEvents.NextEvent
bloque d'après mes tests le script pendant environs cinq à dix secondes ...
Je n'ai pas cherché plus loin, mais soit vous trouvez un code de surveillance des USB qui prend moins de temps, soit vous devrez passer par un script secondaire pour effectuer la tâche.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre