gpt4 book ai didi

visual-c++-2008 - 如何隐藏子进程的控制台窗口?

转载 作者:行者123 更新时间:2023-12-03 01:18:32 25 4
gpt4 key购买 nike

我正在尝试编写一个非常简单的程序来替换现有的可执行文件。它应该稍微调整其参数并使用新参数执行原始程序。它应该由第三方库自动且静默地调用。

它运行正常,但会弹出一个控制台窗口来显示调用程序的输出。我需要那个控制台窗口不存在。我不关心程序的输出。

我最初的尝试是设置为控制台应用程序,因此我认为可以通过编写一个执行相同操作的新 Windows GUI 应用程序来解决此问题。但它仍然弹出控制台。我假设原始命令被标记为控制台应用程序,因此 Windows 会自动为其提供一个控制台窗口来运行。我还尝试用对 system() 的调用替换对 _exec() 的原始调用,以防万一。没有帮助。

有人知道如何让这个控制台窗口消失吗?

这是我的代码:

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* lpCmdLine,
int nCmdShow)
{
char *argString, *executable;
// argString and executable are retrieved here

std::vector< std::string > newArgs;
// newArgs gets set up with the intended arguments here

char const ** newArgsP = new char const*[newArgs.size() + 1];
for (unsigned int i = 0; i < newArgs.size(); ++i)
{
newArgsP[i] = newArgs[i].c_str();
}
newArgsP[newArgs.size()] = NULL;

int rv = _execv(executable, newArgsP);
if (rv)
{
return -1;
}
}

最佳答案

使用CreateProcess函数而不是 execve。对于 dwCreationFlags 参数,传递 CREATE_NO_WINDOW 标志。您还需要将命令行作为字符串传递。

例如

STARTUPINFO startInfo = {0};PROCESS_INFORMATION procInfo;TCHAR cmdline[] = _T("\"path\\to\\app.exe\" \"arg1\" \"arg2\"");startInfo.cb = sizeof(startInfo);if(CreateProcess(_T("path\\to\\app.exe"), cmdline, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &startInfo, &procInfo)){    CloseHandle(procInfo.hProcess);   CloseHandle(procInfo.hThread);}

关于visual-c++-2008 - 如何隐藏子进程的控制台窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com