|
本帖最后由 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
-
2
上一篇: 页面返回全部是js函数下一篇: 时间超限,求一更好的算法或者思路
|