Désactiver la souris

  • Initiateur de la discussion Initiateur de la discussion crio
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

crio

Guest
Bonjour le forum,

J'aimerai savoir s'il est possible de désactiver la souris en VBA.

Je m'explique: pour éviter que l'utilisateur ne clique n'importe où ou qu'il change d'application durant l'exécution d'une macro Excel, je souhaite pouvoir bloquer toutes les commandes envoyées de la souris vers le pc: clics en priorité et mouvements si cela est possible.

Ce blocage devrait être effectif sur l'ensemble des applications(en gros sur tout Windows) et pas seulement sur l'instance Excel ouverte (ca, j'ai vu qu'on pouvait le faire assez facilement).

J'ai chercher sur le net des exemples mais je n'ai trouver que des fonctions qui soient bloquent la souris uniquement sur l'instance Excel, soit bloque et la souris et le clavier.

Une fois les opérations nécessitant ce blocage, il faudra débloquer la souris pour que l'utilisateur puisse l'utiliser normalement.

Merci d'avance,

Crio
 
Re : Désactiver la souris

Re, VictoRe 21

Comme il vaut mieux prévenir que guerir
Bloquer la souris :

rundll32 mouse, disable

Réactiver la souris :

rundll32 mouse, enable

---------------------------

PS: J'ai testé
Ouf ca marche pas (en tout cas avec cette syntaxe et sous Vista)

Désactiver le clavier :

rundll32 keyboard, disable

Réactiver le clavier :

rundll32 keyboard, enable
 
Dernière édition:
Re : Désactiver la souris

Bonjour,

Merci de vous être pencher sur mon problème.

Et en cas de plantage, comment tu reprends la main sur le PC ?

Et que fais-tu des raccourcis-clavier ?
De la touche Windows ?

Je me suis peut être mal expliqué dans mon premier message:
-Je veux uniquement bloquer la souris:
-les clics en priorité
-les mouvements si cela est possible

-Ne pas bloquer le clavier pour justement pouvoir reprendre la main sur le PC en cas de plantage.

J'ai trouvé des exemples sur internet utilisant le principe du "hook".
Cela marche très bien pour bloquer les clics de souris dans l'instance Excel mais dès que je sors de l'instance ou de la fenêtre de code la souris revient dans son état normal.

Voici le code qui permet de faire ça:

Code:
Option Explicit
Global HookHandleMouse As Long
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Public Const WH_MOUSE = 7
Public Const HC_ACTION = 0
' ###################################################################################################
' Dans cette fonction, in lance un hooking souris. Le 1er paramètre définit l'IDHook
' ( en l'occurence la souris ).
' ( L'IdHook est définit par des constantes qui sont dans la visionneuse d'API )
' Le 2ème paramètre est l'adresse de la fonction qui traite les messages windows.
' Attention , "AdressOf" ne peut être utilisé que pour un fonction qui est dans un module.
' Le 3ème paramètre est la DLL qui contient la procédure de Hook ( Ici, c'est l'instance du programme
' qui contient cette procédure ( HookRedirMouse )
' Le dernier paramètre, est le thread sur lequel agit le hook. "0" permet de ne pas définir de thread
' précis, et donc de hooker tous les threads.
' /!\ Si le hook agit sur un thread précis qui a été crée par le programme lui même, il faut
' que le 3ème paramètre ( hmod soit à "NULL" )

' ###Hook Souris###

Function HookMouse() As Integer
On Error GoTo HandledErr

' Lancement du Hook => Redirection des messages Windows sur notre fonction 'HookRedirMouse

HookHandleMouse = SetWindowsHookEx(WH_MOUSE, AddressOf HookRedirMouse, App.hInstance, 0)

' La fonction renvoi 1 si elle à fonctionné, et 0 s'il y a eu une erreur.

HookMouse = 1
Exit Function
HandledErr:
HookMouse = 0
End Function

' Cette fonction est très importante, elle permet de rediriger les messages vers le thread
' d'origine. Si vous ne l'appelez pas avant de quitter, vous devrez rebooter ;-)

Function unHookMouse() As Integer
On Error GoTo HandledErr

' Appel l'API d'Unhooking
UnhookWindowsHookEx HookHandleMouse

' Pareil que précédent, la fonction renvoi 1 ou 0 selon la réussite ou l'echec de la fonction.
unHookMouse = 1

Exit Function
HandledErr:
unHookMouse = 0
End Function

' Voici la fonction qui va traiter les messages filtrés par le hook.
' Le but étant de paralyser la souris, il suffit de ne pas renvoyer les messages
' qui lui sont destinés. Nous renvoyons donc -1 ( Considéré comme valeur Nulle ).

Public Function HookRedirMouse(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
HookRedirMouse = -1
End Function

Ce code n'est pas de moi, je l'ai trouvé sur le site de VbFrance:

HOOK CLAVIER + SOURIS ( PERMET UN BLOQUAGE DU CLAVIER ET/OU DE LA SOURIS ) clavier, souris, hook, Source N°32067 Visual Basic, VB6, VB.NET, VB 2005, VB

J'ai retiré le blocage du clavier présent dans la source car cette partie ne m'intéresse pas.

Mon objectif est d'étendre cette fonction à l'ensemble de windows pendant qu'une macro tourne.

Et c'est là que je bloque.

Si vous avez des idées, je suis preneur.

Merci d'avance

A+
 
Dernière modification par un modérateur:
Re : Désactiver la souris

Bonsoir


Je ne comprends pas la finalité de la chose ?

Si c'est dans le cadre d'une appli qui fonctionne au boulot (ce qui implique que l'appli est nécessaire pour mener à bien une tache), si je suis l'utilisateur final, j'attends que la macro ait fini son job, non ?

Il ne me viendrait pas à l'idée de planter l'appli pour ensuite devoir recommencer le boulot.

Donc pourquoi vouloir à tout prix bloquer Windows ?
 
Re : Désactiver la souris

Bonjour à tous

windows gérant tout le système d'exploitation, à mon avis si tu le bloques tu risques d'aller au devant de problèmes.. enfin, c'est juste mon avis... perso, je verrais d'un sale oeil que l'on me bloque mon ordi.... cherche peut être plutôt à optimiser ton code....

bonne journée
@+
 
Dernière édition:
Re : Désactiver la souris

Si c'est dans le cadre d'une appli qui fonctionne au boulot (ce qui implique que l'appli est nécessaire pour mener à bien une tache), si je suis l'utilisateur final, j'attends que la macro ait fini son job, non ?

Il ne me viendrait pas à l'idée de planter l'appli pour ensuite devoir recommencer le boulot.

Je suis d'accord mais le truc c'est qu'à un moment donné de l'exécution de la macro, j'ai une fenetre de téléchargement internet qui s'ouvre (boutons Ouvrir, Enregistrer, Annuler).

Et à ce moment là je ne veux pas que l'utilisateur puisse cliquer sur l'un des boutons car c'est la macro qui doit le faire via l'utilisation de l''API keybd_EVENT.

Donc pourquoi vouloir à tout prix bloquer Windows ?

windows gérant tout le système d'exploitation, à mon avis si tu le bloques tu risques d'aller au devant de problèmes.. enfin, c'est juste mon avis... perso, je verrais d'un sale oeil que l'on me bloque mon ordi.

Je ne veux pas bloquer le système d'exploitation, j'ai du mal m'exprimer auparavant.
Je veux bloquer la souris sur l'ensemble des applications à ce moment précis.
Que les mouvements de la souris ne soient pas bloqués ne me gènent pas, je cherche surtout à empêcher les clics de souris.

Une fois que la macro a géré la fenetre de téléchargement, je débloque la souris pour que l'utilisateur ne soit pas pénalisé.

Et via le code que j'ai donné dans mon précédent message, je n'empêche les clics souris que dans l'instance Excel où la macro est lancée.

Mon objectif est simplement d'étendre ce "blocage" des clics souris à l'ensemble des applications.

Le clavier et le système d'exploitation restent quant à eux libres d'utilisation.

J'espère que mes explications suffiront, sinon n'hésitez pas, j'en rajouterai 😉

A+
 
Re : Désactiver la souris

Bonjour à tous

Pourquoi t'embêter.

Tu mets un:

Code:
application.visible=false

puis

un

Code:
application.visible=true

à la fin du traitement macro et comme cela, les gens peuvent continuer à travailler 🙂.
 
Re : Désactiver la souris

Que l'application soit visible ou pas, le probleme reste le meme.

Lorsque la fenetre de telechargement apparait, l'utilisateur peut cliquer de lui meme sur les boutons.
Et c'est ce que je veux éviter en bloquant les clics de souris.

J'envisageais de passer par le hook de celle ci mais le code que j'ai trouvé ne la bloque que dans l'application Excel.
je veux qu'elle soit bloquée partout; ce blocage dure grosso modo 10 secondes, le temps que la macro envoie une touche via l'API keybd_event.
(Avant une latence lui permet d'attendre l'apparition de la fenetre de telechargement).

Une fois que l'envoi a été effectué, on débloque la souris.

Le probleme est:
-l'utilisateur peut cliquer sur les boutons de la fenetre de telechargement
-ouvrir une autre application ou oter le focus de la fenetre de telechargement

Et s'il fait l'une ou l'autre de ces actions, la macro va envoyer la touche je ne sais où alors qu'il faut impérativement que l'envoi ait lieu dans la fenetre de telechargement (c'est la touche "v" qui est envoyée, le raccourci clavier permettant l'ouverture du fichier).

Ce sont toutes ces raisons qui me poussent à figer la souris durant un laps de temps assez court.

A+
 
Re : Désactiver la souris

Re

Lorsque la fenetre de telechargement apparait

Ah oui, c'est vrai, je n'avais pas intégré cette dimension 😱.

Sinon, tu demandes aux gens de débrancher la souris durant l'exécution de la macro 😉.

ex:

Code:
msgbox ("Débrancher la souris avant de continuer.")

puis à la fin:

Code:
msgbox ("Vous pouvez rebrancher la souris.")
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
Réponses
21
Affichages
5 K
D
Réponses
2
Affichages
1 K
Z
Retour