Win32编程隐藏控制台窗口

H4c*_*0rD 16 c c++ windows console winapi

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

Rob*_*edy 27

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

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

如果您正在尝试编写一个有时可能有控制台但有时没有控制台的程序,那么请查看之前的问题,一个可执行文件是否可以同时是控制台和GUI应用程序?

  • 如果运行Mingw,可以通过添加"-mwindows"标志来设置GUI模式. (12认同)

Mac*_*cke 9

假设你在Windows上,配置你的链接器来制作一个gui程序,而不是一个控制台程序.

  • VS:查看项目属性的链接器选项
  • 链接:添加/ SUBSYSTEM:WINDOWS
  • MinGW:-mwindows


udi*_*043 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是一个小改进,你可以使用GetConsoleWindow()而不是FindWindowA(). (2认同)

ST3*_*ST3 5

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

  • 如果没有 SW_MINIMIZE HWND hWnd = GetConsoleWindow(); 它不会隐藏窗口;ShowWindow( hWnd, SW_MINIMIZE ); ShowWindow( hWnd, SW_HIDE ); (2认同)

Ale*_*der 5

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

g++ -mwindows winapp.c
Run Code Online (Sandbox Code Playgroud)

看来方法

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

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