如何用vc实现类似dos的窗口程序

byname4321 2010-04-03 07:53:00
做一个窗口程序,可以在里面输入dos命令,并执行。就和命令提示符的功能一样。。怎么办到??

请高手指点
...全文
340 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
byname4321 2010-04-04
  • 打赏
  • 举报
回复
谢谢各位
cdsnpeter 2010-04-03
  • 打赏
  • 举报
回复
管道是不同进程通信的一种方式。基于内存映射文件建立。
基本思想是,一个进程把资料送到管道中,另外一个进程可以共享去读(写)资料达到进程间通信的目的。
相关的你可以去Google或者百度搜索进程间通信。
byname4321 2010-04-03
  • 打赏
  • 举报
回复
什么是 "管道Pipe"? 能不能提供一些资料、
cdsnpeter 2010-04-03
  • 打赏
  • 举报
回复
当然比较麻烦的解析字符串的动作,你自己去写吧
cdsnpeter 2010-04-03
  • 打赏
  • 举报
回复 1
void CDosConsoleView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (nChar == VK_RETURN)
{
TCHAR szBuffer[_MAX_PATH] = {0};
GetEditCtrl().GetLine(0, szBuffer, _MAX_PATH);
CString szOutput;
My_System(szBuffer, szOutput);

GetEditCtrl().SetWindowText(szOutput);
}

CEditView::OnChar(nChar, nRepCnt, nFlags);
}

BOOL CDosConsoleView::My_System(TCHAR* cmd,CString& szOutPut)
{
SECURITY_ATTRIBUTES lsa;
STARTUPINFO si;
PROCESS_INFORMATION pi, *lppi;
HANDLE hReadPipe, hWritePipe;

lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = TRUE;

lppi = π
CWaitCursor waitCursor;

if(!CreatePipe(&hReadPipe, &hWritePipe, &lsa, 0)) {
AfxMessageBox(_T("Error on create pipe."));
return FALSE;
}

memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWritePipe;

if(!CreateProcess(_T("C:\\Windows\\System32\\cmd.exe"), cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
AfxMessageBox(_T("Error on create process"));
return FALSE;
}
DWORD cchReadBuffer;
CString strText;
TCHAR ph[5000];
szOutPut.Empty();

for(;;) {
cchReadBuffer = 0;
if(!PeekNamedPipe(hReadPipe, ph, 1, &cchReadBuffer, NULL, NULL)) break;

if(cchReadBuffer) {
if(!ReadFile(hReadPipe, ph, 4096, &cchReadBuffer, NULL)) break;
ph[cchReadBuffer] = 0;
szOutPut += ph;;
}
else
if(WaitForSingleObject(pi.hProcess, 0) == WAIT_OBJECT_0) break;
Sleep(500);
}

ph[cchReadBuffer] = 0;
szOutPut += ph;

CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
return TRUE;
}


这是我写的。基本思路,就是解析字符串。

然后给Dos命令行去执行。执行结果写到一个管道Pipe,完了再从管道读入,并显示到Windows程序UI上。

这个View是一个EditView。
Henry8484 2010-04-03
  • 打赏
  • 举报
回复
这个应该不难的,就是解析字符串,LZ多看看CString的用法
byname4321 2010-04-03
  • 打赏
  • 举报
回复
说的详细点吧。。。谢谢
向立天 2010-04-03
  • 打赏
  • 举报
回复
执行dos命令可以用system
模仿输入窗口用richedit吧
然后通过enter执行
分析输入的str

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧