控制台程序不能用默认控制台打开

为什么在自己电脑上写好的Windows控制台程序(C++),用打包之后到别的电脑上,会自动用Windows Terminal打开,如何用代码,强制用旧版控制台打开?

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在 Windows 操作系统中,可以使用 CreateProcess 函数来启动一个新进程,并指定其使用的控制台窗口。为了确保新进程使用旧版控制台窗口,您可以通过以下步骤修改代码:

1、 将启动新进程的代码改为使用 CreateProcess 函数。例如:

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

LPTSTR cmdline = _tcsdup(TEXT("your_program.exe"));
CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

2、 设置 STARTUPINFO 结构体的 dwFlags 字段为 STARTF_USESTDHANDLES,并使用 GetStdHandle 函数获取标准输出和标准错误输出的句柄。例如:

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES; // 设置使用标准句柄
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出句柄
si.hStdError = GetStdHandle(STD_ERROR_HANDLE); // 获取标准错误输出句柄
ZeroMemory(&pi, sizeof(pi));

LPTSTR cmdline = _tcsdup(TEXT("your_program.exe"));
CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);

通过以上方法,您可以在代码中指定使用标准的控制台窗口,而不是使用 Windows Terminal。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢