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