コード例 #1
0
ファイル: WinConsole.cpp プロジェクト: havocbane/ConEmu
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);
    }
}
コード例 #2
0
ファイル: EmergencyShow.cpp プロジェクト: qyqx/ConEmu
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);
}