[Func] _USB_OnEventRegister

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[Func] _USB_OnEventRegister

#1

Message par matwachich »

Une fonction toute simple qui permet d'enregistrer une autre fonction qui sera appelée lors de l'insertion/retrait d'un disque USB.
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
 
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#2

Message par cutprod »

Simple, efficace...
Merci a toi pour ce partage qui va faire des heureux:D
Cut, srcipteur du dimanche...désolé !-)
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#3

Message par Habibsbib »

Il n'y a pas moyen de connaître le chemin d'accès de la clé USB insérée ?
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#4

Message par matwachich »

Bah si, regarde bien l'exemple!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#5

Message par Habibsbib »

Ah pardon, je n'avais pas vu :)
Très beau travail en tout cas.
ethneldryt
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#6

Message par ethneldryt »

Bonsoir, je voudrai savoir si cette fonction gère le multi insertion?
C'est a dire si j’insère une 2 eme clef usb, si celle si est détecter? Merci.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#7

Message par Tlem »

Au lieu de poser bêtement la question, pourquoi n'essayez vous pas !!! :evil:
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é".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#8

Message par matwachich »

Oui elle gère cela, mais j'ai remarqué que parfois, y'a des ratés! (très peu heureusement!).
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#9

Message par ricky »

Hello,

merci pour cette fonction, elle est vraiment pas mal. Désolé de la déterrer.
J'ai vu ton autre mais celle-ci marche beaucoup moins bien.

Maintenant, il y a-t-il un moyen de la bloquer en lecture et écriture jusqu'à une certaine action (pression bouton,...)?

Merci d'avance pour ton aide
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#10

Message par matwachich »

J'ai pas vraiment compris la question.
Si vous voulez stopper la détection, il suffit d'utiliser la fonction _USB_OnEventUnRegister()
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _USB_OnEventRegister

#11

Message par TommyDDR »

Je pense qu'il veut bloquer l'accès à la clé.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre