VS2013+QT+ windows 下调用cmd命令行(调用HVite识别工具),不显示cmd黑框

因为做demo展示,需要调用HMM中的HVite识别工具,用过网上推荐的system()、WinExec()、ShellExecute()函数等,发现问题是利用system函数可以识别得出对应的mlf文件,但是后两种方法只能得到空的mlf文件,没有得到最终的结果。百度、google一堆后,找到了一个函数createprocess,并利用其中一个参数,正确的调用了HVite并隐藏了黑框。此处将调用HVite的命令行写成了bat文件,最早通过system命令直接调用bat,可以成功运行,但有黑框。后用createProcess后,也可以正常运行bat文件,且去掉了黑框,界面更加友好。大家可以借鉴。

代码块

CreateProcess函数:
C++

//首先将需要执行的cmd命令行写到一个bat文件中,路径是path
` STARTUPINFO si;
PROCESS_INFORMATION pi2;
ZeroMemory(&si, sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = FALSE;//no console 这行代码是不显示黑框的关键设置!
si.cb = sizeof(si);
ZeroMemory(&pi2, sizeof(pi2));
string commandline = “cmd.exe /C ” ;//-C 是cmd命令行调用结束后自动关闭
commandline += path;//path是bat文件所在的路径,相对or绝对都ok
wstring widstr = std::wstring(commandline.begin(), commandline.end());
LPWSTR lvItem = (LPWSTR)widstr.c_str();//输入格式转换

            if (!CreateProcess(NULL, lvItem, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi2))//创建Process
            {
                printf("CreateProcess failed (%d)\n", GetLastError());

            }
            WaitForSingleObject(pi2.hProcess, INFINITE);
            CloseHandle(pi2.hProcess);//释放句柄
            CloseHandle(pi2.hThread);`                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值