unit MainFrm;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, TLHelp32, ComCtrls, ExtCtrls, Buttons, ImgList;const
   PROCESS_TERMINATE=$0001;
type
  TfrmMain = class(TForm)
    lsvProcess: TListView;
    pnlMain: TPanel;
    stsMessage: TStatusBar;
    lsiLargeIcon: TImageList;
    lsiSmallIcon: TImageList;
    spdLargeIcon: TSpeedButton;
    spdSmallIcon: TSpeedButton;
    spdList: TSpeedButton;
    spdReport: TSpeedButton;
    spdRefresh: TSpeedButton;
    procedure spdLargeIconClick(Sender: TObject);
    procedure spdSmallIconClick(Sender: TObject);
    procedure spdListClick(Sender: TObject);
    procedure spdReportClick(Sender: TObject);
    procedure spdRefreshClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lsvProcessDblClick(Sender: TObject);
  private
    { Private declarations }
    FSnapshotHandle:THandle;
    FProcessEntry32:TProcessEntry32;
    procedure DisplayHint(Sender: TObject);
  public
    { Public declarations }
  end;var
  frmMain: TfrmMain;implementation{$R *.DFM}procedure TfrmMain.DisplayHint(Sender: TObject);
begin
  stsMessage.SimpleText := Application.Hint;
end;procedure TfrmMain.spdLargeIconClick(Sender: TObject);
begin
  lsvProcess.ViewStyle:=vsIcon;
end;procedure TfrmMain.spdSmallIconClick(Sender: TObject);
begin
  lsvProcess.ViewStyle:=vsSmallIcon;
end;procedure TfrmMain.spdListClick(Sender: TObject);
begin
  lsvProcess.ViewStyle:=vsList;
end;procedure TfrmMain.spdReportClick(Sender: TObject);
begin
  lsvProcess.ViewStyle:=vsReport;
end;procedure TfrmMain.spdRefreshClick(Sender: TObject);
var
  ContinueLoop:BOOL;
  NewItem : TListItem;
begin
  lsvProcess.Items.Clear;
  FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
  ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
  while integer(ContinueLoop)<>0 do
  begin
    NewItem:=lsvProcess.Items.add;
    NewItem.Caption:=ExtractFileName(FProcessEntry32.szExeFile);
    NewItem.subItems.Add(IntToHex(FProcessEntry32.th32ProcessID,4));
    NewItem.subItems.Add(FProcessEntry32.szExeFile);
    ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Application.OnHint := DisplayHint;
  spdRefreshClick(Sender);
end;procedure TfrmMain.lsvProcessDblClick(Sender: TObject);
var
  Ret : BOOL;
  ProcessID : integer;
  ProcessHndle : THandle;
begin
  try
    with lsvProcess do
      begin
        if MessageDlg('Do You Want To Terminate "'+ItemFocused.Caption+'"?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
          begin
            ProcessID:=StrToInt('$'+ItemFocused.SubItems[0]);
            ProcessHndle:=OpenProcess(PROCESS_TERMINATE,BOOL(0),ProcessID);
            Ret:=TerminateProcess(ProcessHndle,0);
            if Integer(Ret)=0 Then
              MessageDlg('Can Not Terminate "'+ItemFocused.Caption+'"',mtInformation,[mbOk],0)
            else
              ItemFocused.Delete;
            end;
      end;
  except
  end;
end;end.