mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
Commit my autostart code for screen saver for now it is hardcode to 15 sec timeout
svn path=/trunk/; revision=22896
This commit is contained in:
parent
9135556ab7
commit
49ac5c3e0e
2 changed files with 102 additions and 30 deletions
|
@ -3301,8 +3301,6 @@ CSR_API(CsrGetProcessList)
|
|||
return Request->Status = STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static BOOL ScreenSaverRunning = FALSE;
|
||||
|
||||
CSR_API(CsrStartScreenSaver)
|
||||
{
|
||||
|
||||
|
@ -3337,33 +3335,27 @@ CSR_API(CsrStartScreenSaver)
|
|||
add the code here as w3seek recomandete
|
||||
*/
|
||||
|
||||
if (ScreenSaverRunning == FALSE)
|
||||
{
|
||||
|
||||
RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_ALL_ACCESS, &hKey);
|
||||
result = RegQueryValueExW(hKey, L"SCRNSAVE.EXE", 0, &varType, (LPBYTE)szBuffer, &bufferSize);
|
||||
if(result == ERROR_SUCCESS)
|
||||
{
|
||||
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
|
||||
{
|
||||
DPRINT1("CsrStartScreenSaver : FAIL %S\n",szBuffer);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_ALL_ACCESS, &hKey);
|
||||
result = RegQueryValueExW(hKey, L"SCRNSAVE.EXE", 0, &varType, (LPBYTE)szBuffer, &bufferSize);
|
||||
if(result == ERROR_SUCCESS)
|
||||
{
|
||||
swprintf(szCmdline, L"%s /s",szBuffer);
|
||||
DPRINT1("CsrStartScreenSaver : OK %S\n",szCmdline);
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
if(CreateProcessW( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi ))
|
||||
{
|
||||
CloseHandle( pi.hProcess );
|
||||
CloseHandle( pi.hThread );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT1("CsrStartScreenSaver : FAIL %S\n",szBuffer);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
return Request->Status = STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -39,6 +39,9 @@ extern BYTE gQueueKeyStateTable[];
|
|||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
static HANDLE ScreenSaverThreadHandle;
|
||||
static CLIENT_ID ScreenSaverThreadId;
|
||||
|
||||
static HANDLE MouseDeviceHandle;
|
||||
static HANDLE MouseThreadHandle;
|
||||
static CLIENT_ID MouseThreadId;
|
||||
|
@ -47,6 +50,7 @@ static CLIENT_ID KeyboardThreadId;
|
|||
static HANDLE KeyboardDeviceHandle;
|
||||
static KEVENT InputThreadsStart;
|
||||
static BOOLEAN InputThreadsRunning = FALSE;
|
||||
static BOOLEAN ScreenSaverRunning = FALSE;
|
||||
PUSER_MESSAGE_QUEUE pmPrimitiveMessageQueue = 0;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
@ -148,6 +152,65 @@ ProcessMouseInputData(PMOUSE_INPUT_DATA Data, ULONG InputCount)
|
|||
SendMouseEvent(mi);
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
ScreenSaverThreadMain(PVOID StartContext)
|
||||
{
|
||||
KEVENT Event;
|
||||
LARGE_INTEGER Timeout;
|
||||
NTSTATUS Status;
|
||||
|
||||
KeSetPriorityThread(&PsGetCurrentThread()->Tcb,
|
||||
LOW_REALTIME_PRIORITY + 3);
|
||||
|
||||
for(;;)
|
||||
{
|
||||
DPRINT("Screen Saver auto start Thread Waiting for start event\n");
|
||||
Status = KeWaitForSingleObject(&InputThreadsStart,
|
||||
0,
|
||||
KernelMode,
|
||||
TRUE,
|
||||
NULL);
|
||||
DPRINT("Screen Saver auto start Thread Starting...\n");
|
||||
while(InputThreadsRunning)
|
||||
{
|
||||
NTSTATUS OldStatus;
|
||||
/* FIXME
|
||||
1. read timeout value from reg
|
||||
2. read timeout value from spi msg
|
||||
*/
|
||||
OldStatus = STATUS_SUCCESS;
|
||||
|
||||
Timeout.QuadPart = -150000000LL; /* 15 second timeout */
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, &Timeout);
|
||||
|
||||
if(Status == STATUS_ALERTED && !InputThreadsRunning)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Win32K: Failed to read from Screen Saver auto thread.\n");
|
||||
return; //(Status);
|
||||
}
|
||||
|
||||
|
||||
if ((Status == STATUS_TIMEOUT) && (ScreenSaverRunning == FALSE))
|
||||
{
|
||||
DPRINT1("Keyboard and Mouse TimeOut Starting Screen Saver...\n");
|
||||
CSR_API_MESSAGE Request;
|
||||
ScreenSaverRunning = TRUE;
|
||||
CsrInit();
|
||||
Request.Type = MAKE_CSR_API(START_SCREEN_SAVER, CSR_GUI);
|
||||
Request.Data.StartScreenSaver.Start = TRUE;
|
||||
co_CsrNotifyScreenSaver(&Request );
|
||||
}
|
||||
}
|
||||
DPRINT("Screen Saver auto start Thread Stopped...\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID STDCALL
|
||||
MouseThreadMain(PVOID StartContext)
|
||||
{
|
||||
|
@ -223,6 +286,8 @@ MouseThreadMain(PVOID StartContext)
|
|||
}
|
||||
DPRINT("MouseEvent\n");
|
||||
|
||||
ScreenSaverRunning = FALSE;
|
||||
|
||||
UserEnterExclusive();
|
||||
|
||||
ProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
|
||||
|
@ -491,7 +556,7 @@ KeyboardThreadMain(PVOID StartContext)
|
|||
HWND hWnd;
|
||||
int id;
|
||||
|
||||
DPRINT("KeyInput @ %08x\n", &KeyInput);
|
||||
DPRINT("KeyInput @ %08x\n", &KeyInput);
|
||||
|
||||
Status = NtReadFile (KeyboardDeviceHandle,
|
||||
NULL,
|
||||
|
@ -531,6 +596,8 @@ KeyboardThreadMain(PVOID StartContext)
|
|||
return; //(Status);
|
||||
}
|
||||
|
||||
ScreenSaverRunning = FALSE;
|
||||
|
||||
/* Update modifier state */
|
||||
fsModifiers = IntKeyboardGetModifiers(&KeyInput);
|
||||
|
||||
|
@ -809,6 +876,19 @@ InitInputImpl(VOID)
|
|||
DPRINT1("Win32K: Failed to create mouse thread.\n");
|
||||
}
|
||||
|
||||
Status = PsCreateSystemThread(&ScreenSaverThreadHandle,
|
||||
THREAD_ALL_ACCESS,
|
||||
NULL,
|
||||
NULL,
|
||||
&ScreenSaverThreadId,
|
||||
ScreenSaverThreadMain,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Win32K: Failed to create ScreenSaver auto start thread.\n");
|
||||
}
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue