如何将win32 console application 程序放到win32 application中运行

ypf_1227 2009-05-20 10:07:08
我现在做了一段程序,最后一步是要实现用户见面,之前从来没用过MFC之类的东西,我就希望像在win32 application的hello world里生成的那么个界面,然后在那里面敲命令行用来执行程序,也就是说把dos那界面换成windows的就OK
这个应该怎么弄?
...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leither 2009-05-20
  • 打赏
  • 举报
回复
这需要对控制台进行输入输出重定向.
然后,把输入字符作为命令行参数,创建CMD.EXE进程。
用输出重定向读取CMD.EXE执行程序的结果.
以下的代码重载了CEdit类,并响应WM_KEYDOWN消息,粗略里完成命令输入并执行功能 ,楼主可以自行增加其它代码部分。
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar != VK_RETURN)
return;

int nLineCount = GetLineCount();

ZeroMemory(m_szCmdLine,255);
GetLine(nLineCount-1,m_szCmdLine,255);

BOOL bRet = false;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
HANDLE hRead,hWrite;

if (!CreatePipe(&hRead,&hWrite,&sa,0))
return;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW ;

char szContent[256] = {0};
DWORD dwNumRead = 0;
CString strConsole = _T("");

TCHAR szShellCmd[_MAX_PATH];
if (!GetEnvironmentVariable(_T("ComSpec"),szShellCmd,_MAX_PATH))
return;

_tcscat(szShellCmd,_T(" /A /c "));
_tcscat(szShellCmd,(LPCTSTR)m_szCmdLine);

if (!SetStdHandle(STD_OUTPUT_HANDLE,si.hStdOutput))
return;

bRet = CreateProcess (NULL,
szShellCmd,
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi );



CloseHandle(hWrite);
if (bRet)
{
while (true)//WaitForSingleObject(pi.hProcess, 0)==WAIT_TIMEOUT)*/ //等待控制台进程关闭
{
ZeroMemory(szContent,256);
if (ReadFile(hRead,(void *)szContent,255,&dwNumRead,NULL) == NULL)
break;
strConsole+=szContent;
SetWindowText(strConsole);
Delay(50);
}
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
hurryboylqs 2009-05-20
  • 打赏
  • 举报
回复
先学习下Windows程序设计基础
WaistCoat18 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 ypf_1227 的帖子:]
我现在做了一段程序,最后一步是要实现用户见面,之前从来没用过MFC之类的东西,我就希望像在win32 application的hello world里生成的那么个界面,就然后在那里面敲命令行用来执行程序,也是说把dos那界面换成windows的就OK
这个应该怎么弄?
[/Quote]

还是不是很清楚。
ypf_1227 2009-05-20
  • 打赏
  • 举报
回复
我做了一个简单的DBMS 实现了一些最基本的功能 现在想加个界面在这里面
WaistCoat18 2009-05-20
  • 打赏
  • 举报
回复
没弄懂你做什么.

15,979

社区成员

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

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