Win32编程隐藏控制台窗口

时间:2009-03-07 22:10:14

标签: c++ c windows winapi console

我正在学习C ++并且我制作了一个新程序,我删除了一些代码,现在我的控制台窗口将无法隐藏是否有办法让它在启动时隐藏而不会看到它

8 个答案:

答案 0 :(得分:27)

如果您正在编写控制台程序,并且想要将程序从它开始的控制台断开,请调用FreeConsole。最终,你可能不会对这个功能的真正作用感到满意,但这是你问的问题的字面答案。

如果您正在编写一个您从不希望拥有控制台的程序,那么请配置您的项目,使其不是控制台程序。 “Consoleness”是EXE文件的属性。操作系统读取该设置并决定是否在任何代码运行之前为您的程序分配控制台,因此您无法在程序中控制它。有时非控制台程序称为“GUI程序”,因此您可能需要在开发环境的配置选项中选择“控制台”和“GUI”。但是,将其设置为GUI并不要求您拥有任何用户界面。该设置仅控制您的程序是否以控制台启动。

如果您正在尝试编写有时可能有控制台但有时没有控制台的程序,请参阅之前的问题,Can one executable be both a console and GUI app?

答案 1 :(得分:9)

假设您在Windows上,请将链接器配置为制作gui程序,而不是控制台程序。

  • VS:查看项目属性的链接器
  • LINK:add / SUBSYSTEM:WINDOWS
  • MinGW:-mwindows

答案 2 :(得分:7)

#include <windows.h>
#include <iostream>
using namespace std;
void Stealth()
{
 HWND Stealth;
 AllocConsole();
 Stealth = FindWindowA("ConsoleWindowClass", NULL);
 ShowWindow(Stealth,0);
}

int main()
{
  cout<<"this sentence is visible\n";
  Stealth(); //to hide console window
  cout<<"this sentence is not visible\n";
  system("PAUSE");
  return EXIT_SUCCESS;
}

答案 3 :(得分:5)

在这种情况下我常常使用ShowWindow (GetConsoleWindow(), SW_HIDE);,但是如果你不需要控制台,那么就不要创建控制台应用程序项目。

答案 4 :(得分:3)

如前所述,在exe中设置是否使用控制台启动应用程序。使用gnu编译器,选项是-mwindows,没有控制台,例如

g++ -mwindows winapp.c

似乎是方法

#define _WIN32_WINNT 0x0500
#include <wincon.h> 
....
   case WM_CREATE : 
      ShowWindow (GetConsoleWindow(), SW_HIDE);

也关闭所有父控制台,因此如果从a启动winapp.exe 命令行控制台也将关闭!

答案 5 :(得分:1)

您可以最小化创建窗口。或者将其涂在可见屏幕之外。

但你也可能搞乱了窗口创建标志。如果你真的搞砸了。开始一个新窗口通常会更好。 (或从以前的版本或备份还原)。

答案 6 :(得分:1)

要按需隐藏/显示控制台窗口,您可以使用以下功能: 可以使用ShowWindow隐藏/显示控制台。 GetConsoleWindow检索控制台使用的窗口句柄。 IsWindowVisible可用于检查窗口(在这种情况下是控制台)是否可见。

#include <Windows.h>

void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}

void ShowConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_SHOW);
}

bool IsConsoleVisible()
{
    return (::IsWindowVisible(::GetConsoleWindow()) != FALSE);
}

答案 7 :(得分:0)

您可以尝试

#include <windows.h>

int main() {
::ShowWindow(::GetConsoleWindow(), SW_HIDE);
MessageBox(NULL,"The console Window has been hidden.","Console Hidden",MB_ICONINFORMATION);
return 0;

}

它是win32 API的一部分,您可以使用“ #include”

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow

第一个参数告诉程序获取当前正在运行该程序的控制台窗口。第二个参数向下传递您要对窗口执行的操作的指令。 “ SW_HIDE”隐藏窗口,而“ SW_SHOW”显示窗口。