MCPcopy Create free account
hub / github.com/ConEmu/ConEmu / ExitWaitForKey

Function ExitWaitForKey

src/ConEmuCD/ConsoleMain.cpp:2410–2587  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2408}
2409
2410int 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

Callers 2

ConsoleMain3Function · 0.85
CheckAttachProcessMethod · 0.85

Calls 5

GetConEmuHWNDFunction · 0.85
isConEmuTerminatedFunction · 0.85
EmergencyShowFunction · 0.85
PrintBufferFunction · 0.70
swprintf_cFunction · 0.50

Tested by

no test coverage detected