在后台运行一个 gui 程序

Posted

技术标签:

【中文标题】在后台运行一个 gui 程序【英文标题】:running a gui program in the background 【发布时间】:2013-04-18 14:55:24 【问题描述】:

我创建了一个将运行另一个程序的 Windows 服务。但现在我想运行一个有 gui 但在后台运行的程序,所以我不希望 gui 可见。这是我用于service的代码

但我无法编辑 gui 程序

有没有办法在服务程序中将 gui 设置为隐藏或设置 visible = false?

该服务是使用 Visual Studios 在 C++ 中创建的 Windows 服务

我使用 CreateProcess 来启动 exe 文件 这是我用来从服务运行程序的代码:

path = "C:\MyDirectory\MyFile.exe";

STARTUPINFO info=sizeof(info);
PROCESS_INFORMATION processInfo;
if (CreateProcess(path, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))

    ::WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);

是否可以在不编辑程序本身的情况下隐藏 gui?

【问题讨论】:

我猜这适用于 Windows... 【参考方案1】:

您可能得到的最接近的方法是设置 STARTUPINFO 结构的 wShowWindow 成员。即使这样,它也只有在应用程序尊重WinMain 中的nCmdShow 参数时才会起作用。

STARTUPINFO info = 0;

info.dwFlags = STARTF_USESHOWWINDOW;
info.wShowWindow = SW_HIDE;

if (CreateProcess(path, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))

    //...

【讨论】:

我无法访问 gui 程序的代码。我没有创建它,所以我无法检查参数 对不起,我不明白你的意思 您似乎还没有尝试将其作为可行的解决方案。这意味着您不知道它是否会起作用。由于您无权访问源代码,除非您尝试过,否则您不会知道。 我收到此错误:错误 C2039: 'flags' : is not a member of '_STARTUPINFOW' 感谢它现在编译的代码。我用我要运行的程序对其进行了测试,它没有隐藏窗口,但如果我用记事本测试它,它隐藏了没问题

以上是关于在后台运行一个 gui 程序的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GUI 卡住并且后台进程运行良好?

如何在 Android 上后台运行 Qt 应用程序?

运行后台任务,然后运行 ​​GUI

如何在Windows下编写在后台一直运行的Python程序

Python 3 - 主线程未检测到后台线程中的KeyboardInterrupt,直到用户将鼠标悬停在GUI窗口上

C++ 在后台运行程序 Windows 10