控制台程序完成后转换到命令提示符?

我正在用 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

以上是控制台程序完成后转换到命令提示符?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>