delphi执行cmd
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi执行cmd相关的知识,希望对你有一定的参考价值。
要求
一个delphi窗体form1
上面有一个edit1控件
两个Button1
一个是启动
一个是关闭
要求,当按下启动时
就会执行目录下的a.bat
并把结果实时返回到edit1中
当按下关闭时,强行结束a.bat
procedure TForm1.btn1Click ( Sender: TObject ) ;
var
nResult : Integer ;//定义运行结果变量
begin
nResult := WinExec ( \'c:\\a.bat\' , 0 ) ;//\'\'内的是执行外部命令完整路径,0参数,表明不显示运行窗口,你可以改成1试试效果。
if nResult > 31 then //返回结果大于31表明成功运行
ShowMessage ( \'成功运行!\' )
else
if nResult = 0 then
ShowMessage ( \'超出系统内存资源!\' )
else
if nResult = ERROR_BAD_FORMAT then //
ShowMessage ( \'不是合法的Win32程序\' )
else
if nResult = ERROR_FILE_NOT_FOUND then
ShowMessage ( \'指定的文件未找到\' )
else
if nResult = ERROR_BAD_FORMAT then
ShowMessage ( \'不是合法的Win32程序\' )
else
ShowMessage ( \'未知错误!\' ) ;
end ;
结束按钮:
AFileName指为cmd.exe,bat文件是由cmd.exe执行的
先Uses TLHelp32;
procedure EndProcess(AFileName: string);
const
PROCESS_TERMINATE=$0001;
var
ExeFileName: String;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
ExeFileName := AFileName;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
edit1?不知道你要返回什么,另外目录什么的,自己再改改吧 参考技术A 可以直接调用cmd啊
start 参考技术B dir 写在一个bat文件里
ShellExecute打开bat文件就可以了 参考技术C 要用到管道吧 参考技术D shell ()
delphi中shellExecute的使用
我想通过shellExecute调用执行cmd命令 brcc32 编译资源文件 代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
se:SHELLEXECUTEINFO;
begin
se.cbSize:=SizeOf(SHELLEXECUTEINFO) ;
se.Wnd:=0;
se.lpVerb:='open';
se.lpFile:='c:\windows\system32\cmd.exe';
se.lpParameters:='brcc32 E:\project\Test\my.rc';
se.lpDirectory:=nil;
se.nShow:=SW_SHOWNORMAL;
se.fMask := SEE_MASK_NOCLOSEPROCESS;
se.hInstApp:=0;
ShellExecuteEx(@se);
WaitForSingleObject(se.hProcess,INFINITE);
end;
我想问下哪里错了吗?请高手给出正确的方法 ,谢谢
改为
se.lpParameters:='/c brcc32 E:\project\Test\my.rc'; 参考技术A 使用语句延迟一下看看.
以上是关于delphi执行cmd的主要内容,如果未能解决你的问题,请参考以下文章