[ScreenSaver]

- Fixed screen saver load and save plus the registry problems.

svn path=/trunk/; revision=51973
This commit is contained in:
James Tabor 2011-05-28 11:39:36 +00:00
parent 787984bc0f
commit e878e6c8fc
4 changed files with 38 additions and 5 deletions

View file

@ -240,7 +240,7 @@ VOID
StartScreenSaver( StartScreenSaver(
IN PWLSESSION Session) IN PWLSESSION Session)
{ {
HKEY hKey = NULL; HKEY hKey = NULL, hCurrentUser = NULL;
WCHAR szApplicationName[MAX_PATH]; WCHAR szApplicationName[MAX_PATH];
WCHAR szCommandLine[MAX_PATH + 3]; WCHAR szCommandLine[MAX_PATH + 3];
DWORD bufferSize = sizeof(szApplicationName) - sizeof(WCHAR); DWORD bufferSize = sizeof(szApplicationName) - sizeof(WCHAR);
@ -258,8 +258,17 @@ StartScreenSaver(
goto cleanup; goto cleanup;
} }
rc = RegOpenCurrentUser(
KEY_READ,
&hCurrentUser);
if (rc != ERROR_SUCCESS)
{
ERR("WL: RegOpenCurrentUser Error!\n");
goto cleanup;
}
rc = RegOpenKeyExW( rc = RegOpenKeyExW(
HKEY_CURRENT_USER, hCurrentUser,
L"Control Panel\\Desktop", L"Control Panel\\Desktop",
0, 0,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
@ -343,6 +352,8 @@ cleanup:
RevertToSelf(); RevertToSelf();
if (hKey) if (hKey)
RegCloseKey(hKey); RegCloseKey(hKey);
if (hCurrentUser)
RegCloseKey(hCurrentUser);
if (!ret) if (!ret)
{ {
PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0); PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0);

View file

@ -460,6 +460,7 @@ static VOID
SetScreenSaver(HWND hwndDlg, PDATA pData) SetScreenSaver(HWND hwndDlg, PDATA pData)
{ {
HKEY regKey; HKEY regKey;
BOOL DeleteMode = FALSE;
if (RegOpenKeyEx(HKEY_CURRENT_USER, if (RegOpenKeyEx(HKEY_CURRENT_USER,
_T("Control Panel\\Desktop"), _T("Control Panel\\Desktop"),
@ -486,6 +487,7 @@ SetScreenSaver(HWND hwndDlg, PDATA pData)
{ {
/* Windows deletes the value if no screensaver is set */ /* Windows deletes the value if no screensaver is set */
RegDeleteValue(regKey, _T("SCRNSAVE.EXE")); RegDeleteValue(regKey, _T("SCRNSAVE.EXE"));
DeleteMode = TRUE;
} }
/* set the screensaver time delay */ /* set the screensaver time delay */
@ -506,6 +508,10 @@ SetScreenSaver(HWND hwndDlg, PDATA pData)
(PBYTE)szTime, (PBYTE)szTime,
_tcslen(szTime) * sizeof(TCHAR)); _tcslen(szTime) * sizeof(TCHAR));
if (DeleteMode) Time = 0;
SystemParametersInfoW(SPI_SETSCREENSAVETIMEOUT, Time, 0, SPIF_SENDCHANGE);
/* set the secure value */ /* set the secure value */
Ret = SendDlgItemMessage(hwndDlg, Ret = SendDlgItemMessage(hwndDlg,
IDC_SCREENS_USEPASSCHK, IDC_SCREENS_USEPASSCHK,

View file

@ -75,14 +75,15 @@ DWORD IntLastInputTick(BOOL LastInputTickSetGet)
VOID FASTCALL DoTheScreenSaver(VOID) VOID FASTCALL DoTheScreenSaver(VOID)
{ {
LARGE_INTEGER TickCount; LARGE_INTEGER TickCount;
DWORD Test; DWORD Test, TO;
if (gspv.iScrSaverTimeout > 0) // Zero means Off. if (gspv.iScrSaverTimeout > 0) // Zero means Off.
{ {
KeQueryTickCount(&TickCount); KeQueryTickCount(&TickCount);
Test = MsqCalculateMessageTime(&TickCount); Test = MsqCalculateMessageTime(&TickCount);
Test = Test - LastInputTick; Test = Test - LastInputTick;
if (Test > gspv.iScrSaverTimeout) TO = 1000 * gspv.iScrSaverTimeout;
if (Test > TO)
{ {
DPRINT("Screensaver Message Start! Tick %d Timeout %d \n", Test, gspv.iScrSaverTimeout); DPRINT("Screensaver Message Start! Tick %d Timeout %d \n", Test, gspv.iScrSaverTimeout);

View file

@ -59,6 +59,7 @@ static const WCHAR* VAL_HOVERHEIGHT = L"MouseHoverHeight";
static const WCHAR* KEY_DESKTOP = L"Control Panel\\Desktop"; static const WCHAR* KEY_DESKTOP = L"Control Panel\\Desktop";
static const WCHAR* VAL_SCRTO = L"ScreenSaveTimeOut"; static const WCHAR* VAL_SCRTO = L"ScreenSaveTimeOut";
static const WCHAR* VAL_SCRNSV = L"SCRNSAVE.EXE";
static const WCHAR* VAL_SCRACT = L"ScreenSaveActive"; static const WCHAR* VAL_SCRACT = L"ScreenSaveActive";
static const WCHAR* VAL_GRID = L"GridGranularity"; static const WCHAR* VAL_GRID = L"GridGranularity";
static const WCHAR* VAL_DRAG = L"DragFullWindows"; static const WCHAR* VAL_DRAG = L"DragFullWindows";
@ -136,6 +137,20 @@ SpiLoadUserPrefMask(DWORD dValue)
return Result; return Result;
} }
static
DWORD
SpiLoadTimeOut(VOID)
{ // Must have the string!
WCHAR szApplicationName[MAX_PATH];
RtlZeroMemory(&szApplicationName, sizeof(szApplicationName));
if (!RegReadUserSetting(KEY_DESKTOP, VAL_SCRNSV, REG_SZ, &szApplicationName, sizeof(szApplicationName)))
{
return 0;
}
if (wcslen(szApplicationName) == 0) return 0;
return SpiLoadInt(KEY_DESKTOP, VAL_SCRTO, 0);
}
static static
INT INT
SpiLoadMouse(PCWSTR pwszValue, INT iValue) SpiLoadMouse(PCWSTR pwszValue, INT iValue)
@ -280,7 +295,7 @@ SpiUpdatePerUserSystemParameters()
gspv.bDropShadow = 1; gspv.bDropShadow = 1;
gspv.dwMenuShowDelay = 100; gspv.dwMenuShowDelay = 100;
gspv.iScrSaverTimeout = 600000; // TO in 10 minutes. gspv.iScrSaverTimeout = SpiLoadTimeOut();
gspv.bScrSaverActive = FALSE; gspv.bScrSaverActive = FALSE;
gspv.bScrSaverRunning = FALSE; gspv.bScrSaverRunning = FALSE;
#if(WINVER >= 0x0600) #if(WINVER >= 0x0600)