KillTask
来源:互联网 发布:网络行为监控 编辑:程序博客网 时间:2024/06/07 14:19
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.