hide login screen to make the login on XP faster Modified: trunk/reactos/subsys/system/explorer/explorer.cpp _____
Modified: trunk/reactos/subsys/system/explorer/explorer.cpp --- trunk/reactos/subsys/system/explorer/explorer.cpp 2005-03-27 13:03:30 UTC (rev 14349) +++ trunk/reactos/subsys/system/explorer/explorer.cpp 2005-03-27 16:32:06 UTC (rev 14350) @@ -705,6 +705,19 @@
#endif // __MINGW && UNICODE
+static bool SetShellReadyEvent(LPCTSTR evtName) +{ + HANDLE hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, evtName); + if (!hEvent) + return false; + + SetEvent(hEvent); + CloseHandle(hEvent); + + return true; +} + + int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { CONTEXT("WinMain()"); @@ -758,11 +771,15 @@ }
startup_desktop = TRUE; - } else + } else { // create desktop window and task bar only, if there is no other shell and we are // the first explorer instance + // MS Explorer looks additionally into the registry entry HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\shell, + // to decide wether it is currently configured as shell application. startup_desktop = !any_desktop_running; + }
+ bool autostart = !any_desktop_running;
// disable autostart if the SHIFT key is pressed @@ -803,6 +820,15 @@ } #endif
+ + if (startup_desktop) { + // hide the XP login screen (Credit to Nicolas Escuder) + // another undocumented event: "Global\msgina: ReturnToWelcome" + if (!SetShellReadyEvent(TEXT("msgina: ShellReadyEvent"))) + SetShellReadyEvent(TEXT("Global\msgina: ShellReadyEvent")); + } + + bool use_gdb_stub = false; // !IsDebuggerPresent();
if (_tcsstr(lpCmdLine,TEXT("-debug"))) @@ -842,6 +868,7 @@ g_Globals._desktops.get_current_Desktop()->_hwndDesktop = g_Globals._hwndDesktop; #endif
+ /**TODO launching autostart programs can be moved into a background thread. */ if (autostart) { char* argv[] = {"", "s"}; // call startup routine in SESSION_START mode startup(2, argv);