L'utilisation est simple, l'exemple en haut du code suffit largement à la compréhension à mon avis!
J'espère que ça servira!
Code : Tout sélectionner
#include-once
Global $__USB_Detect_OnEventFunction = -1
#cs ----------
Enregistre une fonction call-back qui sera appelé à l'insertion/éjection
Elle doit avoir la forme suivante: _func($sPath, $iType)
$sPath = Chemin du disque USB inséré/éjecté (exemple: "F:")
$iType = 1 Pour Insertion, = 0 Pour Ejection
Exemple
_USB_OnEventRegister("_maFonction")
While 1
Sleep(250)
WEnd
Func _maFonction($disk, $type)
Switch $type
Case 1
ConsoleWrite("Disque " & $disk & " inséré" & @CRLF)
Case 0
ConsoleWrite("Disque " & $disk & " retiré" & @CRLF)
EndSwitch
EndFunc
#ce ----------
Func _USB_OnEventRegister($sFunc)
; If already registered, just change function name
If $__USB_Detect_OnEventFunction <> -1 Then
$__USB_Detect_OnEventFunction = $sFunc
Return 1
EndIf
Local $strComputer = "."
Local $objWMIServices = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
Local $sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($sink, "__SINK_")
$objWMIServices.ExecNotificationQueryAsync($sink, "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_LogicalDisk'")
$__USB_Detect_OnEventFunction = $sFunc
Return 1
EndFunc
Func _USB_OnEventUnRegister()
$__USB_Detect_OnEventFunction = -1
EndFunc
Func __SINK_OnObjectReady($objObject, $objAsyncContext)
If $objObject.TargetInstance.DriveType = 2 Then
Select
Case $objObject.Path_.Class() = "__InstanceCreationEvent"
Local $DriveIn = $objObject.TargetInstance.DeviceId
; ConsoleWrite("Lecteur " & $DriveIn & " ajouté" & @CRLF)
Call($__USB_Detect_OnEventFunction, $DriveIn, 1)
Case $objObject.Path_.Class() = "__InstanceDeletionEvent"
Local $DriveOut = $objObject.TargetInstance.DeviceId
;ConsoleWrite("Lecteur " & $DriveOut & " supprimé" & @CRLF)
Call($__USB_Detect_OnEventFunction, $DriveOut, 0)
EndSelect
EndIf
EndFunc ;==>SINK_OnObjectReady