Screensavers: intercept screen shutdown events
Blitz3D Forums/Blitz3D Programming/Screensavers: intercept screen shutdown events| 
 | ||
| I'm doing some screensavers in blitz3D. Everything is working well, but I have one last issue to solve: Let's say the computer has the following settings: - Start screensaver after 5 minutes. - Shutdown screen after 15 minutes. So my screensaver runs after 5 minutes, then I wait 10 minutes more and the screen goes off. If I go back to my computer and move the mouse or press a key, the screen turns on and I have my Blitz screensaver still running minimized on the taskbar. How can I receive this "screen shutdown" event on my Blitz program? I tried the code from Code Archive (screensaver code: http://www.blitzbasic.com/codearcs/codearcs.php?code=2093 ) in particular the event handler: Select w_message\message Case WM_DESTROY: api_PostQuitMessage(0) Case WM_CLOSE: ExitScreensaver() Case WM_MOUSEMOVE: pt.POINT = New POINT api_GetCursorPos(pt) If Abs(pt\x-orig_pt\x)>10 Or Abs(pt\y-orig_pt\y)>10 Then api_PostMessage(w_message\hwnd,WM_CLOSE,0,0) EndIf Case WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN, WM_KEYDOWN, WM_SYSKEYDOWN: api_PostMessage(w_message\hwnd,WM_CLOSE,0,0) Default: api_DefWindowProc(w_message\hwnd,w_message\message,w_message\lParam,w_message\wParam) End Select but it seems it is not working well on my Vista and XP box. Any advice of the screensavers gurus out there? thanks | 
| 
 | ||
| Well, I have a more concrete example: 
Const WM_LBUTTONDOWN            = $0201
Global w_message.MSG = New MSG
Type MSG
	Field hwnd
	Field message
	Field wParam
	Field lParam
	Field time$
	Field pt.POINT
End Type
Type POINT
	Field x
	Field y
End Type
While Not KeyDown(1) 
	While api_PeekMessage(w_message,0,0,0,1)
		Select w_message\message
			Case WM_LBUTTONDOWN:
				Print("WM_LBUTTONDOWN")
			Default:
				api_DefWindowProc(w_message\hwnd,w_message\message,w_message\lParam,w_message\wParam)						
		End Select	
	Wend
Wend
End
With the following user decl: .lib "user32.dll" api_PeekMessage% (lpMsg*, hwnd%, wMsgFilterMin%, wMsgFilterMax%, wRemoveMsg%) : "PeekMessageA" api_DefWindowProc% (hwnd%, wMsg%, wParam%, lParam%) : "DefWindowProcA" When I run this program, I have to click 5 or 6 times on the left mouse button before receiving a bulk of 5-6 events.... How can I "flush" the events, so exactly each time I press on the mouse button, I receive the event? |