void EmergencyShow(HWND hConWnd) { if (!hConWnd) { hConWnd = GetConsoleWindow(); if (IsWindowVisible(hConWnd)) return; // уже, делать ничего не будем } if (hConWnd) { SetUserFriendlyFont(hConWnd); CorrectConsolePos(hConWnd); if (!IsWindowVisible(hConWnd)) { SetWindowPos(hConWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); //SetWindowPos(hConWnd, HWND_TOP, 50,50,0,0, SWP_NOSIZE); apiShowWindowAsync(hConWnd, SW_SHOWNORMAL); } else { // Снять TOPMOST SetWindowPos(hConWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); } if (!IsWindowEnabled(hConWnd)) EnableWindow(hConWnd, true); } }
void EmergencyShow(HWND hConWnd, int newFontY /*= 0*/, int newFontX /*= 0*/) { if (!hConWnd) hConWnd = GetConsoleWindow(); if (IsWindowVisible(hConWnd)) return; // уже, делать ничего не будем if (!IsWindow(hConWnd)) return; // Invalid HWND wchar_t szMutex[80]; _wsprintf(szMutex, SKIPCOUNT(szMutex) L"ConEmuEmergencyShow:%08X", (DWORD)(DWORD_PTR)hConWnd); HANDLE hMutex = CreateMutex(NULL, FALSE, szMutex); //_ASSERTE(FALSE && "EmergencyShow was called, Continue?"); DWORD dwWaitResult = WaitForSingleObject(hMutex, 5000); if (dwWaitResult == WAIT_OBJECT_0) { if (!IsWindowVisible(hConWnd)) { // Note, this funciton will fail if called from ConEmu plugin // Only servers (ConEmuCD) will be succeeded here SetUserFriendlyFont(hConWnd, newFontY, newFontX); CorrectConsolePos(hConWnd); SetWindowPos(hConWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); apiShowWindowAsync(hConWnd, SW_SHOWNORMAL); } ReleaseMutex(hMutex); } else { // Invalid mutex operation? Just show the console apiShowWindowAsync(hConWnd, SW_SHOWNORMAL); } if (!IsWindowEnabled(hConWnd)) EnableWindow(hConWnd, true); CloseHandle(hMutex); }