windows 如何使一个C++程序在后台运行直到计算机关机?

cwxwcias  于 2023-01-27  发布在  Windows
关注(0)|答案(3)|浏览(320)

1.窗口:
1.有没有可能让一个C++程序在后台执行而不显示任何控制台或GUI?如何?
1.我怎么才能让它一直运行到电脑关机呢?
1.请问,当这个程序处于活动状态时,我如何保持一个函数的执行?

  • 集成开发环境:Visual Studio 2013 *
vxf3dgd4

vxf3dgd41#

    • 步骤1:**如果您使用的是IDE,则在项目创建期间,它很可能会询问"console-app"与"window-app"。选择window-app,这意味着它将在不打开控制台的情况下启动。

    • 第2步:**现在在代码中,您的IDE可能已经生成了一些使窗口可见的代码。删除这些代码:

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

    • 运行您自己的代码有两个选项。**哪一个选项合适取决于您的情况,但通常首选第二个选项:
  • 或者使用生成的方法之一(如WinMain)来启动您自己的方法,该方法应包含一个循环,并在该循环中使用代码加上对Sleep()的调用。
  • 使用windows-消息到运行一些你的代码on-demand.(首选

程序将一直运行到您的计算机关闭为止;那么它将不再运行。
关于何时使用选项1和选项2的几点说明:

    • 选项2**通常被认为更好,因为它 * 与 * 操作系统(Windows)一起工作,它只在操作系统通知它有更改时执行代码。选项1另一方面不依赖于Windows消息-有时您需要这种独立性。但它需要付出代价:你的代码可能会"手动"检查是否有什么改变,有时会做一些事情,但大多数时候选择Sleep()。这被称为->polling btw。所以首选选项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:
    ...
kd3sttzy

kd3sttzy2#

为此,您需要隐藏窗口。
对于控制台:ShowWindow (GetConsoleWindow(), SW_HIDE);
对于Win32项目:或者不使用CreateWindowCreateWindowEx创建窗口,或者使用ShowWindow(hWnd, SW_HIDE)
或者最佳解决方案,您可以创建服务some sample

f4t66c6m

f4t66c6m3#

以下是隐藏窗口的方法:

void main() {
    HWND window;
    AllocConsole();
    window = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(window, 0);
    //close program when Esc pressed
    if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
        return 0;
    }
}

相关问题