Si tu avais suivi tu saurais que je ne débloque plus la sécurité des macros.et par macro tu peux enlever ajouter des modules par vba et j'en passe et des meilleures
demain tu trouve une autre merdouille tu fais quoi ? tu débloque quoi?
Function getControlRectangleWorksheet(obj As Object) As RECT
Dim LfT#, Tp#, r As RECT
With ActiveWindow
LfT = .Panes(1).PointsToScreenPixelsX(obj.Left)
Tp = .Panes(1).PointsToScreenPixelsY(obj.Top)
r.Left = LfT
r.Top = Tp
r.Right = r.Left + (obj.Width * Ppx)
r.Bottom = r.Top + (obj.Height * Ppx)
End With
If TypeName(obj) = "ComboBox" Then
r.Bottom = r.Bottom + ((obj.ListRows * (obj.Font.Size)) * Ppx)
r.Top = r.Top + (obj.Height * Ppx)
End If
getControlRectangleWorksheet = r
End Function
Public Sub HookMouseX(ByVal CtrL As Object, Optional ByVal FenParent As Object = Nothing)
Dim pos As POINTAPI
If Not FenParent Is Nothing Then Set USFForm = FenParent
If Not CtrlHooked Is Nothing Then If CtrlHooked.Name <> CtrL.Name Then UnHookMouse
If plHooking < 1 Then
Set CtrlHooked = CtrL
If Not FenParent Is Nothing Then
rct2 = getControlRectangleForM(CtrL)
Else
rct2 = getControlRectangleWorksheet(CtrL)
End If
plHooking = SetWindowsHookExA(WH_MOUSE_LL, AddressOf LowLevelMouseProc, 0, 0)
End If
End Sub
Il faut quand même oser !alors tu a de grave problème dans ton truc ou alors tu est en vb6
Après 4 jours de prises de têtes sur ce sujet, je ne me sens pas de recoller les petits bouts de code que tu envoies pour en faire un truc fonctionnel.Terminé
LowLevelMouseProc = CallNextHookEx(0&, nCode, wParam, ByVal lParam)
'Molette souris Up/Down Listbox , ComboBox , Frame
Private Function LowLevelMouseProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim pos As POINTAPI, obj As Object, r As Range, CtL
On Error Resume Next
GetCursorPos pos
If pos.Y < rct2.Top Or pos.Y > rct2.Bottom Or pos.X < rct2.Left Or pos.X > rct2.Right Then UnHookMouse: Exit Function
If (nCode = HC_ACTION) Then
If wParam = WM_MOUSEWHEEL Then
LowLevelMouseProc = 1
With CtrlHooked
Select Case TypeName(CtrlHooked) ' déplace l'ascenseur en fonction de la molette ' l'info est stockée dans lParam
Case "ListBox", "ComboBox": If GetHookStruct(lParam).mouseData > 0 Then .TopIndex = .TopIndex - 1 Else .TopIndex = .TopIndex + 1
Case "Frame": If GetHookStruct(lParam).mouseData > 0 Then .ScrollTop = .ScrollTop - 4 Else .ScrollTop = .ScrollTop + 4
End Select
End With
End If
Exit Function
End If
On Error GoTo 0
End Function
it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_MOUSE_LL hooks will not receive hook notifications and may behave incorrectly as a result.
on lit plus bas que le delay est plus important sur window10et + ce qui implique un recallCependant, le crochet WH_MOUSE_LL n'est pas injecté dans un autre processus. Au lieu de cela, le contexte revient au processus qui a installé le hook et il est appelé dans son contexte d'origine. Ensuite, le contexte revient à l'application qui a généré l'événement.
Remarques
Une application installe la procédure de hook en spécifiant le type de hook WH_MOUSE_LL et un pointeur vers la procédure de hook dans un appel à la fonction SetWindowsHookEx .
Ce hook est appelé dans le contexte du thread qui l'a installé. L'appel est effectué en envoyant un message au thread qui a installé le hook. Par conséquent, le thread qui a installé le hook doit avoir une boucle de message.
L'entrée de la souris peut provenir du pilote de souris local ou d'appels à la fonction mouse_event . Si l'entrée provient d'un appel à mouse_event , l'entrée a été "injectée". Cependant, le crochet WH_MOUSE_LL n'est pas injecté dans un autre processus. Au lieu de cela, le contexte revient au processus qui a installé le hook et il est appelé dans son contexte d'origine. Ensuite, le contexte revient à l'application qui a généré l'événement.
La procédure de hook doit traiter un message en moins de temps que l'entrée de données spécifiée dans la valeur LowLevelHooksTimeout dans la clé de registre suivante :
HKEY_CURRENT_USER \ Panneau de configuration \ Bureau
La valeur est en millisecondes. Si la procédure de hook expire, le système transmet le message au hook suivant. Cependant, sous Windows 7 et versions ultérieures, le hook est supprimé en mode silencieux sans être appelé. L'application n'a aucun moyen de savoir si le crochet est supprimé.
Windows 10 version 1709 et versions ultérieures La valeur de délai d'expiration maximale autorisée par le système est de 1 000 millisecondes (1 seconde). Le système utilisera par défaut un délai d'attente de 1 000 millisecondes si la valeur LowLevelHooksTimeout est définie sur une valeur supérieure à 1 000.
Remarque Les crochets de débogage ne peuvent pas suivre ce type de crochets de souris de bas niveau. Si l'application doit utiliser des crochets de bas niveau, elle doit exécuter les crochets sur un thread dédié qui transmet le travail à un thread de travail, puis revient immédiatement. Dans la plupart des cas où l'application doit utiliser des crochets de bas niveau, elle doit plutôt surveiller l'entrée brute. En effet, l'entrée brute peut surveiller de manière asynchrone les messages de la souris et du clavier qui sont ciblés pour d'autres threads plus efficacement que les crochets de bas niveau. Pour plus d'informations sur l'entrée brute, consultez Entrée brute .