控制台程序完成后转换到命令提示符?
我正在用 C 和 C++ 编写一些使用 Windows 控制台的可执行文件。
我试图让控制台在我的程序逻辑完成后不关闭......但不仅仅是暂停或等待,我希望它成为一个 cmd.exe 命令行控制台本身,准备接受新的提示.
本质上,我希望通过双击或拖放来运行我的程序的行为相当于点击winkey + r和运行:
cmd /k "program.exe [list of drag+drop files if any]"
(如果从命令行本身运行,则不会打开新控制台。)
这可能吗?
编辑
我一直在修补这个并找到了一个似乎有效的解决方案:
std::getenv("PROMPT") 将返回 0不从命令行运行时(我认为无论如何,不确定是否在所有情况下都适用),因此可用于根据可执行文件的运行方式来分叉逻辑。
以下代码至少对我有用,在我有限的实验中。如果它是从资源管理器中运行的,它会使用它的第一个实例来调用 cmd.exe 并带有参数,让该实例再次使用原始参数调用我们的程序。
int main(int argc, char * argv[]) {
// checks if we're in the explorer window, if so delegates to a new instance
if (std::getenv("PROMPT") == NULL) {
printf("Starting from explorer...n");
std::string str("cmd /Q /k "");
for (uint32 n = 0; n < argc; ++n) {
str.append(""");
str.append(argv[n]);
str.append(""");
if(n < argc-1)
str.append(" ");
}
str.append(""n");
system(str.c_str());
return 0;
}
// actual code we want to run
uint32 fileCount = 0;
for (uint32 n = 0; n < argc - 1; ++n) {
fileCount++;
printf("file %02u >> %sn", n, argv[n+1]);
}
if (fileCount == 0) {
printf("No inputs...n");
}
return 0;
}
所以我想从概念上讲,它看起来像这样。
____stays open_______________________ __closes when finished___
program.exe [paramList] ---> cmd.exe -+-> program.exe [paramList]
|
+-> any subsequent commands
|
etc