如何在后台进行C ++程序进程,直到计算机closures?

IDE:Visual Studio 2013

第一步:如果您使用的是IDE,那么在创建项目时,最有可能会问“console-app”与“window-app”。 选择window-app,这意味着它将在不打开控制台的情况下启动。

在这里输入图像说明在这里输入图像说明

第2步:现在在代码中您的IDE可能会生成一些代码,使窗口可见。 删除该代码:

在这里输入图像说明

您的程序现在运行,但在任务栏上不可见:

在这里输入图像说明

为了运行你自己的代码,你有两个选项。 哪一个是合适的取决于你的情况,但是第二个一般是首选的:

  • 或者使用像WinMain这样的生成方法来启动你自己的方法,该方法应该包含一个循环,并在你的代码中加上Sleep()的调用。

  • 使用Windows消息按需运行一些代码。 ( 优选

该程序将运行,直到您的计算机关闭; 那么它将不再运行。


关于何时使用选项1和选项2的几点说明:

选项2通常被认为是更好的,因为它可以操作系统(Windows)一起工作,它只在操作系统告诉它有所改变时才执行代码。 另一方面选项1不依赖于Windows消息 – 有时你需要这种独立性。 它的代价是:你的代码可能会“手动”检查是否有改变,有时会做某些事情,但大部分时间选择睡眠()。 这被称为- >按顺序轮询 。 所以更喜欢选项2。


这是如何修改选项2应用程序的WndProc 。 例如:每秒钟发出一声哔哔声。

 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { #define IDT_TIMER1 123 // todo find out which numbers are allowed // which depends on windows AND your organization case WM_CREATE: SetTimer(hWnd, IDT_TIMER1, 1000, (TIMERPROC) NULL); break; case WM_TIMER: switch (wParam) { case IDT_TIMER1: Beep(100,50); break; } break; case WM_COMMAND: ... 

为此目的,你需要隐藏你的窗口。

对于控制台: ShowWindow (GetConsoleWindow(), SW_HIDE);

对于Win32项目:要么不使用CreateWindowCreateWindowExShowWindow(hWnd, SW_HIDE)创建窗口ShowWindow(hWnd, SW_HIDE)


或者最好的解决方案,你可以创建服务, 一些示例