Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

hook notification USB

10 réponses
Avatar
scraper
Bonjour/soir à tous !

un petit souci avec un hook qui me tracasse ...

voila :
j'essaie d'intercepter la notification d'insertion de Media, afin de catcher
et de tuer la fenêtre "d'autorun" : cette foutue fenêtre qui demande quelle
action on veut entreprendre ...

j'y arrive ma foi pas trop mal (plutôt bien, même) pour les CD/DvD, etc ....

je place un hook sur WH_SHELL, et j'intercepte l'évènement
HSHELL_WINDOWCREATED ...

bref, ça roule ...

mon souci est que je voudrais faire la même chose pour (aussi) les clés USB
et autres disques flash, etc ...

pour les USB, il semble bien qu'il faille appliquer ça :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/dbt_devnodes_changed.asp


et rechercher
DBT_DEVNODES_CHANGED

mais comme il est dit dans la page sus citée :
"There is no additional information about which device has been added to or
removed from the system. Applications that require more information should
register for device notification."

et là, j'avoue que je comprends pas ?

oui, je voudrais bien récupérer des infos additionnelles (comme le label qui
a été ajouté) mais comment enregistrer, et quoi ? j'avoue que je pédale dans
la semoule ....

autre chose, toujours sur la même page :

" Applications that maintain lists of devices in the system should refresh
their lists"

et c'est mon cas, malheureusement !!

j'ai un DriveListBox, et qaund j'insère ma clé USB, il est pas rafraichi, et
je ne sais pas comment le forcer ?

(j'ai bien essayé Drive1.Refresh, sans effet ...



voila, si vous avez une ch'tite idée, car j'avoue que, au point où j'en suis
rendu, depuis deux jours que je lis de la doc, je ne m'en sors pas :-(



d'avance merci



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

10 réponses

Avatar
Fred
Dans son message u$
scraper nous dit :

Bonjour/soir à tous !

un petit souci avec un hook qui me tracasse ...

voila :
j'essaie d'intercepter la notification d'insertion de Media, afin de
catcher et de tuer la fenêtre "d'autorun" : cette foutue fenêtre qui
demande quelle action on veut entreprendre ...

j'y arrive ma foi pas trop mal (plutôt bien, même) pour les CD/DvD,
etc ....
je place un hook sur WH_SHELL, et j'intercepte l'évènement
HSHELL_WINDOWCREATED ...

bref, ça roule ...

mon souci est que je voudrais faire la même chose pour (aussi) les
clés USB et autres disques flash, etc ...

pour les USB, il semble bien qu'il faille appliquer ça :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/dbt_devnodes_changed.asp


et rechercher
DBT_DEVNODES_CHANGED

mais comme il est dit dans la page sus citée :
"There is no additional information about which device has been added
to or removed from the system. Applications that require more
information should register for device notification."

et là, j'avoue que je comprends pas ?

oui, je voudrais bien récupérer des infos additionnelles (comme le
label qui a été ajouté) mais comment enregistrer, et quoi ? j'avoue
que je pédale dans la semoule ....

autre chose, toujours sur la même page :

" Applications that maintain lists of devices in the system should
refresh their lists"

et c'est mon cas, malheureusement !!

j'ai un DriveListBox, et qaund j'insère ma clé USB, il est pas
rafraichi, et je ne sais pas comment le forcer ?

(j'ai bien essayé Drive1.Refresh, sans effet ...



voila, si vous avez une ch'tite idée, car j'avoue que, au point où
j'en suis rendu, depuis deux jours que je lis de la doc, je ne m'en
sors pas :-(


d'avance merci



Bonjour,
Ton problème m'intéresse également.
Un intervenant à posté à propos de cela sur Windows2000 (Clef USB) et n'a
pas eu de réponse.
Je cherche pour ma part à déclencher un script sur insertion d'un appareil
numérique vu comme un disque amovible par le système.
(pour un appareil vu comme un périphérique d'image c'est simple)
Tu dis que tu tournes dans la doc depuis deux jours ? Je n'ose à peine te
proposer ce lien :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/registerdevicenotification.asp
Est-ce que cela peut aider ?


--
Fred
Avatar
François Picalausa
Hello,

Windows fournit un mécanisme spécifique pour désactiver l'autoplay:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/autoplay/autoplay2k_cookbook.asp?frame=true#autoplay2k_cancelautoplay
Peut-être trouveras-tu ton bonheur de ce côté?
--
François Picalausa

"scraper" a écrit dans le message de news:
u$
j'essaie d'intercepter la notification d'insertion de Media, afin de
catcher et de tuer la fenêtre "d'autorun" : cette foutue fenêtre qui
demande quelle action on veut entreprendre ...


Avatar
scraper
Bonjour Fred, dans le message
news:
tu disais :

> Bonjour,
Ton problème m'intéresse également.
Un intervenant à posté à propos de cela sur Windows2000 (Clef USB) et
n'a pas eu de réponse.
Je cherche pour ma part à déclencher un script sur insertion d'un
appareil numérique vu comme un disque amovible par le système.
(pour un appareil vu comme un périphérique d'image c'est simple)
Tu dis que tu tournes dans la doc depuis deux jours ? Je n'ose à
peine te proposer ce lien :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/registerdevicenotification.asp
Est-ce que cela peut aider ?



ben oui, je l'ai vu, et c'est justement le sens de ma question ci dessus
....

comme je disais :

[copy]

mais comme il est dit dans la page sus citée :
"There is no additional information about which device has been added to or
removed from the system. Applications that require more information should
register for device notification."

et là, j'avoue que je comprends pas ?

oui, je voudrais bien récupérer des infos additionnelles (comme le label qui
a été ajouté) mais comment enregistrer, et quoi ? j'avoue que je pédale dans
la semoule ....

[/copy]

lol


bon, sinon, j'ai (provisoirement, en attendant d'éclaircir ce point .... euh
... pour lequel je compte un peu sur votre aide ;-) ) j'ai donc réussi à
catcher l'insertion d'une clé USB, mais ça me plait pas trop .... :-(

grossièrement , je procède comme celà :

'dans ma procédure ....

Select Case uMsg
Case WM_DEVICECHANGE
ProcessDeviceChange wParam, lParam
End Select


'la sub appelée

Public Sub ProcessDeviceChange(wParam As Long, lParam As Long)

Dim DBHdr As DEV_BROADCAST_HDR
Dim DBVol As DEV_BROADCAST_VOLUME
Dim sDrive As String

CopyMemory DBHdr, ByVal lParam, LenB(DBHdr)
Select Case wParam
Case DBT_DEVICEARRIVAL
If DBHdr.dbch_devicetype = DBT_DEVTYP_VOLUME Then
CopyMemory DBVol, ByVal lParam, LenB(DBVol)
'If (DBVol.dbcv_flags And DBTF_MEDIA) = DBTF_MEDIA Then '=> ceci
pour la détection des CD Rom (source : AllAPI - CDSpy) il a fallu que je
mette cette ligne en commentaire pour que ça fonctionne ....
'Retrouve le volume inséré
sDrive = Chr$(FirstDriveFromMask(DBVol.dbcv_unitmask))
'Traitement =>
'End If
End If
End Select

End Sub

'Dans un module

Public Type DEV_BROADCAST_HDR
dbch_size As Long
dbch_devicetype As Long
dbch_reserved As Long
End Type
Public Type DEV_BROADCAST_VOLUME
dbch_size As Long
dbch_devicetype As Long
dbch_reserved As Long
dbcv_unitmask As Long
dbcv_flags As Integer
End Type

Private Function FirstDriveFromMask(ByVal unitmask As Long) As Byte
Dim b As Byte
For b = 0 To 25
If (unitmask And 2 ^ b) Then
FirstDriveFromMask = Asc("A") + b
Exit For
End If
Next b
End Function



mais j'avoue que j'aimerais trouver quel falg appliquer pour détecter
"proprement" les CD DvD et les autres types de lecteurs ....

le problème se situe donc pour moi maintenant là :
'If (DBVol.dbcv_flags And DBTF_MEDIA) = DBTF_MEDIA Then



ça, je comprends que c'est applicable aux CD .. mais que mettre pour les
autres lecteurs ?

en espérant que ça pourra tout de même t'aider ?



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
scraper
Bonjour François Picalausa, dans le message
news:
tu disais :


Hello,

Windows fournit un mécanisme spécifique pour désactiver l'autoplay:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/autoplay/autoplay2k_cookbook.asp?frame=true#autoplay2k_cancelautoplay
Peut-être trouveras-tu ton bonheur de ce côté?



ah ben M*** alors, l'avais pas vue, celle là ? :-(

merci, je vais étudier ça de manière approfondie

il faut en effet que ça obéisse à 2 critères :

ne pas nécessiter un reboot si les valeurs sont inscrites "à chaud"
laisser le systeme en l'état trouvé préalablement ;-)

je vais faire des essais

merci :-)


comme je disais plus haut, j'ai trouvé une solution, mais ça me semble du
"bricolage", et j'ai du mal à appréhender les effets de bord éventuels que
ça génèrerait à l'usage ??



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
scraper
Bonjour François Picalausa, dans le message
news:
tu disais :


Hello,

Windows fournit un mécanisme spécifique pour désactiver l'autoplay:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/autoplay/autoplay2k_cookbook.asp?frame=true#autoplay2k_cancelautoplay
Peut-être trouveras-tu ton bonheur de ce côté?



hemm ....

je viens de regarder plus attentivement, et cela soulève plsu de question
que cela n'en résoud ! lol

je suppose que je devrais pouvoir arriver à mon bonheur avec ça ?

Preventing AutoPlay for a Component
To prevent AutoPlay from launching in response to an event, add the
following REG_SZ value, as shown in this example.

HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows
CurrentVersion
Explorer
AutoplayHandlers
CancelAutoplay
CLSID
00000000-0000-0000-0000-000000000000

The value is the class identifier (CLSID) that the component generating the
event is known by in the running object table (ROT). The value has no data.



question : comment trouver le CLSID pour tous les types de media possibles
(pas tous, en fait, clé USB, compact ou smart Media cards ... et CD Rom ;-)

comment je retrouve ces infos, et qu'est ce que la ROT ? (plutôt, où puis je
la trouver ?

merci d'avance si tu veux bien m'éclairer sur ces ponts ....



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Hello,

Je ne sais si ça peut faire avancer le shmilblick, mais en effectuant un
click droit sur un lecteur supportant l'autoplay via propriétés, éxécution
automatique, il est possible de sélectionner l'action "Aucun". De même,
tweakui, dans les powertoys de XP, dans My Computer > Autoplay > Types
permet de supprimer l'autoplay.
Peut être qu'avec regmon activé, il y aurait moyen de savoir ce
qu'impliquent les cases à cocher?

--
François Picalausa

"scraper" a écrit dans le message de news:
u$
j'essaie d'intercepter la notification d'insertion de Media, afin de
catcher et de tuer la fenêtre "d'autorun" : cette foutue fenêtre qui
demande quelle action on veut entreprendre ...


Avatar
scraper
Bonjour François Picalausa, dans le message
news:
tu disais :


Hello,



bonjour :-)

Je ne sais si ça peut faire avancer le shmilblick, mais en effectuant
un click droit sur un lecteur supportant l'autoplay via propriétés,
éxécution automatique, il est possible de sélectionner l'action
"Aucun". De même, tweakui, dans les powertoys de XP, dans My Computer
> Autoplay > Types permet de supprimer l'autoplay.
Peut être qu'avec regmon activé, il y aurait moyen de savoir ce
qu'impliquent les cases à cocher?



effectivement, ça permet de retracer les inscriptions au Registre

mais ça me semble assez lourd à gérer dans le cas qui m'intéresse :
ça supposerait que pour chaque media inséré, j'aille inscrire les valeurs ad
hoc dans le Registre, pour tout type de contenu supporté ... en ayant pris
soin auparavant de noter la valeur précédente pour ces contenus ...
puis, à l'éjection du media, que je rétablisse l'état antérieur du Registre
....

ceci, sans être certain que le fait de porter ces inscriptions au Registre
après que le media ait été inséré désactive réellement son autorun ?

et je parle pas de l'état dans lequel serait laissé le Registre en cas de
plantage de mon appli :-(

j'aurais préféré employer la méthode que tu m'as indiquée, concernant
l'utilisation de moniker, mais là, très honnêtement, j'ai rien compris :-(

ce qui m'étonne, c'est que les supports USB sont correctement détectés, mais
pas les cartes type compactflash ?

peut être est ce dû à mon matériel ? (j'utilise un lecteur multicartes
intégré ??)

merci en tout cas de ton aide



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Hello,

"scraper" a écrit dans le message de news:
%
Bonjour François Picalausa, dans le message
news:
Je ne sais si ça peut faire avancer le shmilblick, mais en effectuant
un click droit sur un lecteur supportant l'autoplay via propriétés,
éxécution automatique, il est possible de sélectionner l'action
"Aucun". De même, tweakui, dans les powertoys de XP, dans My Computer
Autoplay > Types permet de supprimer l'autoplay.


Peut être qu'avec regmon activé, il y aurait moyen de savoir ce
qu'impliquent les cases à cocher?



effectivement, ça permet de retracer les inscriptions au Registre

mais ça me semble assez lourd à gérer dans le cas qui m'intéresse :
ça supposerait que pour chaque media inséré, j'aille inscrire les
valeurs ad hoc dans le Registre, pour tout type de contenu supporté
... en ayant pris soin auparavant de noter la valeur précédente pour
ces contenus ... puis, à l'éjection du media, que je rétablisse l'état
antérieur du
Registre ....



Je suis pas sûr d'avoir compris...
En modifiant la valeur de
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoDriveTypeAutoRun
pour la valeur 0x95, ça désactive normalement l'autoplay USB... ton
application doit réellement désactiver ces notifications en temps réel?
(le chemin de la valeur a été récupéré avec regmon & tweakui)

j'aurais préféré employer la méthode que tu m'as indiquée, concernant
l'utilisation de moniker, mais là, très honnêtement, j'ai rien
compris :-(



En fait, je ne connais pas les détails de l'implémentation. Il s'agit de
techniques/fonctionnalités de COM qui vont au dela de mes connaissances...
Mais si y a un expert COM dans la salle?

--
François Picalausa
Avatar
scraper
Bonjour François Picalausa, dans le message
news:%23tLwH$
tu disais :


Je suis pas sûr d'avoir compris...
En modifiant la valeur de
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoDriveTypeAutoRun
pour la valeur 0x95, ça désactive normalement l'autoplay USB... ton
application doit réellement désactiver ces notifications en temps
réel? (le chemin de la valeur a été récupéré avec regmon & tweakui)



eh ben non ...

je me contente de faire un hook, et de détruire la fenêtre :-)

j'aurais préféré employer la méthode que tu m'as indiquée, concernant
l'utilisation de moniker, mais là, très honnêtement, j'ai rien
compris :-(



En fait, je ne connais pas les détails de l'implémentation. Il s'agit
de techniques/fonctionnalités de COM qui vont au dela de mes
connaissances... Mais si y a un expert COM dans la salle?



ah ben me v'la rassuré ! lol

j'avais vraiment aucune chance rofl




--

Adresse invalide
Merci de me répondre sur le Forum ...
mon site : http://scraper.chez.tiscali.fr

scraper
Avatar
scraper
Bonjour François Picalausa, dans le message
news:%23tLwH$
tu disais :


Hello,



re :-)

Je suis pas sûr d'avoir compris...
En modifiant la valeur de
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoDriveTypeAutoRun
pour la valeur 0x95, ça désactive normalement l'autoplay USB... ton
application doit réellement désactiver ces notifications en temps
réel? (le chemin de la valeur a été récupéré avec regmon & tweakui)



au fait ...

il semble qu'il faille redémarrer, pour que ce type d'inscription soit pris
en compte ... :-)

donc, je vais rester avec mon hook sur la fenêtre autorun ...

mais ça ne m'explique pas pourquoi les cartes smartmedia ou autre ne sont
pas détectées par ce hook (pourtant, elles sont assimilées à des disques dur
amovibles, tout comme les clés USB ?

mystère ....



--

Adresse invalide
Merci de me répondre sur le Forum ...
mon site : http://scraper.chez.tiscali.fr

scraper