From cd0596ffa4e1b13e6acbdea26b9b84dcd1789576 Mon Sep 17 00:00:00 2001 From: Martin Fuchs Date: Sun, 27 Mar 2005 16:32:06 +0000 Subject: [PATCH] hide login screen to make the login on XP faster svn path=/trunk/; revision=14350 --- reactos/subsys/system/explorer/explorer.cpp | 29 ++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/reactos/subsys/system/explorer/explorer.cpp b/reactos/subsys/system/explorer/explorer.cpp index 05a9b6cd493..873d05536ca 100644 --- a/reactos/subsys/system/explorer/explorer.cpp +++ b/reactos/subsys/system/explorer/explorer.cpp @@ -705,6 +705,19 @@ int main(int argc, char* argv[]) #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,10 +771,14 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL } 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; @@ -803,6 +820,15 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL } #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 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL 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);