如何用PB写删除指定进程
Re:RE:如何用PB写删除指定进程!
默认分类 2005-11-28 18:15:29 阅读284 评论0   字号: 订阅
【在hjs9225的大作中提到:】
:结束进程---IE为例
:
:
: ......

加文集

-----------------------------------------------------------

结束进程---IE为例




//创建非可视对象uf_get_exename



//声明local external function(api)

Function Long CreateToolhelp32Snapshot(Long Flags,Long ProcessId) Library "kernel32.dll"

Function Integer Process32First(uLong Snapshot,ref s_Process Process) Library "kernel32.dll"

Function Integer Process32Next(uLong Snapshot,ref s_Process Process) Library "kernel32.
dll"



//声明前先创建结构

unsignedlongstructsize

unsignedlongusage如何删除ie

unsignedlongprocessid

unsignedlongdefaultheapid

unsignedlongmoduleid


unsignedlongthreads

unsignedlongparentprocessid

unsignedlongclassbase

unsignedlongflags

character filename[260]

//构造对象uf_get_exename的函数of_getexe()



/
//////////////////////////of_getexe()////////////////////////

功能:枚举进程并返回指定进程号PID

传入:无

返回:Long

/////////////////////////////////////////////////////////////



s_Process lst_Process

string ls_filename[100] ,ls_curexename


ulong ln_ProcessID,ln_SameCount,ln_Snapshot,ln_Circle,ln_Count,ul_PID



ul_PID = 0

ln_Snapshot = CreateToolhelp32Snapshot(2,0)

if (ln_Snapshot<1) then return 0

lst_Process.StructSize = 296



if Process32First(ln_Snapshot,lst_Process)=0 then return 0



//枚举当前权限下的进程

debugbreak()

dowhile true



if Process32Next(ln_Snapshot,lst_Process)=0 then exit

ln_Count = ln_Count + 1


ls_FileName[ln_Count] = lst_Process.FileName

If Lower(ls_FileName[ln_Count]) = '' Then

//取得进程号

ul_PID = lst_Process.ProcessID

//messagebox(string(ul_PID),ls_FileName[ln_Count])

End If



loop



return ul_PID



//接下来

//创建一个窗体,上面放一按钮cb_click



//在窗体声明local external function(api)


FUNCTION ulong TerminateProcess(ulong hProcess,ulong uExitCode) LIBRARY "kernel32.dll"

FUNCTION ulong OpenProcess(ulong dwDesiredAccess,ulong bInheritHandle,ulong dwProcessId) LIBRARY "kernel32.dll"



//cb_clickclicked事件



uf_get_exename luf_get_exename






INTEGER li_rc

ULONG ul_PID

ULONG PROCESS_TERMINATE = 0001

ULONG hwdprocess



If messagebox('结束进程','确定吗?Kill?',question!,yesno!,1) = 2 Then return




//创建实例变量

luf_get_exename = create uf_get_exename

//获取指定进程号

ul_PID = luf_get_exename.of_getexe()



If ul_PID = 0 Then

Messagebox('结束进程','没有发现IE进程!')

return

End If



If ul_PID <> 0 Then

//获取指定进程号的进程句柄

hwdprocess = OpenProcess(PROCESS_TERMINATE,1,ul_PID)

//messagebox('',string(hwdprocess))


//结束进程,成功返回非零

li_rc = TerminateProcess(hwdprocess,0)

If li_rc <> 0 Then Messagebox('结束进程','成功结束进程!')

End If





Destroy luf_get_exename;




补充:

1、进程相当于系统提供的一个平台,它可以包括一个或多个线程,IE是个进程,

打开多个网页是它的多个线程,IE进程Kill掉即可关闭多个打开网页的线程。

298NT不一样。98下可以用CreateToolhelp32Snapshot函数Process32First

Process32Next来枚举当前所有进程的进程ID(先调用函数CreateToolhelp32Snapshot

NT下用EnumProcesses函数来枚举。2000是支持CreateToolhelp32Snapshot函数的。

得到进程ID后就可以用OpenProcess函数得到句柄了,在NT2000下要通过安全检测。


3EnumProcess 也可以得到系统中的进程列表

杀掉本地进程其实很简单,取得进程ID后,调用OpenProcess函数打开进程句柄,然

后调用TerminateProcess函数就可以杀掉进程了。有些情况下并不能直接打开进程句柄,

例如WINLOGON等系统进程,因为权限不够。这个时候我们就得先提升自己的进程的权限了。

提升权限过程也不复杂,先调用GetCurrentProcess函数取得当前进程的句柄,然后调用

OpenProcessToken打开当前进程的访问令牌,接着调用LookupPrivilegeValue函数取得你

想提升的权限的值,最后调用AdjustTokenPrivileges函数给当前进程的访问令牌增加权限


就可以了。一般有了SeDebugPrivilege特权后,就可以杀掉除Idle外的所有进程了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。