【问题标题】:Make a C++ Program Run without a Window Using gcc/g++? [duplicate]使用 gcc/g++ 使 C++ 程序在没有窗口的情况下运行? [复制]
【发布时间】:2017-09-14 04:02:02
【问题描述】:

我有一个非常简单的程序;它永远播放由循环路径定义的单个音频文件,直到程序终止。代码在这里:

#include <windows.h>
#include <mmsystem.h>
#include <iostream>

using namespace std;

int main(void) {
    PlaySound("C:\\Users\\Ben\\Desktop\\silence.wav", NULL, SND_LOOP | SND_ASYNC | SND_FILENAME);
    cin.get();
    return 0;
}

程序本身运行良好,但正如您所料,它会生成一个空白控制台窗口,就像任何程序一样。但是由于我想让这个程序在后台运行并且不可见,我是否可以编写它以便它根本没有窗口?我意识到如果我这样做了,唯一的出路就是从流程管理器中结束它,但这很好。另外,我只想在代码中/从 g++ 编译器中执行此操作;我尝试阅读有关使用 Visual Studio 执行此操作的信息,但我永远无法让它工作,而且对于这种规模的东西似乎真的没有必要。感谢您的建议。

【问题讨论】:

  • 它不是重复的——OP 明确指出:“有可能.. 它根本没有窗口吗?”

标签: c++ windows gcc g++


【解决方案1】:
int main()
{
  FreeConsole();
  PlaySound(...);
  ...
}

这种程序只能从任务管理器中杀死。您可能需要考虑设置某种 IPC,以便您可以指示现有实例关闭声音并退出。

【讨论】:

  • 当我这样做时,窗口只是短暂显示然后消失。我检查了任务管理器,该进程没有运行。除此之外,我没有对我的代码进行任何修改。此外,我尝试了上面的链接,这个问题被标记为重复,但这对我不起作用;它可以构建,但是当我运行它时,什么也没有发生,而且我在任务管理器中也看不到它。
  • 如果您没有控制台,cin.get() 将无法工作。请改用Sleep(INFINITE);
  • 有道理,感谢您指出这一点。到时候我会把它标记为答案,虽然我要到明天才能测试它。
  • 如果你使用Sleep(INFINITE),那么杀死你的程序的唯一方法就是通过任务管理器。
  • @Dúthomhas 这正是我想要的。它应该类似于 Windows 服务或类似的东西。
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多