控制台应用程序控制台窗口-Visual C ++

穆罕默德·易卜拉欣

我在控制台应用程序Visual Studio中制作了C ++代码。我的问题是如何使最终exe在没有控制台的情况下运行(仅从任务管理器中看到的过程)

到目前为止,我所看到的解决方案都使控制台出现一秒钟,然后熄灭。我不要这个 根本不出现。

Visual Studio中是否有任何选项或标志可以做到这一点?(类似g ++中的-mwindows标志)

提前致谢

黑暗猎鹰

Project PropertiesConfiguration Properties- > Linker- >System页,您需要设置的值SubSystemWindows (/SUBSYSTEM:WINDOWS)新控制台应用程序项目的默认值为Console (/SUBSYSTEM:CONSOLE),这将导致Windows在启动程序时分配新控制台或附加到父进程的控制台。

在此处输入图片说明


您还需要将main功能更改WinMainWinMain的签名是:

int CALLBACK WinMain(
  _In_ HINSTANCE hInstance,
  _In_ HINSTANCE hPrevInstance,
  _In_ LPSTR     lpCmdLine,
  _In_ int       nCmdShow)
{
    // Your code here
}

通过上述方法,子控制台进程仍将创建控制台窗口。既然你要使用评论说popen,你真的不能轻易使用电话的正常方式CreateProcess使用SW_HIDE

您真正想要做的是将一个隐藏的控制台窗口附加到您的进程,并允许您的子进程继承它。这可能不是最好的代码,但这是一种实现方法:

// Allocates a hidden console window for this process. This console can be
// inherited by child console processes, preventing them from creating a
// visible console. Returns false if the attempt fails.
bool AllocHiddenConsole()
{
  TCHAR command[] = _T("cmd.exe");
  STARTUPINFO startupInfo{};
  PROCESS_INFORMATION processInfo{};
  startupInfo.cb = sizeof(startupInfo);
  startupInfo.dwFlags = STARTF_USESHOWWINDOW;
  startupInfo.wShowWindow = SW_HIDE;

  if (!CreateProcess(NULL, command, NULL, NULL, FALSE,
    CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo))
  {
    return false;
  }

  bool attached = false;
  for (int i = 0; i < 1000; i++)
  {
    if (AttachConsole(processInfo.dwProcessId))
    {
      attached = true;
      break;
    }
    Sleep(10);
  }

  TerminateProcess(processInfo.hProcess, 0);
  CloseHandle(processInfo.hProcess);
  CloseHandle(processInfo.hThread);

  return attached;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

显示/隐藏C#控制台应用程序的控制台窗口

防止在Visual Studio C / C ++控制台应用程序上关闭控制台窗口

Visual Studio 2015“窃取”应用程序的控制台

C#控制台应用程序的Visual Studio代码

在Visual Studio Code中,在外部窗口中启动控制台应用程序

Visual Studio(MAC)控制台应用程序

控制台窗口不再出现在我的Visual Studio节点控制台应用程序中

在其他项目Visual Studio中使用控制台应用程序类中的c ++类

Visual C#形式的控制台

Visual Studio C ++控制台应用程序生成并运行,但未创建EXE文件

如何为自包含的控制台应用程序Visual Studio C#创建.msi安装程序

从控制台应用程序创建新控制台?C ++

C ++控制台应用程序使其他CMD窗口无法接受控制台输入

控制台应用程序屏幕在Visual c ++ 6.0中消失

Visual Studio最小化表单应用程序并显示控制台窗口

调用WCF的C#控制台应用程序的窗口调度程序失败

如何更改控制台应用程序Visual Studio的窗口标题

从Visual Studio目录中删除C#控制台应用程序时挂起

控制台应用程序完成退出(Visual Studio)

在Visual Studio 2015社区中为现有C#控制台应用程序创建服务安装程序

从MenuStrip启动控制台应用程序(Visual C#)

为什么在 Visual Studio 中用 C++ 编写 GUI 应用程序的代码与控制台应用程序不同?

Visual Studio C# 控制台应用程序 (.NET Core) 模板不同

C# 在控制台应用程序中构建 Visual Studio 项目

visual 基本控制台应用程序框架模块

在 Visual Studio for Mac 8.6.2 中运行 C# 控制台应用程序时使用系统终端

默认 Visual Studio C++ 控制台应用程序有 409 错误

如何修改 Visual Studio 的 C# .Net Core 控制台应用程序项目模板

Visual Studio 2019 C# 控制台应用程序 VS 控制台应用程序 (.NET Framework) 发布窗口不同