KillTask

    技术2022-05-11  104

    program KillTask;

    uses  SysUtils, Messages, Classes, ShellApi, Forms, Windows, TLHelp32, rwIni;

    {$R CustKillTask.RES}{$R *.res}

    //brc32 CustKillTask.RC//TsKill     kl_TsKill     D:/SoftWare/KillTask/TsKill.exe//TaskList   kl_TaskList   D:/SoftWare/KillTask/TaskList.exe//Ntsd       kl_Ntsd       D:/SoftWare/KillTask/Ntsd.exe//Usage: >ntsd -c q -p PID

    //KillTask.ini//[KillTask]//Item1=wnwb.exe

    procedure Kill_Task(ExeFileName: string);const  PROCESS_TERMINATE = $0001;var  ContinueLoop: BOOL;  FSnapshotHandle: THandle;  FProcessEntry32: TProcessEntry32;  ProcessHandle: THandle;  ExecuteStr: string;  ParaStr: string;begin  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    begin      ProcessHandle := FProcessEntry32.th32ProcessID;      ExecuteStr := 'ntsd.exe';      ParaStr := ' -c q -p ' + IntToStr(ProcessHandle);      ShellExecute(Application.Handle, 'Open', pchar(ExecuteStr), Pchar(ParaStr), nil, SW_HIDE);     { Or,But It can't close system process.      ProcessHandle := OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID);      TerminateProcess(ProcessHandle, 0);     }    end;    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);  end;end;

    var  ExeFileName: string;  Items: TStrings;  i: Integer;  CustRes: TResourceStream;  ResName, ResType, ResSaveTo: string;  TaskHandle: THandle;  rwIniFile: TrwIni;begin  Application.Initialize;  rwIniFile := TrwIni.Create(nil);  rwIniFile.RegistryPath := '/Software/Microsoft/Windows/CurrentVersion/Run';  rwIniFile.FileName := 'KillTask';

      ResSaveTo := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'Ntsd.Exe';  if FileExists(ResSaveTo) then    DeleteFile(Pchar(ResSaveTo));

      ResName := UpperCase('Ntsd');  ResType := UpperCase('kl_Ntsd');  CustRes := TResourceStream.Create(Hinstance, ResName, pchar(ResType));  CustRes.SaveToFile(ResSaveTo);  CustRes.Free;  SetFileAttributes(Pchar(ResSaveTo), FILE_ATTRIBUTE_HIDDEN);

      Items := TStringList.Create;

      rwIniFile.iReadSection('KillTask', Items);  for i := 0 to Items.Count - 1 do  begin    ExeFileName := rwIniFile.iReadString('KillTask', Items[i], 'Nothing@Null');    Kill_Task(ExeFileName);  end;  rwIniFile.hkWriteString('KillTask', Application.ExeName);

      FreeAndNil(Items);  FreeAndNil(rwIniFile);

      if FileExists(ResSaveTo) then    DeleteFile(Pchar(ResSaveTo));

      // TaskHandle := FindWindow(PChar('Shell_TrayWnd'), nil);  // MoveWindow

      Application.Run;end.


    最新回复(0)