85 lines
1.5 KiB
C++
85 lines
1.5 KiB
C++
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
DisableScreenSaver.cpp
|
|
|
|
Abstract:
|
|
|
|
This shim is for apps that do bad things when screen savers are active.
|
|
|
|
Notes:
|
|
|
|
This is a general purpose shim.
|
|
|
|
History:
|
|
|
|
02/07/2001 linstev Created
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
IMPLEMENT_SHIM_BEGIN(DisableScreenSaver)
|
|
#include "ShimHookMacro.h"
|
|
|
|
APIHOOK_ENUM_BEGIN
|
|
APIHOOK_ENUM_END
|
|
|
|
// Store the state of the active flag
|
|
BOOL g_bActive = TRUE;
|
|
|
|
BOOL g_bSuccess = FALSE;
|
|
|
|
/*++
|
|
|
|
Turn screen saver off and on again on detach.
|
|
|
|
--*/
|
|
|
|
BOOL
|
|
NOTIFY_FUNCTION(
|
|
DWORD fdwReason
|
|
)
|
|
{
|
|
if (fdwReason == SHIM_STATIC_DLLS_INITIALIZED) {
|
|
//
|
|
// Turn OFF screen saver: detect success/failure so we know if we can
|
|
// safely clean up
|
|
//
|
|
g_bSuccess = SystemParametersInfoA(SPI_GETSCREENSAVEACTIVE, 0, &g_bActive, 0) &&
|
|
SystemParametersInfoA(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);
|
|
|
|
if (!g_bSuccess) {
|
|
LOGN( eDbgLevelError, "[INIT] Failed to disable screen saver");
|
|
}
|
|
|
|
} else if (fdwReason == DLL_PROCESS_DETACH) {
|
|
//
|
|
// Restore original screen saver state
|
|
//
|
|
if (g_bSuccess) {
|
|
SystemParametersInfoA(SPI_SETSCREENSAVEACTIVE, g_bActive, NULL, 0);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*++
|
|
|
|
Register hooked functions
|
|
|
|
--*/
|
|
|
|
HOOK_BEGIN
|
|
|
|
CALL_NOTIFY_FUNCTION
|
|
|
|
HOOK_END
|
|
|
|
IMPLEMENT_SHIM_END
|
|
|