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

API, COM et SDKs Delphi Discussion :

Comment désactiver les actions automatiques de Windows ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Candidat au Club
    Profil pro
    Chef d’entreprise
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Comment désactiver les actions automatiques de Windows ?
    Bonjour à tous,

    Lors que je branche ma caméra sur mon port 1394, windows ouvre une boite de dialogue me proposant d'executer un action automatiquement.
    Je souhaiterai désactiver cette boite de dialogue (ou y répondre) dans mon programme.

    Est-ce que je dois modifier une valeur dans la base de regitre? si oui, laquelle?

    merci d'avance.

  2. #2
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    hélo !

    Je pense avoir un début de piste, après recherche dans le registre :

    La clef "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers" semble tout à fait correspondre à ce que tu cherches !!

    Le problème, c'est que le contenu des clefs n'est pas super facile à interpréter !!
    En gros apparemment il y a trois clefs :
    -EventHandlersDefaultSelection -> Action sélectionnée par défaut pour n'importe quel "événement"
    -UserChosenExecuteHandlers -> Action spécifique choisie pas l'utilisateur
    -UserDefaults -> Action par défaut spécifiée par l'utilisateur ?? Je sais pas trop, car ça me semble de trop !

    Ensuite chacune de ces clefs contient des valeurs, qui correspondent chacune à une action à effectuer pour tel ou tel périphérique, à tel événement. C'est là que ça se corse !
    Voici un exemple de ce que je trouve dans "UserChosenExecuteHandlers" :

    H:\\?\IDE#CdRomHL-DT-ST_DVD-ROM_GDR8163B_______________0L15____#4&1058285&0&1.0.0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}+PlayCDAudioOnArrival = MSPlayCDAudioOnArrival
    Le "MSPlayCDAudioOnArrival" est un truc classique dans la base de registre : il renvoit vers une clef qui porte ce nom, et qui contient toutes les infos nécessaires à la bonne exécution de l'action. C'est en fait le nom du "handler", et tous les handlers sont listés ici :
    "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers"

    (Ca peut donner des idées à certains de savoir ça... Pas mal de choses en perspective )

    Bon ne nous éloignons pas trop, ce qui t'intéresserait toi, ce serait de trouver la valeur qui correspond à ton port 1394 dans "UserChosenExecuteHandlers" (c'est une hypothèse) et modifier le nom du handler qu'il contient en "MSTakeNoAction" (valeur trouvée dans la liste des Handlers) !
    Le problème, c'est que les noms des valeurs sont... compliqués !!
    Ils contiennent apparamment :

    -La lettre du lecteur du périphérique concerné (s'il y en a)
    -Un identifiant système du périphérique
    -Un GUID qui identifie une "DeviceClass"
    -Le nom de l'événement pour lequel il faut prendre en compte cette valeur

    Une vraie uzine à gaz !!

    Bon le seul truc que j'aie pu trouver, c'est que le GUID contenu renvoit apparemment sur une clef située ici :
    "HKLM\SYSTEM\ControlSet001\Control\DeviceClasses"
    et aussi "HKLM\SYSTEM\ControlSet002\Control\DeviceClasses"... Va savoir pourquoi y en a deux, et surtout s'il y en aura plusieurs sur tous les PC, si ça commencera à 1 partout etc !
    Au final ça doit pourvoir servir d'étudier cette clef car ça me semble exploitable pour trouver ce qu'il te faut : de quoi créer toi-même une valeur dans "UserChosenExecuteHandlers" s'il n'y a rien à modifier (si l'utilisateur n'a rien choisi).

    Tu peux essayer de bidouiller ainsi : assigne une action par défaut lorsque tu branches ta caméra et oublie pas de cocher "toujours effectuer cette action". Ensuite regarde ce qui a été ajouté dans le registre, et relève la valeur enregistrée dans "UserChosenExecuteHandlers". Seul le GUID devrait changer d'un PC à l'autre je pense.
    Dans ton programme tu peux donc faire une fonction pour rechercher dans les clefs de "HKLM\SYSTEM\ControlSet001\Control\DeviceClasses" (sous réserve de bien pouvoir trouver cette clef partout), celle qui contient la chaine identifiant ta caméra.

    Une fois que tu as cette clef, va dans sa sous-clef '#' et récupères la valeur "SymbolicLink". Ajoutes-y un '+' et le nom de l'événement qui t'intéresse ("PlayCDAudioOnArrival" dans mon exemple) : tu as ce que tu veux !!
    Ajoute la valeur obtenue contenant la donnée "MSTakeNoAction" dans "UserChosenExecuteHandlers" et ça devrait fonctionner !!

    Vala... Ce que je pensais une piste de recherche se termine en un semblant de solution (qui doit sûrement posséder quelques lacunes) !
    Je te cache pas que je n'ai rien testé, j'ai tapé ça au fur et à mesure que je découvrais les clefs dans la base de registre...

    En espérant que ça puisse t'aider !
    Bonne prog' !
    Bestiol.

    [EDIT:
    tu as ce que tu veux !!
    Il manque peut-être quelque chose... Dans le cas d'un lecteur CD il y a la lettre du lecteur qui correspond à placer avant la chaine obtenue... Pour une webcam, je ne sais pas s'il y a besoin de quelquechose ou non...]
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  3. #3
    Candidat au Club
    Profil pro
    Chef d’entreprise
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse...
    tu as vu juste...je viens de faire quelques tests et effectivement, la seule solution est de modifier la clef 'HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\UserChosenExecuteHandlers\'
    Pour cela, il faut que je parcours cette clef pour mettre la valeur de 'H:\\?\AVC#Canon&DM-XM2&CAMCORDER&DV#99AA640000850000#{cc7bfb41-f175-11d1-a392-00e0291f3959}\GLOBAL+VideoCameraArrival' a MSTakeNoAction.

    Mais je peux modifier cette valeur que lorsqu'elle existe ou bien je peux la créer mais pour cela il faut connaître le materiel de l'utilisateur...Bref, c'est compliqué...Peut-être le plus simple serait-il faut cacher cette fenêtre?
    j-phi

  4. #4
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Effectivement, il faut connaitre le matériel de l'utilisateur pour pouvoir créer une valeur... Je pensais en lisant ton message que ton programme était destiné à être utilisé avec ta seule webcam.

    Tu peux effectivement essayer de cacher la fenêtre... Mais il y a peut-être aussi un autre valeur du registre qui indique de ne rien faire à la détection d'un pérphérique plug-n-play.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  5. #5
    Candidat au Club
    Profil pro
    Chef d’entreprise
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon je crois tenir la solution :
    dans la clef
    'HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\DeviceHandlers\VideoCameraDeviceHandler\EventHandlers\DeviceArrival' on trouve VideoCameraArrival....ce qui lance la boite. Dans cette boite, on trouve les valeurs stockées dans la clef :
    'HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\VideoCameraArrival' donc MovieMaker, etc...

    Donc il suffit d'enlever le 'VideoCameraArrival' de la première clef. Facile à dire, je n'ai jamais osé touché la base de registre par la programmation.

    merci encore à Bestiol qui m'a ouvert les yeux !

  6. #6
    Candidat au Club
    Profil pro
    Chef d’entreprise
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    c'est bon merci encore!

  7. #7
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    ravi de t'avoir ouvert les yeux... c'est vrai quoi t'aurais pu te prendre une porte !

    *sort en courant*

    Plus sérieusement, je suis content que ça ait fonctionné !
    Hésite pas à modifier la base de registre si tu es SÛR de ce que tu fais... Pense également, surtout dans ce genre de cas où tu vas imposer ton "TakeNoAction", à sauvegarder les données contenues auparavant, et à proposer à l'utilisateur de quoi remettre les valeurs par défaut.

    Bonne continuation ! ^^
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Par sécurité, tu devrais sauvegarder la valeur de la clé avant de la modifier, et proposer à l'utilisateur le choix de l'action (après tout, cela ne le dérange peut-être pas d'avoir ce dialogue à la connexion du périphérique).

    à+

    De retour parmis vous après 10 ans!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/08/2013, 15h59
  2. Réponses: 3
    Dernier message: 23/06/2010, 11h25
  3. Réponses: 1
    Dernier message: 01/12/2005, 17h52
  4. Réponses: 6
    Dernier message: 11/01/2005, 12h49
  5. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 13h34

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