Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI
ptMaxPosition As POINTAPI
rcNormalPosition As RECT
End Type
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOACTIVATE As Long = &H10
Private Const SW_SHOWNOACTIVATE As Long = 4&
Private Const HWND_TOPMOST As Long = (-1&)
'
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal CX As Long, ByVal CY As Long, ByVal wFlags As Long) As Long
Public Sub TopMostNoFocus(ByVal lHandle As Long)
Dim tWIN As WINDOWPLACEMENT
' récupère position / flag
tWIN.Length = Len(tWIN)
Call GetWindowPlacement(lHandle, tWIN)
' change le flag FOCUS au type
tWIN.showCmd = SW_SHOWNOACTIVATE
' applique NOFOCUS à la fenêtre
Call SetWindowPlacement(lHandle, tWIN)
' applique premier plan permanent
Call SetWindowPos(lHandle, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE)
End Sub