Hi,
I am not sure about monitor powerdown, but screensaver can be prevented easily:
- handle WM_SYSCOMMAND event
- filter out SC_SCREENSAVER
- call SystemParametersInfo API
I have working example for you here:
[code=thinbasic]
USES "UI", "Console"
' -- ID numbers of controls
Begin Const
%btnClose = 1000
End Const
' -- Declare API
%SPI_SETSCREENSAVEACTIVE = 17
%SPIF_SENDWININICHANGE = &H2
DECLARE FUNCTION SystemParametersInfo LIB "USER32.DLL" ALIAS "SystemParametersInfoA" (BYVAL uAction AS DWORD, BYVAL uParam AS DWORD, BYVAL lpvParam AS LONG, BYVAL fuWinIni AS DWORD) AS LONG
' -- Create dialog here
FUNCTION TBMAIN()
LOCAL hDlg AS DWORD
DIALOG New 0, "<Enter title here>",-1,-1, 160, 120, _
%WS_POPUP Or %WS_VISIBLE Or _
%WS_CLIPCHILDREN Or %WS_CAPTION OR _
%WS_SYSMENU Or %WS_MINIMIZEBOX, 0 To hDlg
' -- Place controls here
CONTROL ADD BUTTON, hDlg, %btnClose, "Click to close", 95, 100, 60, 14, CALL btnCloseProc
DIALOG SHOW MODAL hDlg, CALL dlgProc
END FUNCTION
' -- Callback for dialog
CALLBACK FUNCTION dlgProc()
' -- Test for messages
SELECT CASE CBMSG
CASE %WM_INITDIALOG
' -- Put code to be executed after dialog creation here
CASE %WM_COMMAND
' -- You can handle controls here
'SELECT CASE CBCTL
'
' CASE ...
' IF CBCTLMSG = ... THEN
'
' END IF
'
'END SELECT
CASE %WM_SYSCOMMAND
select case cbwparam
case %SC_SCREENSAVE
printl "Screensaver wanted to launch..."
SystemParametersInfo (%SPI_SETSCREENSAVEACTIVE, %TRUE, 0, %SPIF_SENDWININICHANGE)
function = 0
case %SC_MONITORPOWER
printl "Monitorpower - not sure what to do"
function = 0
end select
CASE %WM_CLOSE
' -- Put code to be executed before dialog end here
END SELECT
END FUNCTION
' -- Callback for close button
CALLBACK FUNCTION btnCloseProc()
IF CBMSG = %WM_COMMAND THEN
IF CBCTLMSG = %BN_CLICKED THEN
' -- Closes the dialog
DIALOG END CBHNDL
END IF
END IF
END FUNCTION
[/code]
Petr
Bookmarks