IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

comment detecter clé usb?


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut comment detecter la fermeture de session en vbs ?
    Bonjour les petit(e)s ami(e)s!!!
    voila je suis en info dans un IUT et on est confronté a un problème de clè usb.
    en effet ça arrive a tout le monde de l'oublié et de ce les faire voler...
    et je me demander si dans un .bat ou un un process en c ou encore en java( en assembleur(16 ou 32 bit) pourquoi pas), c'était possible de faire une petite appli résidente qui empêche de quitter la session quand la clé et branché... je pensai utiliser les api windows mais laquel utilisé j'en sait rien ...
    voili voilou... je veux juste des piste parce que je début dans la prog et j'ai pas une connaissance très pousser en la matière...
    Voila... si vous avez des idées je suis prenneur

    ciao

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    j'ai parler avec quelqu'un qui me dit qu'un service windows pourrais fonctionnner mais je n'est aucune idée de comment faire...


    si vous avez une idée... dès lundi j'aurais un plus de temps pourapprofondir mes recherches...
    merci a vous tous.. ciao

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Lorsque l'utilisateur demande de quitter la session le message WM_QUERYENDSESSION est envoyé à toutes les applications. A ce moment tu appelles GetLogicalDrives pour avoir la liste de tous les lecteurs actuellement connectés puis GetDriveType à chaque lecteur pour connaitre son type. S'il y a encore un périphérique amovible, tu annules la fermeture de session. Il suffit de ne pas passer le message à DefWindowProc, et de retourner tout simplement FALSE (<-- EDIT, je viens de vérifier sur MSDN). Peut également peut-être t'aider : le message WM_DEVICECHANGE est envoyé à chaque modification de l'état du poste de travail (connexion d'une nouvelle clé usb, retrait d'une clé, etc.).

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    ta solution me paraît assez logique mais quelle langage utilise tu ? un script .bat des api ? du java peut être ? désolé je débute
    merci déja pour ce début de piste

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ho ho ho. Tu as encore tout à apprendre de la prorammation sous Windows alors. Il y a de bons tutoriels ici même et sur mon site également. Ce n'est pas un problème de langage mais de plateforme (en l'occurence : Windows). Tu peux utiliser le C, C++, l'assembleur si tu le désires mais certainement pas Java et moins encore en bat. Personnellement je recommande le C.

  6. #6
    Inactif
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Melem Voir le message
    Ho ho ho. Tu as encore tout à apprendre de la prorammation sous Windows alors.
    Vu ta réponse, ce genre de remarque est à éviter, car tu as tout autant à apprendre (et je ne parle pas du site que je viens d'aller voir (gdi, hum...))
    Il te fauda apprendre notamment ce qu'est un disque amovible et la distinction entre une USB key et Rack Disk notamment...

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    bien donc dans un code en c il faudrait que j'appele toute les fonction windows cité si dessus ???
    il me reste plus qu'a me renseigné...
    merci beaucoup je vous tiens au courant de l'évolution de mon travail... je sais que il y a une distinction entre disque amovible et sata ... qui est considéré par xp comme un disque amovible mais comment faire la différence ?
    voili voilou....

    Merci bien pour vos réponses...
    je m'y met dans la semaine... la j'ai pas mal de boulot sur le feu....

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par fredd135 Voir le message
    Vu ta réponse, ce genre de remarque est à éviter, car tu as tout autant à apprendre (et je ne parle pas du site que je viens d'aller voir (gdi, hum...))
    Il te fauda apprendre notamment ce qu'est un disque amovible et la distinction entre une USB key et Rack Disk notamment...
    Peux-tu expliquer ? Il n'y a rien de mauvais dans ce que j'ai dit dans mon post. Je ne pouvais pas deviner que notre ami était encore vraiment débutant en programmation windows. Je pensais qu'il avait déjà au moins écrit des applications pour Windows, qu'il savait donc ce qu'était qu'un message, une procédure de fenêtre, etc. et il n'y a rien d'anormal ou d'écoeurant à cela. Tout ce que je pouvais faire dans ce cas, c'est donner quelques liens pour apprendre à programmer sous Windows. Et je ne sais peut-être pas ce que c'est qu'un disque dur ni une clé usb ou encore une disquette, mais heureusement ce sont des questions qu'il faut poser eu forum Hardware, pas en programmation windows.

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par fredd135
    Vu ta réponse, ce genre de remarque est à éviter,
    Pour l'instant il n'y a pas de quoi casser 3 pattes à un canard.
    Laisse aux modérateurs le soin de décider, selon les régles du club, ce qui est à éviter ou pas.
    Je vous invites à utiliser les MP pour vos prochains échanges.
    Cordialement.

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    Merci bien monsieur le Modo mais il ni a vraiment personne pour m'aiguiller un peu plus je suis allez voir sur ton site Melem c'est pas mal... je vais epelucher un peu les choses... mais en ce moment... j'ai pas trop de temps supplémentaire pouir bosser.... enp plus j'ai plus internet chez moi depuis un mois donc je peux bosser qu'avec des ressources locals...
    merci bien a vous tous...
    @ bientot j'espere

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wechteuf
    il ni a vraiment personne pour m'aiguiller un peu plus
    Tout est dans la réponse faite par Melem. La recherche, entre autres sur ces forums/FAQs, autour des 2 messages suffira pour commencer à coder une solution.
    Exemple PowerShell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PS C:\Temp> $getunite=get-wmiobject -class "Win32_LogicalDisk" -namespace "root\cimv2" -computername "."|where {$_.volum
    eName -eq "clé-usb"}
    PS C:\Temp> $getunite
     
    DeviceID     : F:
    DriveType    : 2
    ProviderName :
    FreeSpace    : 521887744
    Size         : 523476992
    VolumeName   : CLÉ-USB
    Cela ne résoud pas ton pb mais le fait d'utiliser WMI t'évitera de coder directement avec les API. Il faut que la clé USB porte un nom de volume sinon tu auras qq difficultés à déterminer le type de device USB, voir ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gwmi Win32_USBControllerDevice |%{[wmi]($_.Dependent)} |Sort Manufacturer,Description,DeviceID |Ft -GroupBy Manufacturer Description,Service,DeviceID
    Enfin si qq sait comment le déterminer simplement...

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    Coucou me revoilou... en fait, j'en est parler a un prof et il ma dit que les disque réseau et disque était toujours initialiser avec les même lettre... donc les périphérique mobile qu'el qu'il soit peuvent être facilement detecter en verifiant l'existeance de quelque lettre de driver et ça suffirait...
    voili voilou... de plus mon prof m'as dit que le vbs était une bonne alternative...
    je vais donc étudier tout ça cette après midi....
    merci a tous pour vos réponse...
    je vous donnerai la solution final

    ciao

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    Bonjour j'ai reussi grace à ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim oFSO
    	Set oFSO = CreateObject("Scripting.FileSystemObject")
    	If oFSO.DriveExists("F") OR oFSO.DriveExists("G") OR oFSO.DriveExists("H") OR oFSO.DriveExists("I") Then
    		msgbox "Attention un périphérique amovible est toujours branché, cliquer sur OK pour continuer",vbExclamation,"Attention !"
    	End If
    a detecter si une clé usb avec la lettre F ou G ou H ou I était brancher... mais
    je n'arrive pas a utiliser le code de la faq pour capter le message WM_QUERYENDSESSION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    'Message Windows QueryEndSession 
        Private Const WM_QUERYENDSESSION As Integer = &H11 
    
        'flag indiquant si la session est en cours de fermeture 
        Private _systemShutdown As Boolean = False 
    
    
        'Redéfinition de la fonction virtuelle WndProc 
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    
            'Mise dans systemShutdown la présence du message fermeture Windows 
            If m.Msg = WM_QUERYENDSESSION Then 
                _systemShutdown = True 
    
            End If 
            MyBase.WndProc(m) 
        End Sub 
    
        'Handler evenement closing 
        Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing 
            'Si le message fermeture Windows a été envoyé, on l'annule ! 
            If _systemShutdown Then 
    
                e.Cancel = True 
                _systemShutdown = False 
                MessageBox.Show("Fermeture de session windows annulée") 
    
            End If 
    
        End Sub
    vous pourriez m'éclairer sur l'utilisation que je dois en faire ?
    merci beaucoup ...

  14. #14
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bon, Je ne peux pas beaucoup t'aider en VBS mais en C, supposant que tu saches déjà créer une fenêtre, tu dois traiter le message WM_QUERYENDSESSION ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case WM_QUERYENDSESSION:
        return SessionEndHandler();
    Avec la fonction SessionEndHandler définie comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int SessionEndHandler()
    {
        TCHAR Drives[100], *p;
        int ret = TRUE; /* Accepter la fermeture de session */
        
        GetLogicalDriveStrings(sizeof(Drives) / sizeof(TCHAR), Drives);
        
        for(p = Drives + 8; *p != TEXT('\0'); p += 4)
        {
            if (GetDriveType(p) == DRIVE_REMOVABLE)
            {
               ret = FALSE; /* Annuler la fermeture de session */
               break;
            }
        }
        
        return ret;
    }
    Je rappelle que lorsque la fermeture de la session a été demandée, le message WM_QUERYENDSESSION sera envoyé à toutes les applications et évidemment, chaque application à sa propre manière de répondre à ce message. Cependant dès qu'une application refuse la demande, les autres applications (qui n'ont pas encore reçu le message) ne le recevront pas. Si tu veux intercepter le message avant même qu'elle ne parvienne à n'importe quelle fenêtre, il faudra implémenter un hook, c'est-à-dire une DLL qui intercepte tous les messages envoyés par Windows ou une une application avant même qu'elle ne parvienne à destination. Mais que tu choisisses de faire un hook ou une simple application, la manière de traiter le message WM_QUERYENDSESSION se fera toujours comme dans le code ci-dessus. Tu peux toujours poser des questions s'il y a quelque chose que tu ne comprends pas.

Discussions similaires

  1. Comment detecter la connexion d'une clé USB
    Par uvealoop dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 16h57
  2. Réponses: 3
    Dernier message: 06/06/2006, 17h15
  3. comment detecter un serveur interbase???
    Par delphien dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/04/2004, 17h35
  4. Comment detecter un polygon sous le curseur
    Par FreshVic dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2003, 10h48
  5. Comment detecter le type d'un objet?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2003, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo