A
aaee_1980
Unregistered / Unconfirmed
GUEST, unregistred user!
各位论坛上的朋友,想请教一下,小弟在DELPHI里面调用以下命令<br> ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:/目录'), nil, SW_HIDE);<br>但发现在调用完成后会在进程里面多出一个cmd.exe,假如我要连接执行一千条以上的shellExecute命令,那么就不可能实现了,有没有办法,可以在每调用一条ShellExecute调命令之后,就终止一个CMD进程呢?<br><br>我试过用以下的过程,在每执行一次<br>ShellExecute(Handle, nil, 'cmd.exe', pchar('/K md c:/目录'), nil, SW_HIDE);<br>然后就 KillProc('cmd.exe'),但发现程序就不能正常进行调用了,不知道为什么?<br>希望有大虾能帮忙解决,每ShellExecute一次之后,就可以立即出现的CMD.exe,然后让其继续执行下一次的ShellExecute,这样不断循环,直到ShellExecute不再执行为止。<br><br>衷心谢谢!!!<br><br><br><br>procedure TForm1.KillProc(procname: string); //终止指定的进程<br>const<br> PROCESS_TERMINATE = $0001;<br>var<br> ExeFileName: string;<br> ContinueLoop: BOOL;<br> FSnapshotHandle: THandle;<br> FProcessEntry32: TProcessEntry32; //注意:TProcessEntry32必须引用单元TlHelp32<br>begin<br> ExeFileName := procname;<br> FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);<br> FProcessEntry32.dwSize := Sizeof(FProcessEntry32);<br> ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);<br> while integer(ContinueLoop) <> 0 do<br> begin<br> if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =<br> UpperCase(ExeFileName))<br> or (UpperCase(FProcessEntry32.szExeFile) =<br> UpperCase(ExeFileName))) then<br> TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),<br> FProcessEntry32.th32ProcessID), 0);<br> ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);<br> end;<br>end;