关于使用Dos命令

wolfAone 2002-03-11 07:07:30
当单击某个按钮时,相当于在cmd.ext中输入ver命令,这个功能如何实现?
就是当即某个按钮时相当于调用Dos中的某一个命令(不是Format C,呵呵).
用ShellExecute函数吧?
第一参数,为窗口句柄,0设定为桌面
第二参数,动作,可选择:open,print,explore
第三参数,命令行,带有完整路径名的命令行,或者URL地址
第四参数,命令行参数,
第五参数,设定该命令执行时的当前路径
第六参数,命令行开启窗口的状态,可以是正常,最大化,最小化等。
如何写?
ShellExecute(Handle,'Open',PChar('cmd.exe'),**,**,SW_SHOWNORMAL);
打**的地方不懂.
...全文
81 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2002-03-13
  • 打赏
  • 举报
回复
//参考下程序
//利用批处理文件执行Dos命令

program Project1;

{$R *.RES}

uses
{}Windows,
{}Dialogs,
{}SysUtils,
{}Controls;

procedure DeleteMe(mDeleteDir: Boolean = False); { 自己删除自己 }
//!警告执行此程序将删除所在目录的所有文件和所有目录
var
{}vExeDir: string;

{}procedure pDelDir(mDirName: string); { 删除指定路径 }
{}var
{}{}vSearchRec: TSearchRec;
{}{}PathName: string;
{}{}K: Integer;
{}begin
{}{}PathName := mDirName + '\*.*';
{}{}K := FindFirst(PathName, faAnyFile, vSearchRec);
{}{}while K = 0 do begin
{}{}{}if (vSearchRec.Attr and faDirectory > 0) and
{}{}{}{}(Pos(vSearchRec.Name, '..') = 0) then begin
{}{}{}{}FileSetAttr(vSearchRec.Name, faDirectory);
{}{}{}{}pDelDir(mDirName + '\' + vSearchRec.Name);
{}{}{}end else if (Pos(vSearchRec.Name, '..') = 0) and
{}{}{}{}(CompareText(mDirName + '\' + vSearchRec.Name, ParamStr(0)) <> 0) then begin
{}{}{}{}FileSetAttr(vSearchRec.Name, 0);
{}{}{}{}DeleteFile(PChar(mDirName + '\' + vSearchRec.Name));
{}{}{}end;
{}{}{}K := FindNext(vSearchRec);
{}{}end;
{}{}if CompareText(vExeDir, mDirName) <> 0 then RmDir(mDirName);
{}end; { pDelDir }

var
{}BatchFile: TextFile;
{}BatchFileName: TFileName;
{}ProcessInfo: TProcessInformation;
{}StartUpInfo: TStartupInfo;
begin
{}vExeDir := ExtractFileDir(ParamStr(0));
{}if mDeleteDir then pDelDir(vExeDir);
{}BatchFileName := '..\DeleteMe.bat';
{}AssignFile(BatchFile, BatchFileName);
{}Rewrite(BatchFile);
{}Writeln(BatchFile, ':del');
{}Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
{}Writeln(BatchFile, 'if exist "' + ParamStr(0) + '"' + ' goto try');
{}if mDeleteDir then Writeln(BatchFile, 'rd ' + ExtractFileDir(ParamStr(0)));
{}Writeln(BatchFile, 'del %0');
{}CloseFile(BatchFile);
{}FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
{}StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
{}StartUpInfo.wShowWindow := SW_HIDE;
{}if CreateProcess(nil, PChar(BatchFileName), nil, nil,
{}{}False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
{}{}ProcessInfo) then begin
{}{}CloseHandle(ProcessInfo.hThread);
{}{}CloseHandle(ProcessInfo.hProcess);
{}end;
end; { DeleteMe }

begin
{}if MessageDlg('警告执行此程序将删除所在目录的所有文件和所有目录',
{}{}mtWarning, [mbYes, mbNo], 0) = mrYes then
{}{}DeleteMe(True);
end.
liuziran 2002-03-13
  • 打赏
  • 举报
回复
cmd与/k之间有空格
WinexEc(pchar('cmd /k Ver'),1);
wolfAone 2002-03-12
  • 打赏
  • 举报
回复
Liujc(阿聪):Windows下只有cmd.exe文件,没有cmd.com文件.
ShellExecute(Handle,'Open',PChar('cmd.exe'),'/k ver',nil,SW_SHOWNORMAL);绝对不行.

VSaber(☆浪人☆):能否给个例子呢?
Liujc 2002-03-12
  • 打赏
  • 举报
回复
在2000下只要把command.com改为cmd.com就行了
wolfAone 2002-03-12
  • 打赏
  • 举报
回复
liuziran(倒立旋风转的青蛙):
这样为什么不行?
WinexEc(pchar('cmd/k Ver'),1);
liuziran 2002-03-12
  • 打赏
  • 举报
回复
winexec(PChar('cmd /c ping www.sohu.com'),0)
VSaber 2002-03-11
  • 打赏
  • 举报
回复
用winexec把
wolfAone 2002-03-11
  • 打赏
  • 举报
回复
Liujc(阿聪):执行shellexecute(handle ,'open' ,PChar('command.com' ,'/k 内部命令' ,'' ,SW_SHOWNORMAL) ; 后,怎么按"X"也不能退出Command程序,结束任务也不行,非要键入Exit退出?
quark 2002-03-11
  • 打赏
  • 举报
回复
启动 Windows 2000 命令解释器一个新的实例

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]

/C 执行字符串指定的命令然后终断
/K 执行字符串指定的命令但保留
/S 在 /C 或 /K 后修改字符串处理(见下)
/Q 关闭回应
/D 从注册表中停用执行 AutoRun 命令(见下)
/A 使向内部管道或文件命令的输出成为 ANSI
/U 使向内部管道或文件命令的输出成为 Unicode
/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON 启用命令扩展(见下)
/E:OFF 停用命令扩展(见下)
/F:ON 启用文件和目录名称完成字符 (见下)
/F:OFF 停用文件和目录名称完成字符(见下)
/V:ON 将 c 作为定界符启动延缓环境变量扩展。如: /V:ON 会
允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF 停用延缓的环境扩展。
Liujc 2002-03-11
  • 打赏
  • 举报
回复
shellexecute(handle ,'open' ,PChar('command.com' ,'/k 内部命令' ,'' ,SW_SHOWNORMAL) ;
shellexecute(handle ,'open' ,'参数' ,'程序路径' ,SW_SHOWNORMAL) ;
wolfAone 2002-03-11
  • 打赏
  • 举报
回复
这个我知道,现在是:我想调用Dos下的一个命令,但是这个命令有参数,而且可能好几个.具体怎么实现呢?
quark 2002-03-11
  • 打赏
  • 举报
回复
ShellExecute(Handle, 'Open', PChar('notepad.exe'), PChar('c:\test.txt'), nil, SW_SHOWNORMAL);
wolfAone 2002-03-11
  • 打赏
  • 举报
回复
有好几个参数的时候呢?

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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