Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm (Prozessor) in dem Task-Manager beenden (https://www.delphipraxis.net/113832-programm-prozessor-dem-task-manager-beenden.html)

Delphiturbo 15. Mai 2008 11:45


Programm (Prozessor) in dem Task-Manager beenden
 
Hallo

ich verwende eine Kill-Funktion um ein Programm zu beenden
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
begin
KillProgram(nil,'projekt1.exe');
end;
Es funktioniert aber wenn das Programm in Hintergrund arbeitet (nur über Task-Manager sichtbar), dann schaffe ich mit der Funktion das Programm nicht zu beenden.

Welche Funktion ist fafür geeignet ?

Nuclear-Ping 15. Mai 2008 11:47

Re: Programm (Prozessor) in dem Task-Manager beenden
 
- Wie schaut "KillProgram" denn aus?
- Kannst du den gewünschten Prozess im Task-Manager manuell beenden?

Delphiturbo 15. Mai 2008 11:55

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Manual kann ich das Programm beenden
Projekt1.exe war nur ein Beispiel
Ich möchte ein beliebiges Programm in Task-Manager beenden

Meine Funktion funktioniert leider nur wenn ich den Programm-Pfad eingebe

toms 15. Mai 2008 11:56

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Nuclear-Ping
- Wie schaut "KillProgram" denn aus?

Die Frage wurde noch nicht beantwortet.

Delphiturbo 15. Mai 2008 11:57

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Delphi-Quellcode:
procedure KillProgram(ClassName: PChar; Titre: String);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
Appli : HWND;
begin
Appli := FindWindow(PChar(ClassName), PChar(Titre));
GetWindowThreadProcessID(Appli, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;

Nuclear-Ping 15. Mai 2008 12:00

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Ja, dann sollte ja klar sein, warum das nur bei normalen Anwendungen funktioniert: Die Funktion arbeitet mit FindWindow.

Aber bei Bei Google suchendelphi kill process ist was dabei, was dir helfen sollte. ;)

Sharky 15. Mai 2008 12:06

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Hallo Delphiturbo.

Ich glaube es reicht jetzt! Wenn Du weiterhin in der DP fragen stellen möchtest arbeite bitte diese Punkte ab:
  1. Lerne Dich richtig auszudrücken
  2. Lerne die Grundlagen von Delphi
  3. Halte Dich daran was andere User (besonder Daniel) Dir sagen

Wenn Du hierzu nicht bereit bist solltest Du überlegen ob die DP das richtige Forum für dich ist!

Daniel 15. Mai 2008 12:10

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Sharky
[...]Halte Dich daran was andere User (besonder Daniel) Dir sagen[...]

:love:

:mrgreen:

Wotan89 15. Mai 2008 12:30

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Das wäre eine mögliche Variante:

Delphi-Quellcode:
procedure Killprocess(Name:String);
var PEHandle,hproc:cardinal; PE:ProcessEntry32;
begin
PEHandle:=CreateTOOLHelp32Snapshot(TH32cs_Snapprocess,0);
if PEHandle<>Invalid_Handle_Value then
  begin
  PE.dwSize:=Sizeof(ProcessEntry32);
  Process32first(PEHandle,PE);
  repeat
  if Lowercase(PE.szExeFile)=Lowercase(Pchar(Name)) then
    begin
    hproc:=openprocess(Process_Terminate,false,pe.th32ProcessID);
    TerminateProcess(hproc,0);
    closehandle(hproc);
    break;
    end;
  until Process32next(PEHandle,PE)=false;
  end;
closehandle(PEHandle);
end;
.
.
Delphi-Quellcode:
KillProcess('Project1.exe'); // Beispielcode

Delphiturbo 15. Mai 2008 14:16

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Keine schaft den Prozessor zu beenden !
auch diese Funktion :
KillTask

Luckie 15. Mai 2008 14:19

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Dann ist es entweder ein Dienst oder der Prozess wurde von einem anderen Benutzer gestartet.

Daniel 15. Mai 2008 14:21

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Delphiturbo
Keine schaft den Prozessor zu beenden !

Ja und?

Um den Prozessor zu beenden - final - würde ich einen Hammer empfehlen.

Und bevor Du uns nicht sagst, was Deinen Prozess ausmacht, dass man ihn nicht beenden kann, wird man Dir auch nicht helfen können - und das ausgerechnet in einem Moment, in dem Dir immer weniger Leute helfen wollen, weil Du offenbar nur nach fertigem Code fragst.

Delphiturbo 15. Mai 2008 15:07

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Luckie
Dann ist es entweder ein Dienst oder der Prozess wurde von einem anderen Benutzer gestartet.

Wenn es so wäre, warum kann ich den Prozessor manual über den Task-Manager beenden?!
Ich meine nicht die Prozessoren von System oder Lokaldiest sondern von Benutzername

Es geht nicht um einen fertigen Code, da ich mehrere Funktionen ausprobiert habe, ohne Erfolg

Luckie 15. Mai 2008 15:49

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Delphiturbo
Zitat:

Zitat von Luckie
Dann ist es entweder ein Dienst oder der Prozess wurde von einem anderen Benutzer gestartet.

Wenn es so wäre, warum kann ich den Prozessor manual über den Task-Manager beenden?!
Ich meine nicht die Prozessoren von System oder Lokaldiest sondern von Benutzername

Es geht nicht um einen fertigen Code, da ich mehrere Funktionen ausprobiert habe, ohne Erfolg

Erstmal vorweg: Was du meinst heißt Prozess und nicht Prozessor!

Und was du uns erklären zu versuchst ist, dass du auch Prozesse mit dem Code nicht beenden, die du selber gestartet hast?

Welchen Code benutzt du? Bist du ihn schon mal in Einzelschritten durchgegangen, um zu gucken, wo der Code fehlschlägt? Hast du dir mal Fehlrmeldungen ausgegen lassen? Das sind Dinge auf die könntest du auch selber kommen. Bevor wir dir helfen können, musst du erstmal deine Hausaufgaben machen.

toms 15. Mai 2008 15:54

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Delphiturbo
Es geht nicht um einen fertigen Code, da ich mehrere Funktionen ausprobiert habe, ohne Erfolg

Es stellt sich die Frage, ob du die Funktionen mit den richtigen Parametern aufrust.

Z.B das hier kann ja nicht funktionieren (ausser der Titel des Fensters lautet tatsächlich 'projekt1.exe'

Delphi-Quellcode:
KillProgram(nil,'projekt1.exe');
Deklaration von KillProgram:

Delphi-Quellcode:
procedure KillProgram(ClassName: PChar; Titre: String);

rollstuhlfahrer 15. Mai 2008 16:04

Re: Programm (Prozessor) in dem Task-Manager beenden
 
HI,

der Code aus Post #9 sollte eigentlich funktionieren, solange du die nötigen Rechte hast, um ein Programm zu beenden. Auch das Beispielprogramm Project1.exe sollte sich damit auch ganz einfach beenden lassen.
Ich würd mir an deiner stelle mal ausgeben lassen, welchen Rückgabewert TerminateProcess bringt. (Sollte eigentlich True sein)

rollstuhlfahrer

EDIT: Ach ja, den Titel des Themas änderst du, indem du bei Post #1 auf den http://www.delphipraxis.net/template.../icon_edit.gif-Knopf klickst. Wie Daniel schon gesagt hat, kann man den Prozessor schwer im Task-Manager beenden.

Der.Kaktus 15. Mai 2008 16:17

Re: Programm (Prozessor) in dem Task-Manager beenden
 
*geloescht*

Delphiturbo 15. Mai 2008 16:43

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Ich vermute, Ihr habt meine Frage falsch verstanden
Ich meine nicht, Programme, die ich selbe gestartet habe, sondern : :mrgreen:
http://www.trojaner-board.de/attachm...igt-vorher.jpg
manch mal beende das Programm ganz normal über sein rotes Kreuz, finde ich in danach aber immer nocht
in der Liste !!!

Nuclear-Ping 15. Mai 2008 16:47

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Das mal probiert? http://www.delphi3000.com/articles/article_4324.asp?SK=

Und dein Edit hat rein GARNICHTS mit dem Thema zu tun.

Luckie 15. Mai 2008 16:48

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Also doch Prozesse, die von anderen Benutzern gestarte wurden. :roll:

Wahrscheinlich hast du nir das Fenster zum Konfigureiren geschlossen oder so.

bluesbear 15. Mai 2008 16:51

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Der.Kaktus
(...)Sorry, aber musste mal raus.

:lol:
Ich gebe dir vollkommen Recht!
Ich verfolge das mit einem gewissen Amüsement - wenn ich Delphiturbo bei den neuen Nachrichten lese, denke ich mir, "Na, was hatter denn jetzt wieder?" :zwinker:
Ich meine, hartnäckig ist er ja. Der bleibt dran, was auch immer er vor hat.
Ich verstehe nur nicht, warum er diese Energie nicht einsetzt, um seine Programmierprobleme zu lösen, sondern statt dessen eine Forumsnachricht nach der anderen schreibt. :gruebel:

Nuclear-Ping 15. Mai 2008 16:54

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Luckie
Also doch Prozesse, die von anderen Benutzern gestarte wurden. :roll:

Wahrscheinlich hast du nir das Fenster zum Konfigureiren geschlossen oder so.

Im Task-Manager lassen sich Prozesse auch von SYSTEM beenden. Ergo sollte das auch per Delphi gehen, wenn man sich nicht so anstellen würde ...

Der.Kaktus 15. Mai 2008 16:55

Re: Programm (Prozessor) in dem Task-Manager beenden
 
schau mal hier --> Processes .

shmia 15. Mai 2008 16:57

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Nimm einfach das Tool PsKill und verwende es aus einer Batchdatei oder aus deinem Programm heraus.
Damit kannst du normale Anwendungen killen.
Dienste werden anderst beendet. Beispiel:
Code:
C:\> net stop Schedule
damit wird der Taskplaner (Dienstname: Schedule) beendet. (mit Net Start Schedule wieder starten, is klar, oder )
Du siehst, das lässt sich alles über Batchdateien regeln.

Delphiturbo 15. Mai 2008 17:07

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Nuclear-Ping
Das mal probiert? http://www.delphi3000.com/articles/article_4324.asp?SK=

Und dein Edit hat rein GARNICHTS mit dem Thema zu tun.

ja schon ausprobiert. Nichts gebracht
Es erscheint keine Fehlermeldung !
Delphi-Quellcode:
function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while Integer(ContinueLoop) <> 0 do begin
    if (
         (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or
         (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))
        ) then
      Result :=
        Integer(
          TerminateProcess(
            OpenProcess(
              PROCESS_TERMINATE,
              BOOL(0),
              FProcessEntry32.th32ProcessID
            ),
            0
          )
        );
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
KillTask('alg.exe');
end;
Einige Programme in der Liste werden nicht von einem anderen User verwendet, sondern Programme, die z.B. bei Windows Start, starten und so weiter

Der.Kaktus 15. Mai 2008 17:26

Re: Programm (Prozessor) in dem Task-Manager beenden
 
[OT]...[/OT]

1234588 15. Mai 2008 17:38

Re: Programm (Prozessor) in dem Task-Manager beenden
 
mal ganz ehrlich, du weißt doch selbst nicht was du willst, oder?

wenn du hilfe haben willst, ist es dann zuviel verlangt fuenf minuten in einen sinnvollen post zu investieren? ist es zuviel verlangt eine sachlich praezise frage zu stellen?

ein bsp:
Zitat:

Einige Programme in der Liste werden nicht von einem anderen User verwendet, sondern Programme, die z.B. bei Windows Start, starten und so weiter
was soll das? selbst nachdem ich es mehrmals durchgelesen hab, hab ich es noch immer nicht verstanden. les dir deine saetze durch bevor du sie abschickst. beachte auch, das wir nicht wissen was du brauchst, hast oder wo es hapert. anders kann man dir leider nicht helfen :)

bluesbear 15. Mai 2008 17:43

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von 1234588
was soll das? selbst nachdem ich es mehrmals durchgelesen hab, hab ich es noch immer nicht verstanden.

Da habe ich auch eine Weile gegrübelt. Wenn man das Komma nach "Windows Start" weg lässt, erschließt sich der Sinn einigermaßen <g>.

@Delphiturbo: Darf ich mal fragen, wozu du das eigentlich tun möchtest? Mir fällt gerade kein konstruktiver Anwendungsfall für das Beenden von Prozessen ein.

Der.Kaktus 15. Mai 2008 18:01

Re: Programm (Prozessor) in dem Task-Manager beenden
 
[Edit] wegen neuer Info!![/Edit]

HalloDu 15. Mai 2008 18:02

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Da muss ich bluesbear zustimmen: Mir erschließt sich auch kein Anwendungsfall, zumindest keiner der sich nicht auch mit einer Batchskript lösen ließe...

[OT]
Ich möchte dann dazu auch noch was sagen. Ich bin auch noch ein ziemlich junger Programmierer und muss sagen das das Internet beim Programmieren natürlich eine große Hilfe ist, aber trotzdem habe ich viele Bücher und stelle erstmal mein Gehirn an und versuche Probleme selber zu lösen, bevor ich eine Frage stelle (Dementsprechend findet man von mir auch mehr antworten als Fragen). Es ist ein Fluch das immer mehr Leute einfach nur noch Fragen ohne selbst etwas tun zu wollen. Sry, das musste raus. Im Übrigen weiß ich bis jetzt nicht was du mit dem letzten verworrenen Satz meinst. Bitte versuch wie schon mehrmals erwähnt dich klar auszudrücken...
[/OT]

Wotan89 15. Mai 2008 18:17

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Ich stell mir vorallem die Frage: Meine Procedure, welche im am Anfang gepostet habe funktioniert einwandfrei, was passiert bei Dir?
Es wäre einfach mal das Beste, wenn Du ersteinmal mit einer Fehlerbetrachtung beginnst. Hast du nicht die nötigen Rechte? Dann dürfte spätestens OpenProcess ein INVALID_HANDLE_VALUE zurückgeben. Versuch den Quelltext zu verstehen und überprüfe doch einfach, wo der Fehler entsteht und den kannst du uns dann posten. Wie gesagt: Bei mir funktioniert mein Quelltext (#9) einwandfrei, deswegen wäre es sinvoll, wenn du guckst, welche Fehler entstehen.

rollstuhlfahrer 15. Mai 2008 19:33

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuch mich mal wieder, da ich etwas guten in das Thema hineininterpretieren will:

In Post #18 (von Delphiturbo) war ein "Screenshot" vom Task-Manager zu sehen. Ich bin der Meinung DelphiTurbo will den Prozess sched.exe beenden. Der Prozess gehört deinem Virenscanner und zwar Antivir (siehe Anhang). Und Antivir ist nicht darauf bedacht, einfach mal so ohne sich zu wiedersetzen, beendet zu werden. Wenn ich dann als Admin mit dem ProzessExplorer diesen Prozess beenden will, kommt die Meldung "Error opening process: Zugriff verweigert"! Soll heißen, dass ich als Admin nicht in der Lage bin, diesen Prozess zu beenden. Das selbe gilt fpr meine Firewall.

=> Kannst du den Prozess erfolgreich beenden????

rollstuhlfahrer

PS: Bitte auf mein Alter links achten und deshalb klarer ausgrücken und in ganzen Sätzen artikulieren! Bitte keine unvollständige Sätze Fett schreiben!

EDIT1:
Zitat:

Zitat von Wotan89
(...)Wie gesagt: Bei mir funktioniert mein Quelltext (#9) einwandfrei, deswegen wäre es sinvoll, wenn du guckst, welche Fehler entstehen.

Das hab ich auch schon mal gesagt!

EDIT2: Ach ja, den Titel des Themas änderst du, indem du bei Post #1 auf den http://www.delphipraxis.net/template.../icon_edit.gif-Knopf klickst.
Den Prozessor kann ich wie viele andere nicht einfach über den Task-Manager beenden!

Luckie 15. Mai 2008 19:53

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von rollstuhlfahrer
kommt die Meldung "Error opening process: Zugriff verweigert"! Soll heißen, dass ich als Admin nicht in der Lage bin, diesen Prozess zu beenden. Das selbe gilt fpr meine Firewall.

Im Taskmanager nicht, weil sie unter dem Systemkonto laufen und dir also nicht gehören. Aber du kannst die Dienste stoppen. ;)

bluesbear 15. Mai 2008 19:56

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von rollstuhlfahrer
(...)Den Prozessor kann ich wie viele andere nicht einfach über den Task-Manager beenden!

Nö, da gibt es lustigere Methoden <g> http://www.powerlabs.org/emguns.htm

rollstuhlfahrer 15. Mai 2008 20:01

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Luckie
Im Taskmanager nicht, weil sie unter dem Systemkonto laufen und dir also nicht gehören. Aber du kannst die Dienste stoppen. ;)

in dem Fall scheiden sich dann die Task-Manager und die ProzessExplorer Nutzer.
=> Problem gelöst. Bitte, Delphiturbo, beende deine Dienste mit net stop *Dienst*. Das ganze passt prima in ShellExecute aus der ShellAPI

Delphi-Quellcode:
ShellExecute(0, 'open', '%windir%\system32\net.exe', 'stop *Dienst*', '%windir%', SW_HIDE);
// %windir% musst du dann noch über GetEnvironmentString ermitteln
So und nun hast du deinen Code, nach dem du gar nicht gesucht hast, trotzdem bekommen und das in kompletten Sätzen!

rollstuhlfahrer

EDIT: Eins kann man Delphiturbo nicht lassen (muss gesagt sein): Er ist sehr hartnäckig und postet lieber als zu suchen, was man an der Suche nach allen Beiträgen des Nutzers erkennt

tomsel 15. Mai 2008 20:54

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Ich glaub, delphiturbo betreibt einfach nur outsourcing. Was immer ihm hier angetragen wird, es ficht ihn nicht an. Solange er nur die benötigten Codeschnipsel kostenlos geliefert bekommt. Übrigens, so wie sich alle seine Beiträge lesen, ist Deutsch nicht seine Muttersprache, sondern Französisch(?). Damit wäre die unklare Ausdrucksweise wenigstens erklärt.

Neutral General 15. Mai 2008 21:26

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Ich denke es reicht jetzt, oder wollt ihr ihn aus der DP verkraulen? Es steht hier bereits mehrfach das, was ihm gesagt werden soll. Dadurch das ihr ihn hier mit und vor versammelter Mannschaft seitenweise kritisiert und runtermacht, wirds auch nicht besser. Ich würde mich an seiner Stelle ab sofort nur in der DP unwohl fühlen.

Danke

bluesbear 15. Mai 2008 21:42

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von Neutral General
(...)verkraulen? Es steht hier bereits mehrfach das, was ihm gesagt werden soll.
Danke

Kraulen wo?
Hinter dem rechten Ohr? Damals, zu Compuserve Zeiten... Jaa, damals war alles besser. <mitkrückstockwink> Mücken und Elefanten wurden nicht zugelassen. :zwinker:

Nuclear-Ping 16. Mai 2008 06:10

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Zitat:

Zitat von tomsel
Ich glaub, delphiturbo betreibt einfach nur outsourcing. Was immer ihm hier angetragen wird, es ficht ihn nicht an. Solange er nur die benötigten Codeschnipsel kostenlos geliefert bekommt. Übrigens, so wie sich alle seine Beiträge lesen, ist Deutsch nicht seine Muttersprache, sondern Französisch(?). Damit wäre die unklare Ausdrucksweise wenigstens erklärt.

Wie schon gesagt: Ich wette Delphiturbo ist Hier im Forum suchentaktaky. :mrgreen:

Luckie 16. Mai 2008 08:10

Re: Programm (Prozessor) in dem Task-Manager beenden
 
Einen Thread hat Daniel schon von ihm schon schliessen müssen, weil er kaputt gemacht wurde. Also bitte, reißt euch etwas am Riemen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz