[Déplacé VB6 --> VBA] Hook souris VBA

media6 Messages postés 51 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 7 juillet 2010 - 17 févr. 2010 à 18:30
media6 Messages postés 51 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 7 juillet 2010 - 18 févr. 2010 à 23:50
Bonjour,

j'ai besoin de "capter" un clic de souris (en l'occurence un clic gauche) et sa position en X et en Y dans l'application pilotée par VBA.
Je ne veux pas traîner de dll donc pas question de hook de bas niveau.
J'ai essayé avec l'API SendDlgItemMessage qui fonctionne pour capter l'appui sur un bouton comme ceci :

SendDlgItemMessage(&H60744, 1234, BM_GETSTATE, 0&, 0&) '1234 étant l'ID du bouton et &H60744 le handle de la fenêtre.

Je ne sais pas par contre quels paramètres utiliser pour capter la souris ??

Autre méthode testée :

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) 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
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

Public Function startMouseHook() As Boolean
    Dim hInstance As Long
    hInstance = GetWindowLong(&H60744, GWL_HINSTANCE) '&H60744 est le handle de la fenêtre

    mouse_Hook = SetWindowsHookEx(WH_MOUSE, AddressOf MouseProc, hInstance, ByVal 0&)
  
End Function

Public Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  
    If nCode = HC_ACTION Then
        CopyMemory mouse_struct, ByVal lParam, LenB(mouse_struct)
  
        Select Case wParam
            Case WM_LBUTTONUP
                Debug.Print "LButtonUp" & vbCrLf & "X=" & mouse_struct.pt.x & " ; Y=" & mouse_struct.pt.y
            Case Else
        End Select
  
    End If
  
    MouseProc = CallNextHookEx(mouse_Hook, nCode, wParam, lParam)
  
End Function

Le code au-dessus ne fonctionne pas lorsque j'utilise ma variable hInstance par contre il fonctionne dans la fenêtre hôte lorsque je remplace hInstance par App.hInstance.


Quelqu'un peut éclairer ma lanterne ? please......

1 réponse

media6 Messages postés 51 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 7 juillet 2010
18 févr. 2010 à 23:50
up
0