Author: tfaber
Date: Fri Mar 27 11:44:59 2015
New Revision: 66914

URL: http://svn.reactos.org/svn/reactos?rev=66914&view=rev
Log:
[SYSSETUP]
- Move the hotkey loop to its own thread to make it work when modal dialogs are 
open, and also during device installation
CORE-9428

Modified:
    trunk/reactos/dll/win32/syssetup/install.c
    trunk/reactos/dll/win32/syssetup/wizard.c

Modified: trunk/reactos/dll/win32/syssetup/install.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/install.c?rev=66914&r1=66913&r2=66914&view=diff
==============================================================================
--- trunk/reactos/dll/win32/syssetup/install.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/install.c  [iso-8859-1] Fri Mar 27 
11:44:59 2015
@@ -763,7 +763,7 @@
 
     if (!CommonInstall())
         goto error;
-    
+
     /* Register components */
     _SEH2_TRY
     {
@@ -782,7 +782,7 @@
         DPRINT1("Catching exception\n");
     }
     _SEH2_END;
-    
+
     SetupCloseInfFile(hSysSetupInf);
 
     /* Run the shell */
@@ -911,6 +911,53 @@
     return ret;
 }
 
+static DWORD CALLBACK
+HotkeyThread(LPVOID Parameter)
+{
+    ATOM hotkey;
+    MSG msg;
+
+    DPRINT("HotkeyThread start\n");
+
+    hotkey = GlobalAddAtomW(L"Setup Shift+F10 Hotkey");
+
+    if (!RegisterHotKey(NULL, hotkey, MOD_SHIFT, VK_F10))
+        DPRINT1("RegisterHotKey failed with %lu\n", GetLastError());
+
+    while (GetMessage(&msg, NULL, 0, 0))
+    {
+        if (msg.hwnd == NULL && msg.message == WM_HOTKEY && msg.wParam == 
hotkey)
+        {
+            STARTUPINFOW si = { sizeof(si) };
+            PROCESS_INFORMATION pi;
+
+            if (CreateProcessW(L"cmd.exe",
+                               NULL,
+                               NULL,
+                               NULL,
+                               FALSE,
+                               CREATE_NEW_CONSOLE,
+                               NULL,
+                               NULL,
+                               &si,
+                               &pi))
+            {
+                CloseHandle(pi.hProcess);
+                CloseHandle(pi.hThread);
+            }
+            else
+            {
+                DPRINT1("Failed to launch command prompt: %lu\n", 
GetLastError());
+            }
+        }
+    }
+
+    UnregisterHotKey(NULL, hotkey);
+    GlobalDeleteAtom(hotkey);
+
+    DPRINT("HotkeyThread terminate\n");
+    return 0;
+}
 
 DWORD WINAPI
 InstallReactOS(HINSTANCE hInstance)
@@ -920,6 +967,7 @@
     TOKEN_PRIVILEGES privs;
     HKEY hKey;
     HINF hShortcutsInf;
+    HANDLE hHotkeyThread;
     BOOL ret;
 
     InitializeSetupActionLog(FALSE);
@@ -964,6 +1012,8 @@
         CreateDirectory(szBuffer, NULL);
     }
 
+    hHotkeyThread = CreateThread(NULL, 0, HotkeyThread, NULL, 0, NULL);
+
     /* Hack: Install TCP/IP protocol driver */
     ret = InstallInfSection(NULL,
                             L"nettcpip.inf",
@@ -973,7 +1023,7 @@
     {
         DPRINT("InstallInfSection() failed with error 0x%lx\n", 
GetLastError());
     }
-    else 
+    else
     {
         /* Start the TCP/IP protocol driver */
         SetupStartService(L"Tcpip", FALSE);
@@ -993,7 +1043,7 @@
                                       NULL,
                                       INF_STYLE_WIN4,
                                       NULL);
-    if (hShortcutsInf == INVALID_HANDLE_VALUE) 
+    if (hShortcutsInf == INVALID_HANDLE_VALUE)
     {
         FatalError("Failed to open shortcuts.inf");
         return 0;
@@ -1045,6 +1095,12 @@
     SetupCloseInfFile(hSysSetupInf);
     SetSetupType(0);
 
+    if (hHotkeyThread)
+    {
+        PostThreadMessage(GetThreadId(hHotkeyThread), WM_QUIT, 0, 0);
+        CloseHandle(hHotkeyThread);
+    }
+
     LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS done");
     TerminateSetupActionLog();
 

Modified: trunk/reactos/dll/win32/syssetup/wizard.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/wizard.c?rev=66914&r1=66913&r2=66914&view=diff
==============================================================================
--- trunk/reactos/dll/win32/syssetup/wizard.c   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/wizard.c   [iso-8859-1] Fri Mar 27 
11:44:59 2015
@@ -2317,7 +2317,6 @@
     UINT nPages = 0;
     HWND hWnd;
     MSG msg;
-    ATOM hotkey;
 
     /* Clear setup data */
     ZeroMemory(&SetupData, sizeof(SETUPDATA));
@@ -2409,43 +2408,14 @@
     hWnd = (HWND)PropertySheet(&psh);
     ShowWindow(hWnd, SW_SHOW);
 
-    hotkey = GlobalAddAtomW(L"Setup Shift+F10 Hotkey");
-    if (!RegisterHotKey(NULL, hotkey, MOD_SHIFT, VK_F10))
-        DPRINT1("RegisterHotKey failed with %lu\n", GetLastError());
     while (GetMessage(&msg, NULL, 0, 0))
     {
-        if (msg.hwnd == NULL && msg.message == WM_HOTKEY && msg.wParam == 
hotkey)
-        {
-            STARTUPINFOW si = { sizeof(si) };
-            PROCESS_INFORMATION pi;
-
-            if (CreateProcessW(L"cmd.exe",
-                               NULL,
-                               NULL,
-                               NULL,
-                               FALSE,
-                               CREATE_NEW_CONSOLE,
-                               NULL,
-                               NULL,
-                               &si,
-                               &pi))
-            {
-                CloseHandle(pi.hProcess);
-                CloseHandle(pi.hThread);
-            }
-            else
-            {
-                DPRINT1("Failed to launch command prompt: %lu\n", 
GetLastError());
-            }
-        }
-        else if (!IsDialogMessage(hWnd, &msg))
+        if (!IsDialogMessage(hWnd, &msg))
         {
             TranslateMessage(&msg);
             DispatchMessage(&msg);
         }
     }
-    UnregisterHotKey(NULL, hotkey);
-    GlobalDeleteAtom(hotkey);
 
     DeleteObject(SetupData.hTitleFont);
 }


Reply via email to