win32控制台
可回顯的調用方法:
這個方法步驟比較復雜,是通過創建一個新進程來模擬cmd命令行,將寫命令行和回顯通過管道的方式呈現。
例如:
view plain
1.? void?CTestMFCDlg::OnOK()???
2.? {??
3.? ????//?TODO:?Add?extra?validation?here??
4.? ????SECURITY_ATTRIBUTES?sa;??
5.? ????HANDLE?hRead,hWrite;??
6.? ??
7.? ????sa.nLength?=?sizeof(SECURITY_ATTRIBUTES);??
8.? ????sa.lpSecurityDescriptor?=?NULL;??
9.? ????sa.bInheritHandle?=?TRUE;??
10.??
11.????if(!CreatePipe(&hRead,&hWrite,&sa,0))??
12.????{??
13.????????MessageBox("CreatePipe?Failed");??
14.????????return;??
15.????}??
16.??
17.????STARTUPINFO?si;??
18.????PROCESS_INFORMATION?pi;??
19.??
20.????ZeroMemory(&si,sizeof(STARTUPINFO));??
21.????si.cb?=?sizeof(STARTUPINFO);??
22.????GetStartupInfo(&si);??
23.????si.hStdError?=?hWrite;??
24.????si.hStdOutput?=?hWrite;??
25.????si.wShowWindow?=?SW_HIDE;??
26.????si.dwFlags?=?STARTF_USESTDHANDLES?|?STARTF_USESHOWWINDOW;??
27.??
28.????char?cmdline[200];??
29.????CString?tmp,stredit2;??
30.????GetDlgItemText(IDC_EDIT_CMD,stredit2);??
31.????tmp.Format("cmd?/C?%s",stredit2);??
32.????sprintf(cmdline,"%s",tmp);??
33.??
34.????if(!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))??
35.????{??
36.????????MessageBox("CreateProcess?failed!");??
37.????????return;??
38.????}??
39.????CloseHandle(hWrite);??
40.??
41.????char?buffer[4096]?=?{0};??
42.????CString?strOutput;??
43.????DWORD?bytesRead;??
44.??
45.????while(1)??
46.????{??
47.????????if(NULL?==?ReadFile(hRead,buffer,4095,&bytesRead,NULL))??
48.????????{??
49.???????????break;??
50.????????}??
51.????????strOutput?+=?buffer;??
52.????????SetDlgItemText(IDC_EDIT_TEXT,strOutput);??
53.????????UpdateWindow();??
54.????????Sleep(1000);??
55.????}??
56.????CloseHandle(hRead);??
57.}??
以上是在一個MFC中點擊OnOK按鈕后,將IDC_EDIT_CMD編輯框中的命令執行,并將1秒內cmd命令的回顯答應到IDC_EDIT_TEXT編輯框中的實現。
總結
- 上一篇: 关于std:auto_ptr
- 下一篇: You must install 'ms