Screen Saver win32csr part

1. Clean up the code
2. Adding FIXME text
3. Fixing a bug cause screen saver was autostart whole time after timeout accord.


svn path=/trunk/; revision=22894
This commit is contained in:
Magnus Olsen 2006-07-06 19:35:16 +00:00
parent 69ac6cf7f8
commit 52d8aae119

View file

@ -3301,11 +3301,12 @@ CSR_API(CsrGetProcessList)
return Request->Status = STATUS_SUCCESS; return Request->Status = STATUS_SUCCESS;
} }
static BOOL ScreenSaverRunning = FALSE;
CSR_API(CsrStartScreenSaver) CSR_API(CsrStartScreenSaver)
{ {
DPRINT1("CsrStartScreenSaver : Start Screen Saver \n"); DPRINT("CsrStartScreenSaver : Start Screen Saver \n");
if (Request->Data.StartScreenSaver.Start == TRUE) if (Request->Data.StartScreenSaver.Start == TRUE)
{ {
@ -3319,32 +3320,50 @@ CSR_API(CsrStartScreenSaver)
DWORD varType = REG_SZ; DWORD varType = REG_SZ;
LONG result; LONG result;
/* FIXME :
1. Make it unicode and ansi compatible with TCHAR
2. Return state it is running if a tree try start it
one more screen saver when we already have one
screen saver running
// FIXME read the register key for the screen saver 3. Use GetLongPath or GetPathName so we can use %SystemRoot% in
//swprintf(szCmdline, L"c:\\reactos\\system32\\matrix.scr /s"); the key that will make it posible for livecd have a preview screen
saver install.
RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_ALL_ACCESS, &hKey); 4. Move the code to winlogon SAS and screen saver must run in
result = RegQueryValueExW(hKey, L"SCRNSAVE.EXE", 0, &varType, (LPBYTE)szBuffer, &bufferSize); the secuar desktop. But current our Winlogon does not working
if(result == ERROR_SUCCESS) well with SAS and with Secure desktop, So I (Magnus Olsen aka GreatLord)
{ add the code here as w3seek recomandete
swprintf(szCmdline, L"%s /s",szBuffer); */
DPRINT1("CsrStartScreenSaver : OK %S\n",szCmdline);
ZeroMemory( &si, sizeof(si) ); if (ScreenSaverRunning == FALSE)
si.cb = sizeof(si); {
ZeroMemory( &pi, sizeof(pi) );
if(CreateProcessW( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi )) RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_ALL_ACCESS, &hKey);
{ result = RegQueryValueExW(hKey, L"SCRNSAVE.EXE", 0, &varType, (LPBYTE)szBuffer, &bufferSize);
CloseHandle( pi.hProcess ); if(result == ERROR_SUCCESS)
CloseHandle( pi.hThread ); {
swprintf(szCmdline, L"%s /s",szBuffer);
DPRINT1("CsrStartScreenSaver : OK %S\n",szCmdline);
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
ScreenSaverRunning = TRUE;
if(CreateProcessW( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi ))
{
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
ScreenSaverRunning = FALSE;
}
} }
} else
else {
{
DPRINT1("CsrStartScreenSaver : FAIL %S\n",szBuffer); DPRINT1("CsrStartScreenSaver : FAIL %S\n",szBuffer);
} }
RegCloseKey(hKey);
RegCloseKey(hKey); }
} }
return Request->Status = STATUS_SUCCESS; return Request->Status = STATUS_SUCCESS;
} }