你这种方法的原理就是用CMD打开这个txt文件,肯定会有一个CMD窗口,
CDM的窗口是无法隐藏的,不过有另外一种选择,就是在MFC界面中开启另外一个进程,其方法主要有三: 1 WinExec(LPCSTR, UInt)函数 其第一个参数相当于system函数的参数,第二个参数可以设置窗口是否显示,SW_HIDE这个宏表示隐藏窗口,例如: WinExec(cmdc_str(),SW_HIDE);//cmd(string类型)中为我们要调用的程序名及其参数, 如 “dir exe ” 但是这个有一个问题,这个函数创建完这个进程后就返回了,也就是说它返回后,该进程不一定已经结束,这个就有点和system不一样了,在这里我无法使用这个函数了~~~ 2ShellExecuteEx(SHELLEXECUTEINFO)函数 其参数是一个结构体,具体作用还是类似于system的参数,使用例子: SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfocbSize = sizeof(SHELLEXECUTEINFO); ShExecInfofMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfohwnd = NULL; ShExecInfolpVerb = NULL; ShExecInfolpFile = cmdc_str();//调用的程序名 ShExecInfolpParameters = parc_str();//调用程序的命令行参数 ShExecInfolpDirectory = NULL; ShExecInfonShow = SW_HIDE;//窗口状态为隐藏 ShExecInfohInstApp = NULL; ShellExecuteEx(&ShExecInfo); 但是这个还是有问题,同1中一样,无法确定该进程是否结束~~~ 3CreateProcess函数,这个的用法可以去百度一下~~~ 最后,问题归结于有没有办法使得主程序在其启动的子程序结束之前一直保持暂停状态,百度真是个好东西,几个关键词进去一搜就出来了,使用 WaitForSingleObject(HANDLE,DWORD)函数 例子: 在2的代码下加一行:WaitForSingleObject(ShExecInfohProcess,INFINITE);////等到该进程结束 因此,我们完全可以把上述代码片段封装成一个小的函数,来代替system函数 void mySystem(const string& cmd, const string& par, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfocbSize = sizeof(SHELLEXECUTEINFO); ShExecInfofMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfohwnd = NULL; ShExecInfolpVerb = NULL; ShExecInfolpFile = cmdc_str();//调用的程序名 ShExecInfolpParameters = parc_str();//调用程序的命令行参数 ShExecInfolpDirectory = NULL; ShExecInfonShow = SW_HIDE;//窗口状态为隐藏 ShExecInfohInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfohProcess,INFINITE);////等到该进程结束 }
system函数 是可以调用一些DOS命令,比如
system("cls");//清屏,等于在DOS上使用cls命令
写可执行文件路径,可以运行它····
下面列出常用的DOS命令,都可以用system函数调用:
ASSOC 显示或修改文件扩展名关联。
AT 计划在计算机上运行的命令和程序。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
CACLS 显示或修改文件的访问控制列表(ACLs)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP 比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。您不能转换
当前驱动器。
COPY 将至少一个文件复制到另一个位置。
DATE 显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。
ECHO 显示消息,或将命令回显打开或关上。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE 删除至少一个文件。
EXIT 退出 CMDEXE 程序(命令解释程序)。
FC 比较两个或两套文件,并显示
不同处。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
FOR 为一套文件中的每个文件运行一个指定的命令
FORMAT 格式化磁盘,以便跟 Windows 使用。
FTYPE 显示或修改用于文件扩展名关联的文件类型。
GOTO 将 Windows 命令解释程序指向批处理程序
中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示
扩展字符集。
HELP 提供 Windows 命令的帮助信息。
IF 执行批处理程序中的条件性处理。
LABEL 创建、更改或删除磁盘的卷标。
MD 创建目录。
MKDIR 创建目录。
MODE 配置系统设备。
MORE 一次显示一个结果屏幕。
MOVE 将文件从一个目录移到另一个目录。
PATH 显示或设置可执行文件的搜索路径。
PAUSE 暂停批文件的处理并显示消息。
POPD 还原 PUSHD 保存的当前目录的上一个值。
PRINT 打印文本文件。
PROMPT 更改 Windows 命令提示符。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
RECOVER 从有问题的磁盘恢复可读信息。
REM 记录批文件或 CONFIGSYS 中的注释。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT 更换批文件中可替换参数的位置。
SORT 对输入进行分类。
START 启动另一个窗口来运行指定的程序或命令。
SUBST 将路径跟一个驱动器号关联。
TIME 显示或设置系统时间。
TITLE 设置 CMDEXE 会话的窗口标题。
TREE 以图形模式显示驱动器或路径的目录结构。
TYPE 显示文本文件的内容。
VER 显示 Windows 版本。
VERIFY 告诉 Windows 是否验证文件是否已正确
写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
deltree这个命令在dos40---dos70(win98的dos环境)这些dos版本中存在,
桌面windows改用NT核心以后(就是从windows2000以后),MS再不提供这个命令
顾名思义deltree就是删除一个目录树,就是删除一个目录,包括它的所有文件和子目录,加"/y"参数取消警告提示
在windows2000以后的版本可以用rmdir(或者rd)命令代替此命令
,rmdir命令加"/s"参数可以实现删除一个非空目录,加"/q"参数取消提示信息:
system("rmdir
/s
/q
d:\\123");
//不提示删除d:\123目录包括其子目录和文件
system("rd
/s
/q
d:\\123");
//一样的效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)