Warnings
Messages postés10Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention18 juin 2007
-
13 juin 2007 à 08:45
Warnings
Messages postés10Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention18 juin 2007
-
18 juin 2007 à 07:55
Hello,
J'ai besoin de bloquer uniquement le clique droit et le clique gauche de la souris ou changer l'assignation de ces deux boutons. (Clique droit F1 et clique gauche F2, par exemple)
J'utilise le scroll pour stoper/lire/recommencer une vidéo qui doit tourner en boucle. Pour le moment à part démonter la souris, je n'ai pas trouvé d'autres solutions ;)
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 15 juin 2007 à 11:45
Pff faut tout faire soi-même ici
Colle-ca dans un form, et arrête toi dessus pour bien comprendre le fonctionnement...
Public
Class Form1
Const WH_MOUSE_LL
As
Integer = &HE
Public
Delegate
Function HookProc(
ByVal nCode
As
Integer,
ByVal lParam
As
Integer, _
ByVal wParam
As IntPtr)
As
Integer
Declare
Auto
Function CallNextHookEx
Lib
"user32" ( _
ByVal hHook
As
Integer,
ByVal ncode
As
Integer, _
ByVal wParam
As
Integer,
ByVal lParam
As IntPtr)
As
Integer
Declare
Auto
Function SetWindowsHookEx
Lib
"user32" ( _
ByVal idHook
As
Integer,
ByVal lpfn
As HookProc, _
ByVal hmod
As IntPtr,
ByVal dwThreadId
As
Integer)
As
Integer
Declare
Auto
Function UnhookWindowsHookEx
Lib
"user32" ( _
ByVal hHook
As
Integer)
As
Integer
Dim hHook
As
Integer
Private
Sub Form1_FormClosing(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.FormClosingEventArgs)
Handles
Me.FormClosingUninstallMouseHook()
End
Sub
Private
Sub Form1_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.LoadInstallMouseHook(System.Runtime.InteropServices.Marshal.GetHINSTANCE( _
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 juin 2007 à 09:13
Bonjour,
Question :
s'agit-il d'un contrôle appartenant directement à ton application (dont tu peux donc gérer toi-même les événements) ?
ou
d'un objet OLE inséré ?
ou
d'une fenêtre externe (appellée par ton appli, par exemple) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 13 juin 2007 à 09:18
Salut,
Tu peux mettre un hook de bas niveau sur les évènements de la souris et ne pas les transmettre s'il s'agit des boutons concernés. Tu trouveras des sources sur les hooks sur ce site...
Warnings
Messages postés10Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention18 juin 2007 13 juin 2007 à 09:28
En faite, je ne lance pas l'explorer au démarrage du PC. Je pensais lancer directement l'application qui bloque le bouton droit/gauche de la souris puis lancer une vidéo en pleine écran. Avec la molette de la souris, ils peuvent contrôler la vidéo sans pouvoir la fermer ou sortir du pleine écran. (Pas de clavier et avec le bouton droite/gauche de bloquer, ils ne peuvent rien faire.)
Par contre, je n'ai pas trouver de "hook" pour bloquer ou modifier uniquement le bouton droite/gauche de la souris. J'ai juste trouver des hooks pour bloquer totalement la souris.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 juin 2007 à 09:35
"En faite, je ne lance pas l'explorer au démarrage du PC. Je pensais lancer directement l'application qui bloque le bouton droit/gauche de la souris puis lancer une vidéo en pleine écran"
Je comprends mal, là ...
Au bout du compte, tu souhaites ne te servir de VB que pour faire une appli dont le seul tôle serait celui de bloquer certains boutons de ta souris pendant que tourne une application tierce (ta video) ?
Et rétablir à la fin de ta video, je suppose ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 13 juin 2007 à 09:38
Bah oui mais quand je te dis de faire une recherche de sources, ce n'est pas pour copier coller bêtement les résultats dans ton application, il s'agit de comprendre ce que tu vas trouver afin de pouvoir le refaire toi-même, et ainsi pouvoir paramètrer ce que tu vas bloquer...
Regarde les paramètres passés à la procédure mise en place :
Le paramètre wParam contient le type du message (WM_LBUTTONDOWN à WM_MOUSEWHEEL)
Le paramètre lParam contient un pointeur sur une structure MOUSEHOOKSTRUCT qui, elle, contient une structure POINT indiquant la position de la souris ; le handle de la fenêtre qui va recevoir le message ; le type de cible qui se trouve sous la souris et finalement des informations complémentaires pour le message. Voici un tableau exhaustif des types de cibles.
Et comme je suis bon, je te donne les valeurs des constantes
Warnings
Messages postés10Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention18 juin 2007 13 juin 2007 à 11:36
Merci pour l'astuce mais il y a juste encore une chose que je n'ai pas trouvé, c'est comment faire pour que ce soit utiliser de manière global et pas uniquement sur l'application VB. En faite, je ne veux pas que le menu (clique droit) s'affiche sur le player ni que le double clique permette de sortir du mode pleine écran.
Désolé, je sais que je suis nul mais je n'ai pas trouvé d'aide dans la MSDN pour VB6 et les sources que j'ai trouvé concerne uniquement l'application VB et ce n'est pas applicable globalement.
"Au bout du compte, tu souhaites ne te servir de VB que pour faire une appli dont le seul tôle serait celui de bloquer certains boutons de ta souris pendant que tourne une application tierce (ta video) ?
Et rétablir à la fin de ta video, je suppose ?"
Voilà, c'est exactement ça sauf que la vidéo tourne en boucle mais je veux que la personne puisse pauser/recommencer la lecture et revenir au début. Le scroll suffit pour faire cela (définissiable dans le lecteur directement) par contre s'ils ont les deux boutons de la souris, ils peuvent sortir du mode pleine écran et fermer le player par exemple ... Ils se retrouvent avec un écran de fond et c'est tout vu que l'explorer ne se lance pas ...
Merci beaucoup pour votre aide
PS : Je n'ai vraiment jamais utilisé ces fonctions donc j'ai un peu de peine pour les utiliser ... Vraiment désolé :(
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 13 juin 2007 à 11:51
Je ne sais pas sur quelle source tu es tombé, mais j'imagine que tu as utilisé la constante WH_MOUSE comme paramètre pour installer le hook. Je t'avais parlé d'un hook de bas niveau, cela signifie que tu dois alors utiliser la constante WH_MOUSE_LL (qui vaut 14 ou E en hexadécimal)...
Je pense que ca devrait marcher avec ça...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 juin 2007 à 12:18
Je me doutais un peu de la chose !
<<<<Et si tu nous axposais dans le détail :
1) quelle appli (un logiciel, surement) tu lances pour lire ta vidéo
2) depuis où tu la lances
3) comment tu la lances
Il n'est pas impossible que l'on trouve un solution plus simple et moins scabreuse (en tout état de cause moins risquée) pour que tu pareviennes à tes fins.
Mais il va te falloir être très précis (utilise par exemple : 1- je fais ceci -2 - je fais celà... etc...) afin d'éviter de recommencer ce scénario d'approche par questions/réponses/pertes de temps.
Je remplace "explorer.exe" par la future application VB qui va finalement lancer VLC avec les paramètres permettant de lancer la vidéo en full screen.
Les PC seront sous blindage donc intouchable, la seule chose qui sera visible à part l'écran sera la souris. Et pour éviter qu'ils ferment vlc, il faut impérativement que je bloque les 2 boutons de la souris.
Sinon pour la solution avec WM_MOUSE_LL, le souci c'est que cela bloque totalement le curseur, impossible de le bouger. De plus, je ne sais pas comment passer les paramètres pour qu'il bloque que le bouton droite et gauche. J'ai fait quelques tests mais aucun ne marche.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 14 juin 2007 à 18:42
Comme je t'ai expliqué il y a quelques messages, tu dois filtrer les messages selon les constantes
Const WM_LBUTTONDOWN = &H201
Const WM_RBUTTONDOWN = &H204
Donc simplement, dans ta procédure dans laquelle tu traite ton hook, si le wParam vaut WM_LBUTTONDOWN ou s'il vaut WM_RBUTTONDOWN, tu ne retransmet pas pas le message, mais dans tous les autres cas tu le retransmet ! (CallNextHookEx je pense, regarde dans ton tuto comment il fait...)
Par contre, dans celui pour le clavier, ça ne fait que de détecter quelles touches ont été appuyer et je n'arrive pas à le modifier pour détecter un clique de souris et même si j'y arrive, je ne sais pas comment bloquer ça pour pas que l'application le recoive ... Pour l'autre, j'ai essayé de change ça :
*******************
Function HookMouse() As Integer
On Error GoTo HandledErr
Public Function HookRedirMouse(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
HookRedirMouse = WM_LBUTTONDOWN & WM_RBUTTONDOWN 'à la place de -1
End Function
*******************
' Notre but étant de paralyser le clavier, il nous suffit de ne pas renvoyer les messages
' qui lui sont destinés. Nous renvoyons donc -1 ( Considéré comme valeur Nulle ).
Donc je pensais qu'en mettait les 2 valeurs, ils renvoyaient tout sauf le button droite et gauche de la souris mais avec "WM_MOUSE_LL", le curseur est totalement bloqué et sans le _LL, les paramètres ne sont pas pris en compte et le curseur est disponible hors application.
Je n'ai trouvé aucun tuto et aucun autre code en VB pouvant m'aider. J'ai juste trouver des docs en C/C++ mais c'est tout !!!
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 15 juin 2007 à 11:46
Ha oui sur la ligne
If wParam < &H201 Or wParam > &H206 Then
Les valeurs &h201 à &h206 correspondent aux constantes que l'on veut bloquer, il y en a un peu plus que les deux que je t'avais mise, comme left button up, dble clic etc...
<hr width="100%" size="2" />Julien.