Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_SYSCOMMAND = &H112&
Private Const SC_SCREENSAVE = &HF140&
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const VK_SPACE As Long = &H20
Private Const WM_KEYDOWN As Long = &H100
-----------------------------------------------------------------
Private Sub Form_Load()
'Déclenche l'économiseur d'écran
Call SendMessage(Me.hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0&)
Timer1.Enabled = True
Timer1.Interval = 2000
End Sub
-------------------------------------------------------------------
Private Sub Timer1_Timer()
'arrete l'économiseur d'écran au bout de 2s
Dim tWnd As Long, bWnd As Long, sSave As String * 250
tWnd = GetForegroundWindow() 'récupere hwnd de la fenetre en service
Debug.Print tWnd
GetClassName tWnd, sSave, 250 'récupere sa class
Debug.Print (Left$(sSave, 50))
' si c'est l'économiseur, lui envoyer la touche space
If LCase(Left$(sSave, 23)) = "windowsscreensaverclass" Then
PostMessage tWnd, WM_KEYDOWN, VK_SPACE, 0
End If
Timer1.Enabled = False
End Sub