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
 











