Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programm durch Delphi Programm beenden? (https://www.delphipraxis.net/64864-programm-durch-delphi-programm-beenden.html)

Cronos 9. Mär 2006 12:35


Programm durch Delphi Programm beenden?
 
Eine Frage, ich suche nen Script mit dem ich andere offene ( meißt im hintergrund laufende) Programme mit einem kleinen Delphi programm beenden kann.
Ich bin leider Anfänger und bring das nicht zusammen.

Danke

JasonDX 9. Mär 2006 12:42

Re: Programm durch Delphi Programm beenden?
 
Wer suchet,der findet

greetz
Mike

Cronos 9. Mär 2006 12:43

Re: Programm durch Delphi Programm beenden?
 
Da Hab ich leider nichts gefunden ;(

ichbins 9. Mär 2006 13:06

Re: Programm durch Delphi Programm beenden?
 
Hier im Forum suchenProzess beenden oder gleich in der Code Library: Prozess beendenProzess beenden

folgender Code:
Delphi-Quellcode:
function GetProcID(sProcName: String): Integer;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := -1;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap = INVALID_HANDLE_VALUE then exit;

  pe32.dwSize := SizeOf(ProcessEntry32);

  { wenn es geklappt hat }
  if Process32First(hProcSnap, pe32) = true then
    { und los geht's: Prozess suchen}
    while Process32Next(hProcSnap, pe32) = true do
    begin
      if pos(sProcName, pe32.szExeFile) <> 0then
        result := pe32.th32ProcessID;
    end;
end;

procedure KillIt(name:string);
var
  hProcess : Cardinal;
  dw      : DWORD;
  dwprocid : cardinal;
begin
  dwprocide:=getprocid(name);
  { open the process and store the process-handle }
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  { kill it }
  TerminateProcess(hProcess, 0);
  { TerminateProcess returns immediately, so wie have to verify the result via
    WaitfForSingleObject }
  dw := WaitForSingleObject(hProcess, 5000);
  case dw of
    { everythings's all right, we killed the process }
    WAIT_OBJECT_0: Messagebox(Application.Handle, 'Prozess wurde beendet.', 'Prozess beenden',
      MB_ICONINFORMATION);
    { process could not be terminated after 5 seconds }
    WAIT_TIMEOUT:
    begin
      Messagebox(Application.Handle, 'Prozess konnte nicht innerhalb von 5 Sekunden beendet werden.',
        'Prozess beenden', MB_ICONSTOP);
      exit;
    end;
    { error in calling WaitForSingleObject }
    WAIT_FAILED:
    begin
      RaiseLastOSError;
      exit;
    end;
  end;
end;
du musst nur die Unit TLHelp32 in die Uses-Liste einbinden.

mushroomfreak05 9. Mär 2006 13:34

Re: Programm durch Delphi Programm beenden?
 
Laufende Anwendung beenden
CreateToolHelp32Snapshot, TerminateProcess


--------------------------------------------------------------------------------

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.
Delphi-Quellcode:
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.

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Cronos 10. Mär 2006 09:00

Re: Programm durch Delphi Programm beenden?
 
Danke hat einwandfrei Funktioniert ;) :thumb:

renekr 19. Aug 2006 18:00

Re: Programm durch Delphi Programm beenden?
 
Hallo,
Ich habe einige Functionen hier im Forum getestet aber unter Win NT Probleme mit dem Abschiessen eines Programmes über deren *.exe Namen.

Kann mir jemand nen Tipp geben?

Danke

ManuMF 20. Aug 2006 14:43

Re: Programm durch Delphi Programm beenden?
 
Kannst du uns die Art des Problems geben?

renekr 21. Aug 2006 15:37

Re: Programm durch Delphi Programm beenden?
 
Hi,
also das Problem ist das ich unter Win NT 4.0 eine Exe nicht abschiessen oder beenden kann!

Bräuchte die Funktion dringen um was upzudaten.

Danke.

mkinzler 21. Aug 2006 16:28

Re: Programm durch Delphi Programm beenden?
 
Villeicht mit Hilfe bon pskill aus den pstools von Sysinternal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Seite 1 von 2  1 2      

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