UpdateData(TRUE); 

            // 拼接要执行的命令行,如"ping.exe www.google.com" 
            CString sAddr; 
            //GetDlgItem(IDC_EDIT_ADDR)->GetWindowText(sAddr); 
            CString sCmdLine = _T("notepad.exe"); 

            // 设置文件句柄安全属性 
            SECURITY_ATTRIBUTES sa; 
            ::ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); 
            sa.nLength = sizeof(SECURITY_ATTRIBUTES); 
            sa.bInheritHandle = TRUE;       // 必须为TRUE 
            sa.lpSecurityDescriptor = NULL; 

            // 创建将重定向到的文件的句柄 
            HANDLE hFile = ::CreateFile(_T("NetStatus.txt"), 
                GENERIC_WRITE, 
                FILE_SHARE_READ | FILE_SHARE_WRITE, 
                &sa, 
                OPEN_ALWAYS, 
                FILE_ATTRIBUTE_NORMAL, 
                NULL); 
            // 确定文件句柄的正确创建 
            ASSERT(hFile != INVALID_HANDLE_VALUE); 

            // 设置进程的启动信息,这是一个输入参数 
            STARTUPINFO si; 
            ::ZeroMemory(&si, sizeof(STARTUPINFO)); 
            si.cb = sizeof(STARTUPINFO); 
            si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;   // 这个必须设置,否则仍将显示窗口 
            si.hStdOutput = hFile;      // 默认为标准输出,即控制台窗口。我们必须把它设置成刚才创建的文件句柄 
            si.wShowWindow = SW_HIDE;   // 不显示窗口 

            // 设置进程信息,这是一个输出参数。我们需要从这个结构中取得创建成功的进程及其主线程的句柄 
            PROCESS_INFORMATION pi; 
            ::ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); 

            // 使用刚才设置的各个参数创建隐秘的进程 
            // 此进程将把ping程序运行的结果写到NetStatus.txt文件 
            BOOL hRet = FALSE; 
            hRet = ::CreateProcess(NULL, sCmdLine.GetBuffer(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi); 
            ASSERT(hRet == TRUE); 

            // 等待进程对象的结束。即等待ping程序运行完成 
            ::WaitForSingleObject(pi.hProcess, INFINITE); 

            // 清理资源 
            ::CloseHandle(pi.hProcess); 
            ::CloseHandle(pi.hThread); 
            ::CloseHandle(hFile); 

            // 打开刚才写好的文本文件,并将其写到图形界面上。各个过程,用户没有感觉执行了ping.exe 
            CFile fTxt(_T("NetStatus.txt"), CFile::modeRead); 
            ASSERT(fTxt.m_hFile != NULL); 
            char* pszContent = new char[(unsigned int)fTxt.GetLength() + 1]; 
            ::ZeroMemory(pszContent, (size_t)fTxt.GetLength() + 1); 
            fTxt.Read(pszContent, (UINT)fTxt.GetLength()); 
            fTxt.Close(); 
            ::DeleteFile(_T("NetStatus.txt")); 
            GetDlgItem(IDC_EDIT2)->SetWindowText(CString(pszContent)); 
            AfxMessageBox(CString(pszContent));
            delete pszContent;