1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINT_) As Long
Type POINT_
X As Long
Y As Long
End Type
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Dim point As POINT_
Dim coord1 As RECT
Dim coord2 As RECT
Dim nomclasse As String * 200
Function pos_souris_sur_cell()
titre = Array("position X", "positionY", "lageur de la colonne des numero de ligne", "height ruban", "left cellule reel dans la grille", "top cellule reel dans la grille")
Range("A1:F1") = titre
'recherche de la fenetre de la page active
pointeur = FindWindow("XLMAIN", vbNullString)
Call GetWindowRect(pointeur, coord1)
Call GetWindowRect(pointeur, coord1)
pointeur = GetWindow(pointeur, 5)
Do
GetClassName pointeur, nomclasse, 250
i = i + 1
Cells(i, 10) = nomclasse
If LCase(Left(nomclasse, 6)) = "xldesk" Then Exit Do ' on capte le handle de la grille exel uniquement
pointeur = GetWindow(pointeur, 2)
Loop
'recherche de la position et taille de la fenetre
Call GetWindowRect(pointeur, coord2)
échx = Application.UsableWidth / (coord2.Right - coord2.Left)
échy = Application.UsableHeight / (coord2.Bottom - coord2.Top)
'recherche de la position du curseur en points
GetCursorPos point
xpt = ((point.X - coord2.Left) * échx) - 19 ' on enleve 19 pour la colonne de chiffre representant les lignes
ypt = ((point.Y - coord2.Top) * échy) - 15 ' on enleve 15 pour la ligne des lettres
Cells(2, 1) = ypt ' donne la position du curseur reelle dans la grille excel (left)
Cells(2, 2) = xpt ' donne la position du curseur reelle dans la grille excel (top)
Cells(2, 3) = coord2.Left - coord1.Left + 19 'donne la difference en te l'ecran et la grill excel uniquement (pas l'application entiere)
Cells(2, 4) = coord2.Top - coord1.Top + 15 ' idem pour le top
Cells(2, 5) = ActiveCell.Left / (96 / 72) + (coord2.Left - coord1.Left + 19)
Cells(2, 6) = ActiveCell.Top / (96 / 72) + (coord2.Top - coord1.Top + 15)
End Function |