【问题标题】:Win32 programming hiding console windowWin32编程隐藏控制台窗口
【发布时间】:2010-10-11 23:27:07
【问题描述】:

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

【问题讨论】:

  • 发布导致问题的代码
  • 应该一直在使用源代码管理。这样你就可以回到以前的版本,看看出了什么问题。

标签: c++ c windows winapi console


【解决方案1】:

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

但是您也可能弄乱了窗口创建标志。如果你真的把事情搞砸了。启动一个新窗口通常会更好。 (或从以前的版本或备份恢复)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如何,这是个问题。
    • @Youda008:作为链接器参数,/SUBSYSTEM:WINDOWS 使用,你应该。 ;)
    • 我刚刚在 MinGW 上发现它是使用参数 -mwindows 完成的,您可以将这些添加到答案中吗?
    【解决方案3】:

    如果您正在编写一个控制台程序,并且想要断开您的程序与它开始时使用的控制台的连接,请调用FreeConsole。最终,您可能不会对该函数的实际作用感到满意,但这就是您所提问题的字面答案。

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

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

    【讨论】:

    • 如果运行 Mingw,可以通过添加“-mwindows”标志来设置 GUI 模式。
    【解决方案4】:

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

    【讨论】:

    • 没有 SW_MINIMIZE HWND hWnd = GetConsoleWindow(); 不会隐藏窗口ShowWindow(hWnd, SW_MINIMIZE); ShowWindow(hWnd, SW_HIDE);
    • @Ankur,你试过了吗,SW_HIDE 没用?因为完美地为我工作。
    【解决方案5】:

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

    g++ -mwindows winapp.c
    

    好像方法

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

    同时关闭所有父控制台,因此如果您从 命令行控制台也将关闭!

    【讨论】:

      【解决方案6】:
      #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;
      }
      

      【讨论】:

      • 只是一个小改进,您可以使用 GetConsoleWindow() 代替 FindWindowA()。
      • 谢谢@davidnr 我会修改它:)
      • @athos,请阅读:msdn.microsoft.com/en-us/library/windows/desktop/…,我不再使用 Windows,但 AFAIK 制作了另一个功能:void ShowWin() { HWND St​​ealth;分配控制台(); Stealth = FindWindowA("ConsoleWindowClass", NULL);显示窗口(隐身,1); //用于显示关闭的窗口 } ;并在程序调用 ShowWin();无论您想在哪里显示关闭的窗口。我希望这会奏效。
      【解决方案7】:

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

      #include <Windows.h>
      
      void HideConsole()
      {
          ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
      }
      
      void ShowConsole()
      {
          ::ShowWindow(::GetConsoleWindow(), SW_SHOW);
      }
      
      bool IsConsoleVisible()
      {
          return (::IsWindowVisible(::GetConsoleWindow()) != FALSE);
      }
      

      【讨论】:

      • 一些解释,也许一些文档链接?
      • 我不能发布超过 1 个链接。我的声望不够。
      • 嗯,remove new user restrictions 应该在 10 个代表处发生,所以我想你现在已经够了吗?
      • 完成,我添加了更多链接。
      【解决方案8】:

      你可以试试这个

      #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”显示窗口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 2019-07-22
        • 2012-10-14
        • 2011-04-03
        • 2023-03-28
        • 1970-01-01
        • 2022-10-12
        相关资源
        最近更新 更多