Bloquer le bouton droite et gauche de la souris ! [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007
-
Warnings
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007
-
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 ;)

Si quelqu'un à une idée, ce serait sympathique ;)

Merci d'avance

Warnings

17 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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( _

System.Reflection.Assembly.GetCallingAssembly().GetModules()(0)), _

New HookProc(
AddressOf MouseProc))

End
Sub

Public
Function MouseProc(
ByVal nCode
As
Integer,
ByVal wParam
As
Integer,
ByVal lParam
As IntPtr)
As
Integer

If wParam < &H201
Or wParam > &H206
Then

Return CallNextHookEx(hHook, nCode, wParam, lParam)

Else

Return 1

End
If

End
Function

Sub InstallMouseHook(
ByVal hMod
As IntPtr,
ByVal Proc
As HookProc)hHook = SetWindowsHookEx(WH_MOUSE_LL, _

Proc, hMod, 0)

End
Sub

Sub UninstallMouseHook()UnhookWindowsHookEx(hHook)

End
SubEnd

ClassPS : N'oublie pas : Alt-F4 pour quitter

<hr width="100%" size="2" />Julien.
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Salut,

Si...si...essaye de trouver un pavé sensitif(comme sur les portable) tu n'auras plus de problème de clicks....

Bon je déconne....Par contre je ne vois pas vraiment ou est ton problème, car tu n'as cas pas de servir des évènement click(boutons) de ta souris...

Ou alors faut voir si il n'y a pas une Api qui peut geler tes boutons...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
MouseDown ou MouseUp

pas de parametre passé a l'evenement Click

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
21
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) ?
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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...

<hr size="2" width="100%" />Julien.
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007

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.

Merci pour vos réponses
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
21
"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 ?
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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

Const WM_LBUTTONDOWN = &H201
Const WM_RBUTTONDOWN = &H204

Tu y vois plus clair ?

<hr width="100%" size="2" />Julien.
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007

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é :(
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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...

<hr width="100%" size="2" />Julien.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
21
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.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
En tout cas, ce n'est pas gentil pour ceux qui ont encore des souris sans molette...

MPi
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007

1. j'utilise VLC
2. Regedit dans HKLM/Software/Microsoft/Windows NT//Current Version/WinLogon
Clé : Shell

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.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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...)

<hr width="100%" size="2" />Julien.
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007

Ecoute, je suis désolé mais je n'ai aucun tuto. Je recherche simplement WH_MOUSE, WM_LNBUTTONDOWN et je tente de trouver un code qui puisse m'aider. Sur la MSDN, il n'y a rien qui explique vraiment comment faire. Les seules codes que j'ai trouvé ce sont ces deux là : (pour le clavier : http://www.vbfrance.com/codes/RAJOUTEZ-RACCOURCIS-CLAVIER-DANS-VOS-PROGRAMMES_33120.aspx) et ça http://www.vbfrance.com/codes/HOOK-CLAVIER-SOURIS-PERMET-BLOQUAGE-CLAVIER-OU-SOURIS_32067.aspx

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


HookHandleMouse = SetWindowsHookEx(WH_MOUSE_LL, AddressOf HookRedirMouse, App.hInstance, 0)
HookMouse = 1


Exit Function


HandledErr:
HookMouse = 0


End Function

*******************

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 !!!
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.
Messages postés
10
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
18 juin 2007

Je te remercie énormement pour ton code !!! :)

Il marche à la perfection ;)