unit MainFrm;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, TLHelp32, ComCtrls, ExtCtrls, Buttons;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
   i:integer;
   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.