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.... ============================================================================== --- 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... ============================================================================== --- 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); }