Bonjour,
5oyez indulgent c'est ma première question sur ce forum, et désolé si je ne respecte pas, involontairement les standars.
Je viens de me lancer dans la création d'un petit script pour détecter l'insertion d'une clé USB, bien sur adapter d'un exemple trouvé sur le site.
Jusque là tout va bien il fonctionne parfaitement.
Cerise sur le gâteau j'ajoute un menu dans la TrayIcon, donc besoin de traiter les 'Events d'insertion et de sélection du menu'.
Chacun des codes fonctionne séparément dans des exemples séparés.
Je vais mettre les deux codes de détection dans le même While Wend et là... impossible de détecter les clicks sur le menu du Tray?
Par contre si je commente le bloc de détection d'insertion de la clé, le menu fonctionne.
Pour résumé, je détecte soit l'un soit l'autre 'Event'.
Bref j'en perd mon latin que je n'ai eu jamais eu.
En désespoir je m'adresse à la communauté pour me secourir.
Merci d'avance
► Afficher le texte
Code : Tout sélectionner
#cs AutoRun_CCI - Code du 05/12/2013. MegaTen
Ce code s'assure son l'unicité en exécution
detecte l'insertion d'une clé USB,
capture la device letter ou se trouve inserer cette clé
modifie les parametres du programme à executer
et lance l'execution du programme.
#ce
#include <Misc.au3>
; On s'assure qu'u'il n'y a pas une autre instance du script en cours
If _Singleton("Autorun_CCI", 1) = 0 Then
MsgBox(0, "Warning", "L'autorun CCI est déjà actif.", 2)
Exit
EndIf
GUISetFont(7, 700, 0, "Verdana")
;Mise en place du menu de la TrayIcon
Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.
$ApplName = TrayCreateItem ( "AutoRun CCI - 1.0" )
$Separation = TrayCreateItem("-----------------------")
Local $prefsitem = TrayCreateItem("Preferences")
Local $aboutitem = TrayCreateItem("About")
Local $exititem = TrayCreateItem("Exit")
TraySetState() ; Shows the tray icon (default)
;MsgBox(0, "Autorun_CCI", $prefsitem & " - " & $aboutitem & " - " & $exititem & " Error: "& Hex(@error, 8) , 2 )
$FF_PARM = ""
$FilePath = ""
$strComputer = "."
Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
If @error Then
MsgBox(0, "Autorun_CCI", "Error Getting an active Object. Error code: " & Hex(@error, 8))
Exit
EndIf
Local $colEvents = $objWMIService.ExecNotificationQuery _
("Select * From __InstanceOperationEvent Within 5 Where " _
& "TargetInstance isa 'Win32_LogicalDisk'")
While 1
#cs Bloc 1
;Traitement des messages d'insertion/éjection des clé USB
$objEvent = $colEvents.NextEvent
If $objEvent.TargetInstance.DriveType = 2 Then
Select
Case $objEvent.Path_.Class()="__InstanceCreationEvent"
; On vérifie l'existance des fichiers application.
$FilePath = $objEvent.TargetInstance.DeviceId & "\cle_cci\index.htm"
If FileExists($FilePath) Then
#MsgBox(4096, "Info", $FilePath & " Exists", 2)
; -no-remote : Allows multiple copies of application to be open at a time.
; -offline : Start with the offline mode.
; -url : Open URL in a new tab or window, depend on the browser option. -url can be omitted. You may list multiple URLs, separated by spaces.
$FF_PARM = "FirefoxPortable\FirefoxPortable.exe -url """ & $FilePath & """ -offline -no-remote"
#MsgBox(4096, "Info", $FF_PARM, 6)
Run ( $FF_PARM )
Else
MsgBox(4096, "AutoRun_CCI", $FilePath & " not found. Check your path or your USB key?")
EndIf
Case $objEvent.Path_.Class()="__InstanceDeletionEvent"
MsgBox(4096, "Info", "Drive " & $objEvent.TargetInstance.DeviceId & " has been removed.", 2 )
EndSelect
EndIf
#ce
;Bloc2
; Détection des messages de la Systray
Local $msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $prefsitem
MsgBox(64, "Preferences:", "OS:" & @OSVersion)
Case $msg = $aboutitem
MsgBox(64, "About:", "AutoRun_CCI Version 1.0", 2)
Case $msg = $exititem
ExitLoop
EndSelect
WEnd
Exit