| 2408 | } |
| 2409 | |
| 2410 | int ExitWaitForKey(DWORD vkKeys, LPCWSTR asConfirm, BOOL abNewLine, BOOL abDontShowConsole, DWORD anMaxTimeout /*= 0*/) |
| 2411 | { |
| 2412 | gState.inExitWaitForKey_ = TRUE; |
| 2413 | |
| 2414 | int nKeyPressed = -1; |
| 2415 | |
| 2416 | //-- Don't exit on ANY key if -new_console:c1 |
| 2417 | //if (!vkKeys) vkKeys = VK_ESCAPE; |
| 2418 | |
| 2419 | // Чтобы ошибку было нормально видно |
| 2420 | if (!abDontShowConsole) |
| 2421 | { |
| 2422 | BOOL lbNeedVisible = FALSE; |
| 2423 | |
| 2424 | if (!gState.realConWnd_) gState.realConWnd_ = GetConEmuHWND(ConEmuWndType::ConsoleWindow); |
| 2425 | |
| 2426 | if (gState.realConWnd_) // Если консоль была скрыта |
| 2427 | { |
| 2428 | WARNING("Если GUI жив - отвечает на запросы SendMessageTimeout - показывать консоль не нужно. Не красиво получается"); |
| 2429 | |
| 2430 | if (!IsWindowVisible(gState.realConWnd_)) |
| 2431 | { |
| 2432 | BOOL lbGuiAlive = FALSE; |
| 2433 | |
| 2434 | if (gState.conemuWndDC_ && !isConEmuTerminated()) |
| 2435 | { |
| 2436 | // ConEmu will deal the situation? |
| 2437 | // EmergencyShow annoys user if parent window was killed (InsideMode) |
| 2438 | lbGuiAlive = TRUE; |
| 2439 | } |
| 2440 | else if (gState.conemuWnd_ && IsWindow(gState.conemuWnd_)) |
| 2441 | { |
| 2442 | DWORD_PTR dwLRc = 0; |
| 2443 | |
| 2444 | if (SendMessageTimeout(gState.conemuWnd_, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 1000, &dwLRc)) |
| 2445 | lbGuiAlive = TRUE; |
| 2446 | } |
| 2447 | |
| 2448 | if (!lbGuiAlive && !IsWindowVisible(gState.realConWnd_)) |
| 2449 | { |
| 2450 | lbNeedVisible = TRUE; |
| 2451 | // не надо наверное... // поставить "стандартный" 80x25, или то, что было передано к ком.строке |
| 2452 | //SMALL_RECT rcNil = {0}; SetConsoleSize(0, gcrVisibleSize, rcNil, ":Exiting"); |
| 2453 | //SetConsoleFontSizeTo(gState.realConWnd, 8, 12); // установим шрифт побольше |
| 2454 | //apiShowWindow(gState.realConWnd, SW_SHOWNORMAL); // и покажем окошко |
| 2455 | EmergencyShow(gState.realConWnd_); |
| 2456 | } |
| 2457 | } |
| 2458 | } |
| 2459 | } |
| 2460 | |
| 2461 | HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); |
| 2462 | HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); |
| 2463 | |
| 2464 | // Сначала почистить буфер |
| 2465 | INPUT_RECORD r = {0}; DWORD dwCount = 0; |
| 2466 | DWORD nPreFlush = 0, nPostFlush = 0; |
| 2467 | #ifdef _DEBUG |
no test coverage detected