讨论杀进程的问题? 杀进程除了用TerminateProcess外还可以用什么方法,欢迎大家提供别的方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有些肯定不好:ExitProcess向进程发送WM_Close消息 昨天看电脑高手合订本有个杀非本地进程c的改为delphi的function SafeClose(hProcess: THandle; uExitCode: UINT): BOOL;var dwTID, dwCode, dwErr: DWORD; hProcessDup, hRT: THandle; hKernel, hP: THandle; bDup, bSuccess: BOOL; pfnExitProc: FARPROC;begin dwErr := 0; hProcessDup := INVALID_HANDLE_VALUE; hRT := 0; bSuccess := False; hKernel := GetModuleHandle('Kernel32'); bDup := DuplicateHandle(GetCurrentProcess, hProcess, GetCurrentProcess, @hProcessDup, PROCESS_ALL_ACCESS, False, 0); if bDup then hP := hProcessDup else hP := hProcess; if GetExitCodeProcess(hP, dwCode) and (dwCode = STILL_ACTIVE) then begin pfnExitProc := GetProcAddress(hKernel, 'ExitProcess'); hRT := CreateRemoteThread(hP, nil, 0, pfnExitProc, @uExitCode, 0, dwTID); if hRt = 0 then dwErr := GetLastError; end else dwErr := ERROR_PROCESS_ABORTED; if hRT <> 0 then begin WaitForSingleObject(hP, INFINITE); CloseHandle(hRT); bSuccess := TRUE; end; if bDup then CloseHandle(hProcessDup); if not bSuccess then SetLastError(dwErr); Result := bSuccess;end; 函数过程作为参数传递 求救! 哪里有reportmachine下载啊,一定给分 求教Delphi中Memo问题(UP有分)! 在问个简单的问题:Delphi中引号的问题 一个模拟两可的问题 有没有圆形按钮的控件? 我想保留进入的状态,主要是关于指针的用法?/ 着急,请帮忙...皮肤无法使用. TClientDataSet的问题! ADO联SQL Server的问题 [Bug]管理员来看看,给分问题,有意思!
ExitProcess
向进程发送WM_Close消息
c的
改为delphi的function SafeClose(hProcess: THandle; uExitCode: UINT): BOOL;
var
dwTID, dwCode, dwErr: DWORD;
hProcessDup, hRT: THandle;
hKernel, hP: THandle;
bDup, bSuccess: BOOL;
pfnExitProc: FARPROC;
begin
dwErr := 0;
hProcessDup := INVALID_HANDLE_VALUE;
hRT := 0;
bSuccess := False; hKernel := GetModuleHandle('Kernel32');
bDup := DuplicateHandle(GetCurrentProcess, hProcess, GetCurrentProcess,
@hProcessDup, PROCESS_ALL_ACCESS, False, 0); if bDup then
hP := hProcessDup
else
hP := hProcess;
if GetExitCodeProcess(hP, dwCode) and (dwCode = STILL_ACTIVE) then
begin
pfnExitProc := GetProcAddress(hKernel, 'ExitProcess');
hRT := CreateRemoteThread(hP, nil, 0, pfnExitProc, @uExitCode, 0,
dwTID);
if hRt = 0 then
dwErr := GetLastError;
end
else
dwErr := ERROR_PROCESS_ABORTED; if hRT <> 0 then
begin
WaitForSingleObject(hP, INFINITE);
CloseHandle(hRT);
bSuccess := TRUE;
end; if bDup then
CloseHandle(hProcessDup); if not bSuccess then
SetLastError(dwErr);
Result := bSuccess;
end;