Delphi-PRAXiS
Seite 2 von 2     12   

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)

renekr 21. Aug 2006 16:32

Re: Programm durch Delphi Programm beenden?
 
Hi,
wäre ne idee aber ich hätte es gerne im Source drin.

danke

ManuMF 22. Aug 2006 11:14

Re: Programm durch Delphi Programm beenden?
 
Naja, es gibt Programme, die sich nicht so einfach abschießen lassen, weil
- sie sich schützen
- man nicht genügend Rechte hat
Nur wenn beides nicht zutrifft, liegt es am Code.

renekr 22. Aug 2006 16:16

Re: Programm durch Delphi Programm beenden?
 
Hallo,
Ich habe es mittlerweile per Enumprocess hinbekommen.

Delphi-Quellcode:
uses PsApi;

function TerminateEXE(sFile: string): Bool;
var verSystem: TOSVersionInfo; hdlSnap,hdlProcess: THandle; bPath,bLoop: Bool;
    peEntry: TProcessEntry32; arrPid: array [0..1023] of DWord; iC: DWord;  
    i,iCount: Integer; arrModul: array [0..299] of Char; hdlModul: HMODULE;  
begin  
 result:=false;  
 if ExtractFileName(sFile)=sFile then bPath:=false else bPath:=true;  
 verSystem.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);  
 GetVersionEx(verSystem);  
 if verSystem.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then begin  
  hdlSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
  peEntry.dwSize:=Sizeof(peEntry);  
  bLoop:=Process32First(hdlSnap,peEntry);  
  while integer(bLoop)<>0 do begin  
   if bPath then begin  
    if CompareText(peEntry.szExeFile,sFile)=0 then begin  
     TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID),0);  
     result:=true;  
    end;  
   end else begin  
    if CompareText(ExtractFileName(peEntry.szExeFile),sFile)=0 then begin  
     TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID),0);  
     result:=true;  
    end;  
   end;  
   bLoop:=Process32Next(hdlSnap,peEntry);  
  end;  
  CloseHandle(hdlSnap);  
 end else  
 if verSystem.dwPlatformId=VER_PLATFORM_WIN32_NT then begin  
  EnumProcesses(@arrPid,SizeOf(arrPid),iC);
  iCount:=iC div SizeOf(DWORD);
  for i:=0 to Pred(iCount) do begin  
   hdlProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,arrPid[i]);  
   if (hdlProcess<>0) then begin
    EnumProcessModules(hdlProcess,@hdlModul,SizeOf(hdlModul),iC);  
    GetModuleFilenameEx(hdlProcess,hdlModul,arrModul,SizeOf(arrModul));  
    if bPath then begin  
     if CompareText(arrModul,sFile)=0 then begin  
      TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid[i]), 0);  
      result:=true;  
     end;  
    end else begin  
     if CompareText(ExtractFileName(arrModul),sFile)=0 then begin  
      TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid[i]), 0);  
      result:=true;  
     end;
    end;
    CloseHandle(hdlProcess);  
   end;  
  end;
 end;
 end;
PS: Ich hatte oder habe alle Rechte für das PRogramm,weil es ja auch von mir kommt,nur zum updaten muss i es zu machen,weil das 1. programm das 2. staret und das 2. das 1. updatet *GG*

danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 2 von 2     12   

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