VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 551|回复: 2

双管道问题求高手解答

[复制链接]
15_avatar_middle
最佳答案
0 
在线会员 发表于 2021-1-5 11:14:22 | 显示全部楼层 |阅读模式
本帖最后由 I-love-You 于 2021-1-5 11:26 编辑

问题原因: 在OnInitDialog()中初始化了管道创建 这个时候去读 能读到cmd的版本数据

但是自己写命令执行 读不到了   GetLastError();返回0  不知道怎么个问题


//全部代码  求高手解答


HANDLE hReadPipe1 = NULL, hWritePipe1 = NULL;
HANDLE hReadPipe2 = NULL, hWritePipe2 = NULL;

STARTUPINFO si = { 0 };
        si.cb = sizeof(STARTUPINFO);
        PROCESS_INFORMATION pi = { 0 };

        SECURITY_ATTRIBUTES sa = { 0 };
        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.lpSecurityDescriptor = NULL;
        sa.bInheritHandle = TRUE;

        if (!CreatePipe(&hReadPipe1, &hWritePipe1, &sa, 0) || !CreatePipe(&hReadPipe2, &hWritePipe2, &sa, 0))
        {
                return;
        }


        GetStartupInfo(&si);
        si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
        si.hStdInput = hReadPipe1;
        si.hStdOutput = si.hStdError = hWritePipe2;
        si.wShowWindow = SW_HIDE;

        TCHAR szCmdLine[MAX_PATH] = { 0 };
        GetSystemDirectory(szCmdLine, MAX_PATH);
        _tcscat_s(szCmdLine, MAX_PATH, _T("\\cmd.exe"));
        if (!CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
                return;
        }

//下面是读写 管道
CString szCmdLine;
        GetDlgItemText(IDC_EDIT1, szCmdLine);//获取编辑框的内容 (ipconfig)
        szCmdLine += L"\r\n";
   //把命令输出到命令框
        WriteFile(hWritePipe1, szCmdLine, sizeof(szCmdLine), NULL, NULL);
        int error = GetLastError();


        Sleep(2000);

        char szBuffer[1026] = { 0 };
        DWORD dwRead = 0;
        while (PeekNamedPipe(hReadPipe2, NULL, 0, NULL, &dwRead, NULL) && dwRead > 0)
        {
                int error = GetLastError();
                ZeroMemory(szBuffer, 0);
                ReadFile(hReadPipe2, szBuffer, 1026, &dwRead, NULL);
                Sleep(50);
        }

       
        USES_CONVERSION;
        CString Str = A2T(szBuffer);
        SetDlgItemText(IDC_EDIT2,Str);

        UpdateData(TRUE);




1

1

2

2




上一篇:页面返回全部是js函数
下一篇:时间超限,求一更好的算法或者思路
70_avatar_middle
最佳答案
49 
在线会员 发表于 2021-1-5 16:40:17 | 显示全部楼层
试了一下,确实不行,不过自己写的bat可以重复输入输出,不懂什么原理。
另外 _popen 不可以吗,一定要CreateProcess?
62_avatar_middle
最佳答案
0 
在线会员 发表于 2021-1-10 20:52:55 | 显示全部楼层
在读之前先把写通道关闭就可以了。。。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-5-29 22:45

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表