--- 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);