显示命令行控制台(cmd.exe)的几种方式——Qt、C++

前言

最近帮朋友写小工具,其中涉及到显示命令行控制台,没想到理所当然的,变得不那么理所当然了。

实现的几种方式

方式一(QProcess)

用QProcess实现是我当时想到的第一种方式,可能是之前一直用QProcess执行命令行。

本来以为一行代码就可以实现,如下,毕竟之前用它调用外部程序时,都是可以的。

QProcess::execute("cmd.exe");

然后发现是不行的,程序(cmd.exe)是运行了,但是没有显示界面。我百度查找问题解决方法,找到了这个qt - QProcess with 'cmd' command does not result in command-line window - Stack Overflow

需要通过函数setCreateProcessArgumentsModifier来设置参数,创建一个新的控制台

    m_pPro->setCreateProcessArgumentsModifier(
                [](QProcess::CreateProcessArguments *args) {
        args->flags |= CREATE_NEW_CONSOLE;
        args->startupInfo->dwFlags &=~ STARTF_USESTDHANDLES;
    });

方式二(system())

使用函数system()来实现,我差了下system的入参是 DOS命令

#include<stdlib.h>

system("cmd.exe");

方式三(QDesktopServices::openUrl()) 

静态函数QDesktopServices::openUrl()可以打开本地文件、文件夹、应用或者用默认浏览器打开网址。

      
    //QString path="https://blog.csdn.net/xiaopei_yan?type=blog";
    //QString path="C:/Users/admin/Desktop";
    QString path="cmd.exe";
    QDesktopServices::openUrl(QUrl::fromLocalFile(path));

方式四(CreateProcess()) 

windows 自带的方法创建进程CreateProcess(),具体用法可参考19.VC(custom)-CreateProcess函数详解_花熊的博客-CSDN博客

    TCHAR szCmdLine[] = { TEXT("cmd.exe") };
    STARTUPINFO StartInfo = { sizeof(StartInfo) };
    PROCESS_INFORMATION ProcInfo;
    StartInfo.dwFlags = STARTF_USESHOWWINDOW;
    StartInfo.wShowWindow = TRUE;
    CreateProcess(NULL, szCmdLine, NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo);

结束语 

各种方式,任君挑选。

猜你喜欢

转载自blog.csdn.net/xiaopei_yan/article/details/126741770
今日推荐