您的位置:首页 > 其它

调用控制台程序,并实施获取控制台输出文字

2013-08-28 21:02 417 查看
UINT calFunc(LPVOID pParam)
{
//调用exe
//清空结构
CGetDosTextDlg *pDlg = (CGetDosTextDlg *)pParam;

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
MessageBox(NULL, "Error On CreatePipe()", NULL, NULL);
return 0;
}

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;
if (!CreateProcess("E:\\61\\61.exe",NULL//"c:\\Windows\\system32\\cmd.exe dir /?"
,NULL,NULL,TRUE,NULL,NULL,"E:\\61",&si,&pi)) {
MessageBox(NULL, "Error on CreateProcess()", NULL, NULL);
return 0;
}
CloseHandle(hWrite);

return 0;
}


void CGetDosTextDlg::OnButton2()
{
// TODO: Add your control notification handler code here
HANDLE hThreadCalculate;		//线程句柄
DWORD ThreadIDCalculate;		//线程ID

hThreadCalculate=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)calFunc,
this,
0,
&ThreadIDCalculate);
SetTimer(1, 1000, NULL);
}


void CGetDosTextDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char buffer[4096] = {0};
DWORD bytesRead;
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
{
return;
}
m_Edit += buffer;
if(bytesRead>0)
UpdateData(false);
Beep(1000, 10);
CDialog::OnTimer(nIDEvent);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: