如何按下按钮button1 立即一个delphi生成的111.exe结束 希望谁能给个代码

解决方案 »

  1.   


    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('111.exe');
      

  2.   

    使用资源,很简单.
    先打开记事本,输入
    b_exe EXEFILE "b.exe"将文件存为bexe.rc,打开windows命令提示窗口,输入brcc32.exe bexe.rc得到一个名为bexe.res的资源文件。将该文件与工程文件(.dpr)放在一起。
    在源程序中加上一句:
    {$R bexe.res}下面这段代码在运行时释放出b.exe文件:
    var
      rs:TResourceStream;
    begin
      rs:=TResourceStream.create(hinstance,'b_exe','EXEFILE');
      try
        rs.saveToFile('b.exe');
      finally
        rs.free;
      end;
      winExec('b.exe',sw_show);
    end;
      

  3.   

    如何按下按钮button1 立即将一个已经打开的delphi文件111.exe结束
      

  4.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TLHelp32;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    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;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
            WinExec('project2.exe',SW_SHOWNORMAL);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
            EndProcess('project2.exe');
    end;end.
      

  5.   

    二憨兄 如果我的exe文件路径是d:\123.exe 我只需要把project2.exe改成123.exe就可以了吗
      

  6.   

    这个代码的原理是遍历系统进程的名称。你打开11.exe程序时,在任务管理器的进程中就可以看到名为11.exe的进程名,它实际上就是找这个名称,如果找到就TerminateProcess进程!就是这个意思!
      

  7.   

    尝试了下 用 EndProcess没有成功 用KillTask可以  不知道有什么区别
    不知道如果一个按钮事件下顺次执行 winexec 111.bat 及killtask 222.exe(111.bat触发是222.exe 111.bat里有n条命令 没执行一个都要打开一个222.exe 想每执行一个批处理时,自动关闭一个222.exe)
      

  8.   

    你需要做些进程间通信,否则多个222.exe同时运行,KillTask会全杀。
    这样会比较麻烦,建议还是将222.exe改成DLL,这样全部在一个进程,管理的时候方便。
      

  9.   

    111.bat里有n条命令 每执行一个都要打开一个222.exe  关闭222.exe后111.bat再执行下一条 
    另外222.exe 不能改成dll 必须是exe的