当前位置: 代码迷 >> PB >> pb 怎么结束其它程序的进程
  详细解决方案

pb 怎么结束其它程序的进程

热度:63   发布时间:2016-04-29 08:15:36.0
pb 如何结束其它程序的进程
请教在线的大侠们,PB 如何根据进程名称(如: boss.exe) 结束其运行??
这个进程是电脑上任意进程名称,只要输入进程名称,按下结束就可以关闭它.谢谢!


------解决方案--------------------
查一下这些API ,或许可以实现这个要求:
Function Ulong CreateToolhelp32Snapshot(Ulong dwFlags,Ulong th32ProcessID) Library "Kernel32.dll"
Function Boolean CloseHandle(Ulong hObject) Library "Kernel32.dll"
Function Boolean Process32First(Ulong hSnapshot, Ref PROCESSENTRY32 lppe) Library "Kernel32.dll" alias for "Process32First;Ansi"
Function Boolean Process32Next(Ulong hSnapshot, Ref PROCESSENTRY32 lppe) Library "Kernel32.dll" alias for "Process32Next;Ansi"
Function Ulong OpenProcess(Ulong dwDesiredAccess,Boolean bInheritHandle,Ulong dwProcessId) Library "Kernel32.dll"
Function Boolean TerminateProcess(Ulong hProcess,Ulong uExitCode) Library "Kernel32.dll"
------解决方案--------------------
//查找进程
Function Long CreateToolhelp32Snapshot(Long Flags, Long ProcessId) Library "kernel32.dll"
Function Integer Process32First(ULong Snapshot, Ref s_Process Process) Library "kernel32.dll" //ALIAS FOR "Process32First;ansi" 
Function Integer Process32Next(ULong Snapshot, Ref s_Process Process) Library "kernel32.dll" //ALIAS FOR "Process32Next;ansi" 
//结束进程
Function ULong TerminateProcess(ULong hProcess, ULong uExitCode) Library "kernel32.dll"
Function ULong OpenProcess(ULong dwDesiredAccess, ULong bInheritHandle, ULong dwProcessId) Library "kernel32.dll"


type s_process from structure
unsignedlong structsize
unsignedlong usage
unsignedlong processid
unsignedlong defaultheapid
unsignedlong moduleid
unsignedlong threads
unsignedlong parentprocessid
unsignedlong classbase
unsignedlong flags
character filename[256]
end type


//--------------------------------
// 描述:枚举进程并返回指定进程号PID 
//--------------------------------
// 参数:
// value string as_exename 可执行文件名称
//--------------------------------
// 返回: unsignedlong
//--------------------------------
// 作者: ruic 日期: 2011.06.02
//====================================================================

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
//创建快照失败 296是windows决定的
lst_Process.StructSize = 296

IF Process32First(ln_Snapshot,lst_Process) = 0 THEN RETURN 0

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

DO WHILE 1 = 1

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]) = as_exename THEN
//取得进程号 
ul_PID = lst_Process.ProcessID
//MessageBox(string(ul_PID),ls_FileName[ln_Count]) 
END IF
LOOP

RETURN ul_PID




//====================================================================
// 事件: nvo_rc_function.of_killprocess()
//--------------------------------
// 描述:根据进程号结束一个进程
//--------------------------------
// 参数:
// value unsignedlong ul_pid 进程号
//--------------------------------
// 返回: (none)
//--------------------------------
// 作者: ruic 日期: 2011.06.02
//====================================================================
  相关解决方案