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

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

请高手指点
...全文
322 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
me1001 2010-04-04
  • 打赏
  • 举报
回复
谢谢各位
cdsnpeter 2010-04-03
  • 打赏
  • 举报
回复
管道是不同进程通信的一种方式。基于内存映射文件建立。
基本思想是,一个进程把资料送到管道中,另外一个进程可以共享去读(写)资料达到进程间通信的目的。
相关的你可以去Google或者百度搜索进程间通信。
me1001 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的用法
me1001 2010-04-03
  • 打赏
  • 举报
回复
说的详细点吧。。。谢谢
向立天 2010-04-03
  • 打赏
  • 举报
回复
执行dos命令可以用system
模仿输入窗口用richedit吧
然后通过enter执行
分析输入的str
WIN-TC免费版是一个turbo C2 WINDOWS平台开发工具,最大特点是支持中文界面,支持鼠标操作,程序段复制,WIN-TC免费版为初学c语言、对高等编程环境不熟悉的同志们非常有帮助。 WIN-TC免费版使用turbo C2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。WIN-TC简繁双语版可以正常运行于98及其以上的简体及繁体WINDOWS操作系统上。 主要功能: 1、在WINDOWS下编辑TC代码,可以充分利用WINDOWS的支持剪贴版和中文的特点;   2、Include和Lib路径自动定位,告别TC设置路径的历史;   3、编译错误捕捉功能,编译时不会出现烦人的DOS窗口;   4、支持C内嵌汇编从而实现C/ASM混合编程;   5、支持C扩展库(自定义LIB库);   6、错误警告定位功能、出现编译错误时双击输出框里的出错行信息可以自动寻找到错误的行,就像DOS的TC那样;   7、支持语法加亮功能,并可以自定义设置;   8、没有目录路径限制,你甚至可以安装到带有空格的路径文件夹里;   9、允许自定义设置输入风格,能够实现VC类似的输入风格;   10、可选择是否生成ASM、MAP或OBJ文件,你甚至可以指定只生成EXE文件;   11、稳定的文件操作功能,支持历史记录列表和使用模板;   12、撤消和重复功能,并可以按照自己内存情况设置最多撤消次数(最多允许999次);   13、具有行标计数的功能,并可以设置样式。

15,978

社区成员

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

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