Entwickler-Ecke

Windows API - Programm anhand Namen beenden


Mitmischer 1703 - Di 02.12.08 19:20
Titel: Programm anhand Namen beenden
Wie beende ich ein Programm anhand von beliebigen Sachen (Name in der Titelleiste, PID...)?

Theoretisch bräuchte ich ja das Handle. Der Benutzer kann dann ja die PID, den Titel... eingeben, daraus soll dann das Handle ermittelt werden und dann muss ich das Handle terminaten :twisted: !!

Nur leider habe ich keinen Ansatz, wie das gehen soll... :(

Könnt ihr mir helfen :)?


Andreas L. - Di 02.12.08 19:29

Über den Dateinamen gehts so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses
  ..., tlhelp32; //evtl. noch was...

...

function KillProcess(const ExeName: String):Boolean;
var
  Process: TProcessEntry32;
  h: THandle;
begin
  Result := False;
  Process.dwSize := SizeOf(Process);
  h := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
   if Process32First(h, Process) then
    repeat
     if AnsiLowerCase(Process.szExeFile) = AnsiLowerCase(ExeName) then Result := TerminateProcess(OpenProcess(Process_Terminate, False, Process.th32ProcessID), 0);
    until (not Process32Next(h, Process)) or Result;
  finally
   CloseHandle(h);
  end;
end{KillProcess}


Delete - Di 02.12.08 19:39

Zitat:
Der Benutzer kann dann ja die PID, den Titel... eingeben, daraus soll dann das Handle ermittelt werden und dann muss ich das Handle terminaten

In der Zeit, in der ich als Benutzer den Fenstertitel eingegeben habe (woher soll ich die PID wissen?), hab ich das Fenster nach vorne geholt und über "X" geschlossen ;)


Hidden - Di 02.12.08 19:55

Hi,

Ich denke mal eher der Name wird einmalig eingetipp und das Programm wird dann dei bestimmten Auslöseereignissen beendet ;)

Geschickter fände ich ja die Auswahl per Fokus: Buttonklick; Programm wartet, bis ein erlaubtes Fenster den Fokus hat(dein eigenes Programm und Sachen wie das Fenster der Taskleiste oder den Desktop soltest du filtern). Dann kopierst du den Programmnamen, Pfad, ..(gewünschte Infos) in ein Editfeld und lässt den User bestätigen.

mfG,


Mitmischer 1703 - Di 02.12.08 19:57

@Andreas L.: Was macht der Code denn wann?

@DeddyH: Was ist mit versteckten Prozessen von denen der User weiß, dass sie da sind; er weiß aber rein gar nichts über das beenden

@Hidden: Wie soll das gehen? Ich kann doch nicht den Fokus anderer Programme abfragen...


Delete - Di 02.12.08 20:02

Und welchen Fenstertitel willst Du bei versteckten Prozessen eintragen? Klingt für mich alles unausgegoren, sry.


jaenicke - Di 02.12.08 20:19

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
@Andreas L.: Was macht der Code denn
Den an die Funktion übergebenen Prozess killen...

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
wann?
..., wenn du die Funktion aufrufst.

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
@DeddyH: Was ist mit versteckten Prozessen von denen der User weiß, dass sie da sind; er weiß aber rein gar nichts über das beenden
Den Titel weiß er auch nicht, d.h. du müsstest eine Liste anzeigen, womit wir bei Programmen wie dem ProcessExplorer wären, der Freeware ist und das sehr gut macht.

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
@Hidden: Wie soll das gehen? Ich kann doch nicht den Fokus anderer Programme abfragen...
Warum nicht? Natürlich geht das.
// EDIT:
Beispiel für so ein Programm:
http://www.delphi-forum.de/viewtopic.php?t=21271
Da kannst du ein Fenster mit der Maus auswählen.


Hidden - Di 02.12.08 20:30

Genau an WinSpy dachte ich xD

Dürfte doch mit Screen.ActiveForm gehen, oder?^^


jaenicke - Di 02.12.08 20:32

Das hatte ich auch mal programmiert, müsste ich schauen wie ichs gemacht hatte, aber das ist ja sowieso ein anderes Thema ;-).