当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

PB 终止windows运行的程序运行

admin6个月前 (11-28)PowerBuilder2350 修订时间:2024-11-28 08:43:58

将以下内容保存为本地文件nvo_kill_process.sru , 然后导入pbl中

$PBExportHeader$nvo_kill_process.sru
forward
global type nvo_kill_process from nonvisualobject
end type
type s_process from structure within nvo_kill_process
end type
end forward

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[200]
end type

global type nvo_kill_process from nonvisualobject autoinstantiate
end type

type prototypes

Function Long GetCurrentProcessId() 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" 

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

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

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


end prototypes

forward prototypes

public function integer of_kill_process (string as_pro)
end prototypes

public function integer of_kill_process (string as_pro);s_Process lst_Process //进程结构 
String ls_FileName[],ls_CurExeName //最多100个进程,可改进 
ulong ln_ProcessID,ln_Snapshot,ln_Circle,ln_Count //,ln_SameCount
string ls_Kill_File
Long ll_PID,ll_PID2
IF as_pro='' OR isnull(as_pro) Then Return 1
ln_ProcessID = GetCurrentProcessId() //取当前进程的ID 
if IsNull(ln_ProcessID) or ln_ProcessID<1 then return -1 //出错则返回 
ln_Snapshot = CreateToolhelp32Snapshot(2,0) //在堆上创建进程快照 
if (ln_Snapshot<1) then return -1 //出错则返回 
lst_Process.StructSize = 296 //Win32api的Process结构大小
if Process32First(ln_Snapshot,lst_Process)=0 then 
	return -1 //取第一个进程失败则返回 
End IF
ls_Kill_File = lst_Process.FileName
IF pos(lower(as_pro),lower(ls_Kill_File))>0 Then			
	ll_pid=Long(lst_process.processid)		
	ll_pid2 = Long(OpenProcess(1,0,ll_PID))//使该进程可读写 	
	TerminateProcess(ll_PID2,1) //Kill Process
End IF
if lst_Process.ProcessID=ln_ProcessID then //如果为当前进程,不允许删除
	ls_CurExeName=lst_Process.FileName 
END IF
do while true 	//循环取列举的进程名称	
	if Process32Next(ln_Snapshot,lst_Process)=0 then exit //列举完毕 		
	IF lst_Process.ProcessID=ln_ProcessID Then continue  //如果是当前进程.不执行下述杀除操作.	
	ls_Kill_File = lst_Process.FileName	
	IF pos(lower(as_pro),lower(ls_Kill_File))>0 Then		
		ll_pid=Long(lst_process.processid)	
		ll_pid2 = Long(OpenProcess(1,0,ll_PID))//使该进程可读写 	
		TerminateProcess(ll_PID2,1) //Kill Process	
	End IF
loop 
Return 1
end function

on nvo_kill_process.create

call super::create

TriggerEvent( this, "constructor" )

end on

on nvo_kill_process.destroy

TriggerEvent( this, "destructor" )

call super::destroy

end on

使用方式

nvo_kill_process ln
ln.of_kill_process("abc.exe")

nvo_kill_process

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=451

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。