XL 2021 VBA - Worksheet MouseMove - Gérer le hooking ?

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • 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 !

Dudu2

XLDnaute Barbatruc
Bonjour,

Je suis parti de ce Post (2009) pour faire le fichier joint un peu amélioré d'une Subclass pour tracker le Worksheet.MouseMove.
Cependant, le Hooking WinProc() est toujours totalement instable et la moindre manip (réduction de la fenêtre, ...) plante Excel totalement.

J'ai trouvé sur Github une page pour faire une Class for safe subclassing windows qui laisse supposer avec le mot "safe" que les plantages seraient évités.
Quelqu'un a-t-il déjà utilisé ce code ? Parce que moi je m'y perds un peu.
 

Pièces jointes

Dernière édition:
bonjour @nullosse @Dudu2
de 1à2% je passe à18/24%
sinon effet ca marche
le principe
c'est le xlam qui tourne
il appelle la fonction de classeur caller
du coup la conso n'est pas inputée sur le classeur
c'est de l'adressof :artisanal mais de l"adressof quand même
on pourrait faire exactement pareil avec un do loop et un wscriptshell.sleep dans un vbs
dans le do loop on testerais le getobject
avec un wrapper on testerais les api curseur
sortie si le getobject ne renvoie pas le classeur caller
 
le principe est tres simple
les events de commandbar ne sont plus implémentés dans excel depuis 2007
et pour cause nous avons des rubans xml
mais elle existent toujours car toujours utilisées moins mais tout de même ne serait ce que pour retrocompatibilité
et nous avons toujours des commandbars popup menu ect....

comme ce n'est plus implementé il nous faut classer et crer un event commandbar
c'est ce que l'on fait dans le thisworkbook (qui est un module classe je le rapelle)
on crée donc l'event update
VB:
Option Explicit

Public WithEvents CommandBars As CommandBars

Private Sub CommandBars_OnUpdate()
 
    Application.CommandBars.FindControl(ID:=2040).Enabled = Not Application.CommandBars.FindControl(ID:=2040).Enabled
 ' faire ce qu'on veux a partir de là comme appeler une fonction
End Sub

pour la demarrer

VB:
 Set ThisWorkbook.CommandBars = Application.CommandBars

pour l'arrêter

VB:
 Set ThisWorkbook.CommandBars = Nothing


dans cet event on enable et disable un control qui ne sert a rien (ou celui que vous voulez)
comme la commandbar event update se déclenche puisque l'on change quelque chose dedans

ben le truc tourne en bourrique


et comme les events sont en addressof

je rappelle à toute fin utile que les events commandbar sont de niveau application et non workbook comme les events change ou autres d'une feuille par exemple

autrement dit les fonction ou sub que vous appelez sont appelées par l'object application et non le classeur

bon il y a une limite quand même si les codes executé sont costauds forcement

mais avec ca pas de problème d'instabilité du hook

pour l'arrêter on detruit la variable en l'occurence ici commandbars(dudu2 ne comprendra jamais les dangers d'utiliser le nom des object comme variable)

pas compliqué
Patrick
 
Dernière édition:
- 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
Retour