控件初始化

BOOL CMFCApplication1App::InitInstance()

AfxInitRichEdit2();

 

void ThreadProc(void* p)
{
CMFCApplication1Dlg* dlg = (CMFCApplication1Dlg*)p;
dlg->ExecCmd();
}

void CMFCApplication1Dlg::OnBnClickedButton1()
{

CString str;
//ExecCmd();
std::thread t(ThreadProc, this);
t.detach();

}






void CMFCApplication1Dlg::AppendText(CString str)
{
m_ctrlRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);
m_ctrlRichEdit.SetSel(-1, -1);
m_ctrlRichEdit.ReplaceSel((LPCTSTR)str);
}


int CMFCApplication1Dlg::ExecCmd()
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if (!CreatePipe(&hRead, &hWrite, &sa, 0))
{
DWORD dErr = GetLastError();
CString szInfo;
szInfo.Format(_T("Fail to Create Pipe Error: %d"), dErr);
MessageBox(szInfo);
return -1;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
TCHAR szCommand[] = _T("cmd.exe /k ipconfig/all");
if (!CreateProcess(NULL, szCommand, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
MessageBox(_T("Fail to create process"));
return -2;
}
CloseHandle(hWrite);
char buffer[128] = { 0 };
DWORD bytesRead;

for (;;)
{
if (ReadFile(hRead, buffer, 128, &bytesRead, NULL) == NULL || bytesRead == 0)
{
break;//读取结束
}
else
{
TCHAR szShow[128] = { 0 };
MultiByteToWideChar(CP_ACP, NULL, buffer, 128, szShow, 128);
AppendText(szShow);
}
}


return 0;
// __super::OnOK();