好久没折腾mfc了
这段时间在看@李瑞民的《网络扫描技术揭秘》,刚好前几天重装的系统,于是装vs2012,跟着书中的代码练练手。
一折腾发现各种悲剧,好久没动mfc了,很多东西都忘记了。还好有各种百度谷歌……
于是当年初学时的菜鸟问题,现在还值得看,囧。。。 都不知道怎么调程序了。
1 void CRedirectDlg::OnBnClickedButtonExec() 2 { 3 // TODO: 在此添加控件通知处理程序代码 4 UpdateData(TRUE); 5 CString strCommand, strFilename = _T("Redirect.txt"); 6 m_strCommand.TrimRight(_T(" ")); 7 if(m_strCommand == "") 8 return; 9 strCommand.Format(_T("cmd.exe /c \"%s\">%s"),m_strCommand,strFilename); 10 11 //创建线程执行dos命令 12 STARTUPINFO si; 13 ZeroMemory(&si,sizeof(si)); 14 si.cb = sizeof(STARTUPINFO); 15 si.wShowWindow = SW_HIDE; //隐藏窗口 16 si.dwFlags = STARTF_USESHOWWINDOW || STARTF_USESTDHANDLES; 17 18 PROCESS_INFORMATION pi; 19 BOOL res = CreateProcess(NULL,strCommand.GetBuffer(0),NULL,NULL,NULL,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,NULL,NULL,&si,&pi); 20 if (!res){ 21 MessageBox(_T("创建线程出错!")); 22 return ; 23 } 24 //等待线程执行完毕 25 WaitForSingleObject(pi.hProcess,INFINITE); 26 27 //处理结果文件 28 char buff[MAXREADBUFFLEN]; 29 BOOL bSucess = FALSE; 30 try{ 31 CFile file; 32 if ( file.Open(strFilename,CFile::modeReadWrite,NULL)) 33 { 34 //MessageBox(_T("创建文件")); 35 file.Read((char *)buff,MAXREADBUFFLEN); 36 //MessageBox((LPCTSTR) buff); 37 file.Close(); 38 bSucess = TRUE; 39 //MessageBox(_T("bSucess = TRUE;")); 40 } 41 } 42 catch (CFileException e){ 43 e.m_cause; 44 Sleep(1000); 45 } 46 if (bSucess){ 47 48 DeleteFile(strFilename); 49 // MessageBox(_T("delete")); 50 //问题出在这里,输出的是乱码 51 //m_strResult.Format(_T("%s"),(char *)buff); 52 m_strResult.Format(_T("%s"),CStringW(buff)); 53 //http://lgb168.blog.163.com/blog/static/49674438201210146522687/ 54 55 56 //MessageBox(m_strResult); 57 } 58 else 59 MessageBox(_T("程序执行出错"),_T("错误提示")); 60 61 //换行显示 62 CEdit *pedit_rst = (CEdit*)GetDlgItem(IDC_EDIT_RST); 63 pedit_rst->SetWindowTextW(m_strResult); 64 pedit_rst->LineScroll(pedit_rst->GetLineCount()); 65 UpdateData(FALSE); 66 }
代码比较简单,还有些细节未完善。
先不折腾了,明天去旅游。