KillTask

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值