huakai2418 2008年05月10日
帮帮忙,看看我的程序哪儿出了问题?m_Edit4获得的信息总是不对!
我做的是一个cmd命令的图形界面,用的是MFC,不过在返回cmd信息的时候,返回信息老是丢失部分,有空的帮帮看看

void CMybsDlg::OnButton1()
{
// TODO: Add your control notification handler code here

OnEditchangeCombo1();

CString str_combox; //获得Combo Box中的命令文本
int nIndex=m_CB_mingling.GetCurSel();
m_CB_mingling.GetLBText(nIndex,str_combox);


char temp0[32]="cmd.exe /k ";
char temp1[32];
char temp2[128];
char temp3[]=" ";

CString m_edit1;
GetDlgItemText(IDC_EDIT1,m_edit1);//把参数文本控件内容复制到m_edit1中
strcpy(temp2,m_edit1); //Cstring类型转换为char*型
strcpy(temp1,str_combox);//Cstring类型转换为char*型
strcat(temp1,temp3);//给命令后面添加一个空格,以便和参数分类
strcat(temp1,temp2);//将参数添加在命令后面
strcat(temp0,temp1);//再在命令前边添加cmd.exe应用程序,以便CreateProcess()调用

////////////////////////////////////////////////////////////////////////////////////
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
MessageBox("Error On CreatePipe()");
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(NULL,temp0,
NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
MessageBox("Error on CreateProcess()");
CloseHandle(hWrite);
char buffer[4096]="";
DWORD bytesRead;
CString m_Edit;
while (true)
{
if (ReadFile(hRead,buffer,4096,&bytesRead,NULL) == NULL)
break;
m_Edit+=buffer;
SetDlgItemText(IDC_EDIT4,m_Edit);
UpdateData(false);

Sleep(100);
}//SetDlgItemText(IDC_EDIT4,m_Edit);UpdateData(false);
//这儿是返回信息的执行部分,看看问题
//出在哪儿?

}

...全文
16 点赞 收藏 1
写回复
1 条回复

还没有回复,快来抢沙发~

发动态
发帖子
界面
创建于2007-09-28

7970

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告