首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

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

2012-06-14 
pb 如何结束其它程序的进程请教在线的大侠们,PB 如何根据进程名称(如: boss.exe) 结束其运行??这个进程是

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
unsignedlongstructsize
unsignedlongusage
unsignedlongprocessid
unsignedlongdefaultheapid
unsignedlongmoduleid
unsignedlongthreads
unsignedlongparentprocessid
unsignedlongclassbase
unsignedlongflags
characterfilename[256]
end type


//--------------------------------
// 描述:枚举进程并返回指定进程号PID 
//--------------------------------
// 参数:
// valuestringas_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()
//--------------------------------
// 描述:根据进程号结束一个进程
//--------------------------------
// 参数:
// valueunsignedlongul_pid进程号
//--------------------------------
// 返回: (none)
//--------------------------------
// 作者:ruic日期: 2011.06.02
//====================================================================



Int li_rc
ULong PROCESS_TERMINATE = 0001
ULong hwdprocess

//获取指定进程号的进程句柄 
hwdprocess = OpenProcess(PROCESS_TERMINATE,1,ul_PID)
//MessageBox("提示",string(hwdprocess)) 

//结束进程,成功返回非零 
li_rc = TerminateProcess(hwdprocess,0)
IF li_rc = 0 THEN
MessageBox("提示",'结束进程失败!')
END IF

热点排行