was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews
 sonstiges ¦  tutorials ¦  Add&Win Gewinnspiel

Tips (1541)

Dateien (137)
Datenbanken (90)
Drucken (35)
Grafik (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Mathematik (76)
Multimedia (45)
Oberfläche (107)
Objekte/
ActiveX (51)

OpenTools API (3)
Sonstiges (126)
Strings (83)
System (266)
VCL (242)

Tips sortiert nach
Komponente


Tip suchen

Tip hinzufügen

Add&Win Gewinnspiel

Werbung

149 Visitors Online


 
...Prozesse auflisten und beenden?
Autor: NetHatcher
[ Tip ausdrucken ]  

Tip Bewertung (23):  
     


{
  With the following routines it ist simply easy to kill a running process.
  First build a form with a TListview with 3 columns and a TButton
  to refresh the running processes.
  Attach the Refreshclick-procedure to the TButton and the
  ListViewDblClick-procedure with the TListview
  The TListview shows the processes.
  With a Doubleclick on one of the processnames you can kill this running process.
  Don't forget to include TLHelp32 into your uses-clause!

  Mit der nachfolgend aufgeführten Routinen können Sie die in einer
  Windowssitzung laufenden Prozesse aufzeigen und bei Bedarf auch
  entfernen. Hierfür benötigen Sie ein Formobject, ein ListViewobject und zu-
  mindest ein ButtonObject. Verknüpfen Sie das Buttonobject mit dem BtnRefreshClick
  damit gleich beim Start des Programms alle Prozesse angezeigt werden.
  Zum löschen eines Prozesses müssen Sie eine Verknüpfung zwischen DblClick
  des Listviewobject mit der Procedure ListviewDblClick.
  Wie aus den beigefügten Routinen ersichtlich, kann auch ein einzelner Prozess
  gesucht und terminiert werden. Die hierzu erforderlichen Schritte können aus
  der Refreshroutine entnommen werden.
  Wichtig ist die Einbindung der Unit TlHelp32 !
}

interface

uses
 
{...,}TLHelp32 {important !}

// Global Variables, Globale Variablen

var
  
aSnapshotHandle: THandle;
  aProcessEntry32: TProcessEntry32;
  
implementation

procedure 
TForm1.BtnRefreshClick(Sender: TObject);
var
  
i: Integer;
  bContinue: BOOL;
  NewItem: TListItem;
begin
  
ListView1.Items.Clear;
  aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
  bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
  while Integer(bContinue) <> 0 do
  begin
    
NewItem := ListView1.Items.Add;
    NewItem.Caption := ExtractFileName(aProcessEntry32.szExeFile);
    NewItem.subItems.Add(IntToHex(aProcessEntry32.th32ProcessID, 4));
    NewItem.subItems.Add(aProcessEntry32.szExeFile);
    bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
  end;
  CloseHandle(aSnapshotHandle);
end;


procedure TForm1.ListView1DblClick(Sender: TObject);
var
  
Ret: BOOL;
  PrID: Integer; // processidentifier
  
Ph: THandle;   // processhandle
begin
  with 
ListView1 do
  begin
    if 
MessageDlg('Do you want to Terminate "' + ItemFocused.Caption + '"?' + ^J +
                  'It''s possible the system becames instable or out of' + ^J +
                  'control......',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
       
PrID := StrToInt('$' + ItemFocused.SubItems[0]);
       Ph := OpenProcess(1, BOOL(0), PrID);
       Ret := TerminateProcess(Ph, 0);
       if Integer(Ret) = 0 then
         
MessageDlg('Cannot terminate "' + ItemFocused.Caption + '"',
                     mtInformation, [mbOK], 0)
       else
         
ItemFocused.Delete;
     end;
   end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  
{
    ListView1.Columns.Add;
    ListView1.Columns.Add;
    ListView1.Columns.Add;
    ListView1.ViewStyle := vsReport;
  }
  
BtnRefresh.Click;
end;

{Only Win95/Win98/ME}


 

Bewerten Sie diesen Tipp:

dürftig
ausgezeichnet


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners