我用 C++ 编写了一个小计时器程序,一旦计时器用完,我希望控制台窗口弹出到 Windows 的前台以显示“完成”消息。我阅读了有关使用“SetForegroundWindow(hwnd)”的信息,当我从 visual studio 运行代码时,它完全符合我的要求,但是当我构建一个版本并从 VS 外部运行 exe 时,控制台窗口不会弹出,而是它在系统托盘中的图标闪烁。任何想法为什么会这样?我已经在 64 位 Windows 7 和 10 上对其进行了测试,两者都做了同样的事情。
最佳答案
在大多数情况下,只要窗口正确恢复,您就可以使用 SetForegroundWindow
。有时系统可能会拒绝请求 ( see documentation ),这通常是有充分理由的,您不应尝试覆盖系统。如果 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;
}
关于C++ 将控制台窗口置于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351897/