Autor Beitrag
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 08.02.06 16:11 
hallo!
ich hab folgendes problem:
ich möchte ein prog schreiben, mit dem manbestimmte programme auf eine blacklist setzen kann und wenn diese dann gestartet werden, sollen sie sofort geschlossen werde.
Das geleiche sollte dann auch mit bestimmten verzeichnissen funktionieren.
mein problem ist, dass ich nicht weiß wie ich das prog, das läuft ermittle, und wie ich eine fremde anwendung schließen kann.
kann midt da wer helfen??
danke schon im voraus!!
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mi 08.02.06 16:33 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
Mit folgendem Code kann geprüft werden, ob eine Exe-Datei läuft. Über Die TProcessEntry32-Struktur kann auch gleich ein Handle auf den Prozess ermittelt werden. Nähere Informationen im PSDK unter dem Stichwort ProcessEntry32.

uses TlHelp32;

function IsExeRunning(const AExeName: string): boolean;
var
  h: THandle;
  p: TProcessEntry32;
begin
  Result := False;

  p.dwSize := SizeOf(p);
  h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    Process32First(h, p);
    repeat
      Result := AnsiUpperCase(AExeName) = AnsiUpperCase(p.szExeFile);
    until Result or (not Process32Next(h, p));
  finally
    CloseHandle(h);
  end;
end;
Beispielaufruf

procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsExeRunning('Notepad.exe'then
   ShowMessage('Notepad läuft')
 else
   ShowMessage('Notepad läuft nicht');
end;
Es wird dabei nur überprüft, ob eine Anwendung mit dem gleichen Dateinamen läuft. Es spielt keine Rolle in welchem Verzeichnis sich die Anwendung befindet. Aus diesem Grund muss der Funktion auch nur der Dateiname der EXE-Datei übergeben werden.


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
Die Funktion beendet den Prozess, der mit übergebenen Exenamen übereinstimmt. Sollten mehrere Prozesse des selben Exenamens laufen, so wird der zuerst Gefundene geschlossen.

Wenn der Prozess erfolgreich beendet wurde, wird true zurückgegeben.

uses TLHelp32;

function KillTask(const AExeName: string): boolean;
var
  p: TProcessEntry32;
  h: THandle;
begin
  Result := false;
  p.dwSize := SizeOf(p);
  h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    if Process32First(h, p) then
      repeat
        if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
          Result := TerminateProcess(OpenProcess(Process_Terminate,
                                                 false,
                                                 p.th32ProcessID),
                                     0);
      until (not Process32Next(h, p)) or Result;
  finally
    CloseHandle(h);
  end;
end;

//Aufruf
procedure TForm1.Button2Click(Sender: TObject);
begin
  if not KillTask('Project2.exe'then
    Showmessage('Prozess konnte nicht beendet werden.');
end;
Bei diesem Code wird der Prozess ohne Rückfrage beendet. Dadurch kann es ggf. zu Datenverlusten kommen.


Beide Quellcodes sind dem EasyHelper entnommen.

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
andras Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mi 08.02.06 16:41 
vielen, vielen dank!!!!!