网语飘飘.Net/Delphi攻坚战

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
{For Windows 9x/ME/2000/XP }

uses

Tlhelp32;

function KillTask(ExeFileName: string): Integer;

const

PROCESS_TERMINATE = $0001;

var

ContinueLoop: BOOL;

FSnapshotHandle: THandle;

FProcessEntry32: TProcessEntry32;

begin

Result := 0;

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

Result := Integer(TerminateProcess(

OpenProcess(PROCESS_TERMINATE,

BOOL(0),

FProcessEntry32.th32ProcessID),

0));

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);

end;

CloseHandle(FSnapshotHandle);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

KillTask('notepad.exe');

end;

{ For Windows NT/2000/XP }

procedure KillProcess(hWindowHandle: HWND);

var

hprocessID: INTEGER;

processHandle: THandle;

DWResult: DWORD;

begin

SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,

SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);

if isWindow(hWindowHandle) then

begin

// PostMessage(hWindowHandle, WM_QUIT, 0, 0);

{ Get the process identifier for the window}

GetWindowThreadProcessID(hWindowHandle, @hprocessID);

if hprocessID <> 0 then

begin

{ Get the process handle }

processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,

False, hprocessID);

if processHandle <> 0 then

begin

{ Terminate the process }

TerminateProcess(processHandle, 0);

CloseHandle(ProcessHandle);

end;

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

KillProcess(FindWindow('notepad',nil));

end;
posted on 2006-05-30 17:16  网语飘飘  阅读(265)  评论(0)    收藏  举报