我有一个小程序,被其他组态程序调用,但我的窗体运行后自动隐藏,我用了hide方法。
    但是当关闭那个组态程序时,我的进程仍然在内存中,不能关闭,有时造成不能正常关机。如何关闭那个进程,比如叫tongxun.exe,请给出详细代码,在线等,谢谢!!
    顺便说一下,我的系统是win2000或win2003,拜托!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,TLHelp32, StdCtrls;type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure ListBox1DblClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation//关闭进程的函数
     function KillTask(ExeFileName: string): Integer;
    const
    PROCESS_TERMINATE = $0001;
    var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
    begin
    Result := 0;
    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
     Result := Integer(TerminateProcess(
    OpenProcess(PROCESS_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
    end;
    //函数结束{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      HWndCalculator: HWnd; //关闭文件
      lppe: TProcessEntry32;
      found: boolean;
      Hand, myhandle: THandle;
      w, d: Integer;
    begin
      Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
      found := Process32First(Hand, lppe);
    while found do begin
    listbox1.Items.Add(StrPas(lppe.szExeFile));
        found := Process32Next(Hand, lppe);
      end;
    end;procedure TForm1.ListBox1DblClick(Sender: TObject);
    begin
    edit1.Text:=listbox1.Items.Strings[listbox1.ItemIndex];
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    KillTask(edit1.Text);    //关闭进程
    end;end.程序一个listbox1   一个button1     一个edit1     程序窗口创建的时候,自动获到所有进程并显示在listbox1,,你双击列表中一个进程,,,进程名称显示在edit1.text中,点button1,,,删掉这个进程,,,,记得给分,哈
      

  2.   

    关键是要加 TLHelp32 这个单元!!!
      

  3.   

    我只要杀死进程的代码就可以,因为进程管理我不太熟悉,所以能否简单点,直接给出杀死tongxun.exe的代码??
      

  4.   

    KillTask('tongxun.exe');    //关闭进程
      

  5.   

    记得关键是要加 TLHelp32 这个单元!!!//关闭进程的函数
     function KillTask(ExeFileName: string): Integer;
    const
    PROCESS_TERMINATE = $0001;
    var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
    begin
    Result := 0;
    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
     Result := Integer(TerminateProcess(
    OpenProcess(PROCESS_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
    end;
    //函数结束
    就是这个函数,,,,你用这个函数就行了调用
    KillTask('tongxun.exe');    //关闭进程