各位论坛上的朋友,想请教一下,小弟在DELPHI里面调用以下命令
ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:\目录'), nil, SW_HIDE);
但发现在调用完成后会在进程里面多出一个cmd.exe,假如我要连接执行一千条以上的shellExecute命令,那么就不可能实现了,有没有办法,可以在每调用一条ShellExecute调命令之后,就终止一个CMD进程呢?我试过用以下的过程,在每执行一次
ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:\目录'), nil, SW_HIDE);
然后就 KillProc('cmd.exe'),但发现程序就不能正常进行调用了,不知道为什么?
希望有大虾能帮忙解决,每ShellExecute一次之后,就可以立即出现的CMD.exe,然后让其继续执行下一次的ShellExecute,这样不断循环,直到ShellExecute不再执行为止。衷心谢谢!!!procedure TForm1.KillProc(procname: string); //终止指定的进程
const
PROCESS_TERMINATE = $0001;
var
ExeFileName: string;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32; //注意:TProcessEntry32必须引用单元TlHelp32
begin
ExeFileName := procname;
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;
ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:\目录'), nil, SW_HIDE);
但发现在调用完成后会在进程里面多出一个cmd.exe,假如我要连接执行一千条以上的shellExecute命令,那么就不可能实现了,有没有办法,可以在每调用一条ShellExecute调命令之后,就终止一个CMD进程呢?我试过用以下的过程,在每执行一次
ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:\目录'), nil, SW_HIDE);
然后就 KillProc('cmd.exe'),但发现程序就不能正常进行调用了,不知道为什么?
希望有大虾能帮忙解决,每ShellExecute一次之后,就可以立即出现的CMD.exe,然后让其继续执行下一次的ShellExecute,这样不断循环,直到ShellExecute不再执行为止。衷心谢谢!!!procedure TForm1.KillProc(procname: string); //终止指定的进程
const
PROCESS_TERMINATE = $0001;
var
ExeFileName: string;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32; //注意:TProcessEntry32必须引用单元TlHelp32
begin
ExeFileName := procname;
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;
解决方案 »
- post https报错:HTTP/1.1 400 Bad Request
- ClienSocket 在非阻塞模式下用 EorrCored:=0 无法捕获错误?
- TMediaPlayer的问题,用程序控制录音播放,但控件的PLAY没有变成不可使能,暂停还有停止也没有变成可使能
- 真的就没人会吗?请教高手:在一个Panel里怎么显示另外一个EXE文件?或OCX文件?在线等待!
- 如何实现数据库中数据的导入和导出?
- 怎样不让用户直接看到access数据库中的内容
- 用DELPHI如何调用VXD?高分,在线等待!
- 如何实现Try...Except...里面的重试功能???
- 请问缓冲更新和事务有什么区别
- 请问如何让DELPHI编的程序带参数运行?谢谢!
- 怎样开辟一个缓冲区?怎样读写缓冲区?
- 求助 关于多线程的问题
cmd /k 执行指定的字符串然后保留