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);
}