C++语言中关于system函数的用法?system("D:\\aa.txt");
我在MFC中设置了一个按钮时执行如下语句:voidCDlg::OnBnClickedButton(){system("D:\\aa.txt");}目的是点击按钮就帮我打开...
我在MFC中设置了一个按钮时执行如下语句:
void CDlg::OnBnClickedButton(){ system("D:\\aa.txt"); }
目的是点击按钮就帮我打开aa.txt这个文件,但是同时他会显示一个CMD的窗口,我该如何写代码能让他只显示文本文档而不显示CMD的窗口。 展开
void CDlg::OnBnClickedButton(){ system("D:\\aa.txt"); }
目的是点击按钮就帮我打开aa.txt这个文件,但是同时他会显示一个CMD的窗口,我该如何写代码能让他只显示文本文档而不显示CMD的窗口。 展开
6个回答
展开全部
你这种方法的原理就是用CMD打开这个txt文件,肯定会有一个CMD窗口,
CDM的窗口是无法隐藏的,不过有另外一种选择,就是在MFC界面中开启另外一个进程,其方法主要有三: 1. WinExec(LPCSTR, UInt)函数 其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如: WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ” 但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~ 2.ShellExecuteEx(SHELLEXECUTEINFO*)函数 其参数是一个结构体,具体作用还是类似于system的参数,使用例子: SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~ 3.CreateProcess函数,这个的用法可以去百度一下~~~ 最后,问题归结于有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,百度真是个好东西,几个关键词进去一搜就出来了,使用 WaitForSingleObject(HANDLE,DWORD)函数 例子: 在2的代码下加一行:WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 因此,我们完全可以把上述代码片段封装成一个小的函数,来代替system函数 void mySystem(const string& cmd, const string& par, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 }
CDM的窗口是无法隐藏的,不过有另外一种选择,就是在MFC界面中开启另外一个进程,其方法主要有三: 1. WinExec(LPCSTR, UInt)函数 其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如: WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ” 但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~ 2.ShellExecuteEx(SHELLEXECUTEINFO*)函数 其参数是一个结构体,具体作用还是类似于system的参数,使用例子: SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~ 3.CreateProcess函数,这个的用法可以去百度一下~~~ 最后,问题归结于有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,百度真是个好东西,几个关键词进去一搜就出来了,使用 WaitForSingleObject(HANDLE,DWORD)函数 例子: 在2的代码下加一行:WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 因此,我们完全可以把上述代码片段封装成一个小的函数,来代替system函数 void mySystem(const string& cmd, const string& par, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这种方法的原理就是用CMD打开这个txt文件,肯定会有一个CMD窗口,
CDM的窗口是无法隐藏的,不过有另外一种选择,就是在MFC界面中开启另外一个进程,其方法主要有三: 1. WinExec(LPCSTR, UInt)函数 其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如: WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ” 但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~ 2.ShellExecuteEx(SHELLEXECUTEINFO*)函数 其参数是一个结构体,具体作用还是类似于system的参数,使用例子: SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~ 3.CreateProcess函数,这个的用法可以去百度一下~~~ 最后,问题归结于有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,百度真是个好东西,几个关键词进去一搜就出来了,使用 WaitForSingleObject(HANDLE,DWORD)函数 例子: 在2的代码下加一行:WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 因此,我们完全可以把上述代码片段封装成一个小的函数,来代替system函数 void mySystem(const string& cmd, const string& par, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 }
CDM的窗口是无法隐藏的,不过有另外一种选择,就是在MFC界面中开启另外一个进程,其方法主要有三: 1. WinExec(LPCSTR, UInt)函数 其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如: WinExec(cmd.c_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir *.exe ” 但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~ 2.ShellExecuteEx(SHELLEXECUTEINFO*)函数 其参数是一个结构体,具体作用还是类似于system的参数,使用例子: SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~ 3.CreateProcess函数,这个的用法可以去百度一下~~~ 最后,问题归结于有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,百度真是个好东西,几个关键词进去一搜就出来了,使用 WaitForSingleObject(HANDLE,DWORD)函数 例子: 在2的代码下加一行:WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 因此,我们完全可以把上述代码片段封装成一个小的函数,来代替system函数 void mySystem(const string& cmd, const string& par, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = cmd.c_str();//调用的程序名 ShExecInfo.lpParameters = par.c_str();//调用程序的命令行参数 ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏 ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束 }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议使用CreateProcess WinExec ShellExecute等.
追问
我用这个 不行。。。ShellExecute(NULL,"open","NOTEPAD.EXE D:\\aa.txt",NULL,NULL,SW_SHOWNORMAL);
用这个也打不开文件。。
WinExec("D:\\log.txt",SW_SHOWMAXIMIZED);
求修改。。
追答
ShellExecute(NULL, _T("open"), _T("d:\\aa.txt"), NULL, NULL, SW_SHOW);
或者
WinExec("notepad.exe D:\\aa.txt",SW_SHOWMAXIMIZED);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试system("notepad.exe D:\\aa.txt");
追问
不行,他说找不到指定的程序
追答
notepad就是windows的记事本啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-20
展开全部
不显示cmd窗口,这个做不到。system函数本身就需要加载一个命令行环境。即使通过更复杂的Shell编程,也只能做到让它闪一下就消失,而不能完全不显示。这是Windows安全机制决定的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询