Delphi打开关闭exe文件及运行批处理文件

时间:2021-05-22 23:48:58
如何运行一个exe文件,延时1秒,运行一个批处理文件,延时50ms关闭另外一个exe文件
希望哪位高手能给段代码

9 个解决方案

#1


你这个延时,可以直接使用sleep,顺着执行就是了

ShellExecute可以执行一个程序(exe,bat等)

#2



 ShellExecute(handle, 'open','c:\1.exe',nil,nil, SW_SHOWNORMAL);
  Sleep(1000);
  Application.ProcessMessages;
 ShellExecute(handle, 'open','c:\2.bat',nil,nil, SW_SHOWNORMAL);
  Sleep(50);
  Application.ProcessMessages;
  SendMessage(handle,WM_CLOSE,0,0); 

#3


2楼正解

#4


引用 3 楼 sf_harry 的回复:
2楼正解

2楼不正,要关闭另一个exe,不是自己


procedure EndProcess(AFileName: string);
const
        PROCESS_TERMINATE = $0001;
var
        ContinueLoop: BOOL;
        FSnapShotHandle: THandle;
        FProcessEntry32: TProcessEntry32;
begin
        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(AFileName))
                        or (UpperCase(FProcessEntry32.szExeFile ) = UpperCase(AFileName))) then
                        TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);
                ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
        end;
end;


使用举例 EndProcess('explorer.exe');

#5


在批处理中直接延时关闭另一个程序行不?

#6


主要是批处理文件调用了另外一个exe文件  所以要运行的过程中关闭它 

#7


如果不要延时了 可以简单些吗   顺序依次是运行1.exe  运行2.bat  关闭2.bat的关联文件3.exe

#8


回的帖子,大家都帮你解决了,没看出来?

#9


createprocess
Terminateprocess
winexec
shellexecute

#1


你这个延时,可以直接使用sleep,顺着执行就是了

ShellExecute可以执行一个程序(exe,bat等)

#2



 ShellExecute(handle, 'open','c:\1.exe',nil,nil, SW_SHOWNORMAL);
  Sleep(1000);
  Application.ProcessMessages;
 ShellExecute(handle, 'open','c:\2.bat',nil,nil, SW_SHOWNORMAL);
  Sleep(50);
  Application.ProcessMessages;
  SendMessage(handle,WM_CLOSE,0,0); 

#3


2楼正解

#4


引用 3 楼 sf_harry 的回复:
2楼正解

2楼不正,要关闭另一个exe,不是自己


procedure EndProcess(AFileName: string);
const
        PROCESS_TERMINATE = $0001;
var
        ContinueLoop: BOOL;
        FSnapShotHandle: THandle;
        FProcessEntry32: TProcessEntry32;
begin
        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(AFileName))
                        or (UpperCase(FProcessEntry32.szExeFile ) = UpperCase(AFileName))) then
                        TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);
                ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
        end;
end;


使用举例 EndProcess('explorer.exe');

#5


在批处理中直接延时关闭另一个程序行不?

#6


主要是批处理文件调用了另外一个exe文件  所以要运行的过程中关闭它 

#7


如果不要延时了 可以简单些吗   顺序依次是运行1.exe  运行2.bat  关闭2.bat的关联文件3.exe

#8


回的帖子,大家都帮你解决了,没看出来?

#9


createprocess
Terminateprocess
winexec
shellexecute