[ros-diffs] [mf] 14435: merge from trunk: hide login screen to make the login on XP faster

mf at svn.reactos.com mf at svn.reactos.com
Sat Apr 2 12:59:52 CEST 2005


merge from trunk: hide login screen to make the login on XP faster
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
  _____  

Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
--- branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
2005-04-02 10:48:16 UTC (rev 14434)
+++ branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
2005-04-02 10:59:49 UTC (rev 14435)
@@ -601,6 +601,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()");
@@ -646,11 +659,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
@@ -674,6 +691,14 @@
 	if (_tcsstr(lpCmdLine,TEXT("-noautostart")))
 		autostart = false;
 
+	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"));
+	}
+
+
 	g_Globals.init(hInstance);
 
 	 // initialize COM and OLE before creating the desktop window
@@ -684,6 +709,7 @@
 
 		g_Globals._hwndDesktop = DesktopWindow::Create();
 
+		/**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);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050402/df6f1eb6/attachment.html


More information about the Ros-diffs mailing list