1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xpoint As Long, ByVal ypoint As Long) As Long
Sub testunparia()
Dim ppx As Single, ex1 As Long, ex2 As Long, ex3 As Long, ex4 As Long
With CreateObject("WScript.Shell"): ppx = .RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72: End With
With UserForm1: .Show 0: .Left = 100: .Top = 20: End With
'on place le curseur tout contre (très légèrement en dessous et très légèrement à droite) de l'angle supérieur droit de la barre de titre
SetCursorPos (UserForm1.Left + UserForm1.Width) * ppx + 1, (UserForm1.Top * ppx - 5)
ex1 = WindowFromPoint((UserForm1.Left + UserForm1.Width) * ppx + 1, (UserForm1.Top * ppx - 5))
'on place le curseur sur le "userform apparent", en plein milieu sous la barre de titre
SetCursorPos (UserForm1.Left) * ppx + 100, (UserForm1.Top * ppx + 50)
ex2 = WindowFromPoint((UserForm1.Left) * ppx + 100, (UserForm1.Top * ppx + 50))
'le hwnd de l'userform réel (obtenu, LUI, par FINDWINDOWS
ex3 = FindWindow(vbNullString, UserForm1.Caption)
SetCursorPos (UserForm1.Left + 100) * ppx, (UserForm1.Top * ppx + 5)
ex4 = WindowFromPoint((UserForm1.Left + 100) * ppx, (UserForm1.Top * ppx + 5))
Debug.Print "curseur tout contre handle obtenu = " & ex1 & vbCrLf & "curseur sur le userform apparent handle obtenu = " & ex2 & vbCrLf & "FINDWINDOWS handle obtenu = " & ex3 & vbCrLf & "Curseur dans la barre de titre handle obtenu = " & ex4
End Sub |
Partager