如何将win32 console application 程序放到win32 application中运行 我现在做了一段程序,最后一步是要实现用户见面,之前从来没用过MFC之类的东西,我就希望像在win32 application的hello world里生成的那么个界面,然后在那里面敲命令行用来执行程序,也就是说把dos那界面换成windows的就OK 这个应该怎么弄? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我做了一个简单的DBMS 实现了一些最基本的功能 现在想加个界面在这里面 这需要对控制台进行输入输出重定向.然后,把输入字符作为命令行参数,创建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);} 聊天室程序发字符串送给自定义消息的时候有问题 各类之间数据传输的难点, 关于线程,我是菜鸟,谁拉我一把?不甚感激…… 客户端都通过代理上网,服务端有合法互联网IP地址,客户端如何从服务端取得对方信息后,脱离服务端互联? 一个socket通讯问题,在线等 到那去下载mdac_tye2.7.exe文件?? 在写COM+组件时,我发现在接口函数的返回形式中,会不会出现局部对象被释放而引起的问题 一个字符串,如{a,b,c},怎么把a,b,c分别取出来 html文件 谁帮我看看错在哪? 请问如何制作类似屏幕精灵一类的东西? MFC中怎么使用自定义控件? 关于内嵌汇编
然后,把输入字符作为命令行参数,创建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);
}