好久没折腾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 }

代码比较简单,还有些细节未完善。

先不折腾了,明天去旅游。

原文地址:https://www.cnblogs.com/vman/p/3099139.html