Page 1 sur 1

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

Posté : mer. 23 sept. 2009 23:01
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

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

Posté : jeu. 24 sept. 2009 07:42
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

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

Posté : jeu. 24 sept. 2009 09:23
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.

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

Posté : ven. 25 sept. 2009 19:30
par wpicsou
Pensez-vous que l'IconTray doit mis codé comme une fonction ?

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

Posté : sam. 26 sept. 2009 19:49
par Tlem
Je ne comprend pas votre demande.

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

Posté : dim. 27 sept. 2009 21:59
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.

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

Posté : dim. 27 sept. 2009 22:51
par Tlem
Oui.
Hé bien utilisez les fonctions TrayXXXX. :shock:

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

Posté : dim. 04 oct. 2009 23:04
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

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

Posté : lun. 05 oct. 2009 01:17
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.