求助大佬c++怎么让程序执行cmd命令并且得到返回值,而且不显示dos窗口

名字长了总有XX跟着念 2020-03-25 05:02:41
char buffer[4068];
FILE* pipe = _popen(cmd, "r");

if (!pipe)
{
strcat(result, "erroe");

}
while (!feof(pipe)) {
if (fgets(buffer, 4068, pipe)) {
strcat(result, buffer);
}
}
_pclose(pipe);

现在在用管道传输的方法,但是他会有黑窗口闪过,而且没法隐藏。
如果是WIN API:WinExec()的话好像没法获得结果哎。
我该怎么办?望大佬解答,谢谢。
...全文
1685 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdcire 2020-03-30
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
或者
用CreateProcss创建新进程,
然后用WaitForSingleObject(那个句柄, INFINITE)等待进程结束
最后用GetExitCodeProcess(那个句柄, &用来获取返回值的变量) 获取返回值


这样是可以的,不过应该只能获得main函数的
hezex 2020-03-28
  • 打赏
  • 举报
回复
好像可以用hwnd=FindWindow(...)获取CMD句柄,然后再用ShowWindow(hwnd,SW_HIND);去隐藏它,但是这样成型有可能会是有个CMD窗口一闪而过
  • 打赏
  • 举报
回复
引用 3 楼 qybao 的回复:
或者
用CreateProcss创建新进程,
然后用WaitForSingleObject(那个句柄, INFINITE)等待进程结束
最后用GetExitCodeProcess(那个句柄, &用来获取返回值的变量) 获取返回值
谢谢,我会去试试的
  • 打赏
  • 举报
回复
引用 2 楼 qybao 的回复:
用匿名管道呢?
for example

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(int argc, char **argv)
{
int fpipe[2] = {0};
pid_t fpid;
char buff[4068];
memset(buff, 0, sizeof(buff));

if (pipe(fpipe) < 0)
{
perror("piple:");
return -1;
}

fpid = fork();
if (fpid < 0)
{
perror("fork:");
return -1;
}

if (fpid == 0)
{
close(fpipe[0]);
dup2(fpipe[1],STDOUT_FILENO);
system(cmd);
}
else
{
fflush(stdout);
close(fpipe[1]);
read(fpipe[0], buff, 4096);
std::cout << "run cmd" return:";
std::cout << buff << std::endl;
}
return 0;
}


再不行用临时文件,cmd的输出重定向到临时文件,再读如临时文件
好像用管道就会弹dos窗口吧
qybao 2020-03-25
  • 打赏
  • 举报
回复
或者
用CreateProcss创建新进程,
然后用WaitForSingleObject(那个句柄, INFINITE)等待进程结束
最后用GetExitCodeProcess(那个句柄, &用来获取返回值的变量) 获取返回值

qybao 2020-03-25
  • 打赏
  • 举报
回复
用匿名管道呢?
for example

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(int argc, char **argv)
{
int fpipe[2] = {0};
pid_t fpid;
char buff[4068];
memset(buff, 0, sizeof(buff));

if (pipe(fpipe) < 0)
{
perror("piple:");
return -1;
}

fpid = fork();
if (fpid < 0)
{
perror("fork:");
return -1;
}

if (fpid == 0)
{
close(fpipe[0]);
dup2(fpipe[1],STDOUT_FILENO);
system(cmd);
}
else
{
fflush(stdout);
close(fpipe[1]);
read(fpipe[0], buff, 4096);
std::cout << "run cmd" return:";
std::cout << buff << std::endl;
}
return 0;
}


再不行用临时文件,cmd的输出重定向到临时文件,再读如临时文件
Italink 2020-03-25
  • 打赏
  • 举报
回复
Qt上面倒是有,通过QProcess执行cmd命令,就是不知道它是用哪些API实现的

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧