簡體   English   中英

C ++將控制台窗口置於最前面

[英]C++ bring console window to the front

我用c ++編寫了一個小計時器程序,一旦計時器用完,我希望控制台窗口在Windows中彈出到前台以顯示“完成”消息。 我讀到有關使用“ SetForegroundWindow(hwnd)”的信息,該功能正是我從Visual Studio運行代碼時想要的,但是當我構建發行版並從VS外部運行exe時,不會彈出控制台窗口,而是它在系統任務欄中的圖標閃爍。 任何想法為什么會這樣? 我已經在64位Windows 7和10上對其進行了測試,並且都做了相同的事情。

在大多數情況下,只要正確還原窗口,就可以使用SetForegroundWindow 有時系統可能會拒絕該請求( 請參閱文檔 ),通常有充分的理由,您不應該嘗試覆蓋系統。 如果SetForegroundWindow失敗,則您仍然可以使用備份選項,在該選項中,任務欄中的閃爍按鈕將向用戶發出警報。

void show(HWND hwnd)
{
    WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) };
    GetWindowPlacement(hwnd, &place);
    switch(place.showCmd)
    {
    case SW_SHOWMAXIMIZED:
        ShowWindow(hwnd, SW_SHOWMAXIMIZED);
        break;
    case SW_SHOWMINIMIZED:
        ShowWindow(hwnd, SW_RESTORE);
        break;
    default:
        ShowWindow(hwnd, SW_NORMAL);
        break;
    }
    SetWindowPos(0, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
    SetForegroundWindow(hwnd);
}

int main()
{
    HWND hwnd = GetConsoleWindow();
    ShowWindow(hwnd, SW_SHOWMINIMIZED);
    //Test: manually click another window, to bring that other window on top
    Sleep(5000);

    //this window should restore itself
    show(hwnd);
    system("pause");
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM