dpatfield66
Well-known member
- Joined
- Apr 6, 2006
- Messages
- 136
- Programming Experience
- 5-10
Can anyone tell me how .NET would interact with a screensaver that kicks in, or how it would know that a screensaver was kicking in?
Public Class ScreenSaverListener
Implements IMessageFilter
Private Const WM_SYSCOMMAND As Int32 = &H112
Private Const SC_SCREENSAVE As Int32 = &HF140
Public Event ScreensaverStarted(ByVal sender As Object, ByVal e EventArgs)
Private Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_SCREENSAVE Then
RaiseEvent ScreensaverStarted(Me, New 'Create your own event args here')
Return True
End If
End Function
End Class
Public Class ScreenSaverListenerEventArgs
Inherits EventArgs
public Sub new(byref Msg as Message)
_Message = msg
End Sub
Private _Message as message
Public ReadOnly Property MyMessage as Message
Get
Return me._message
End Get
End Property
End Class
Public Event ScreensaverStarted(ByVal sender As Object, ByVal e ScreenSaverListenerEventArgs)
Private Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_SCREENSAVE Then
'Pass the message that activated the screen saver to our new event args object)
RaiseEvent ScreensaverStarted(Me, New ScreenSaverListenerEventArgs(m))
Return True
End If
End Function
Public WithEvents MyListenerEventCatcher as new ScreenSaverListener
Public Class ScreenSaverListenerEventArgs
Inherits EventArgs
public Sub new(byref Msg as Message)
_Message = msg
End Sub
Private _Message as message
Public ReadOnly Property MyMessage as Message
Get
Return me._message
End Get
End Property
End Class
Public Event ScreensaverStarted(ByVal sender As Object, ByVal e ScreenSaverListenerEventArgs)
Private Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_SCREENSAVE Then
RaiseEvent ScreensaverStarted(Me, New ScreenSaverListenerEventArgs(m))
Return True
End If
End Function
Public Class IWantToDetectIfTheScreenSaverStarted
Implements IDisposable
' Add The Message Filter To The Applications Message Loop In The Classes Constrcuctor
Public Sub New
Application.AddMessageFilter(MyMessageFilter)
End Sub
'Remove It In The Dispose Method
Public Sub Dispose() Implements.....
Application.RemoveMessageFilter(MyMessageFilter)
End Sub
'Instantiate A Object Of The Class That Implements The Message Filter And Declare It WithEvents
So It Can Catch The Event That We Raised In The PreFilterMessage Sub
Private WithEvents MyMessageFilter As New ScreenSaverListener
Public Event ScreensaverStarted(ByVal sender As Object, ByVal e EventArgs)
Public Event ScreensaverStarted(ByVal sender As Object, ByVal e ScreenSaverListenerEventArgs)