显示进程、关闭进程

首先通过CreateToolhelp32Snapshot函数创建一个进程的快照,然后通过调用Process32First使用快照返回的句柄对进程进行遍历,相关的信息存放在PROCESSENTRY32结构类型的实例中,然后显示出来。

Winxp+vb6+sp6

代码如下:

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _

ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, _

ByVal uExitCode As Long) As Long

Private Type PROCESSENTRY32

dwSize As Long

cntUsage As Long

th32ProcessID As Long

th32DefaultHeapID As Long

th32ModuleID As Long

cntThreads As Long

th32ParentProcessID As Long

pcPriClassBase As Long

dwFlags As Long

szExeFile As String * 1024

End Type

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

'添加listview控件,3个按钮

'删除listview中选定的进程

Private Sub Command2_Click()

If MsgBox("你想删除 " & ListView1.SelectedItem.SubItems(2) & " 进程?", vbYesNo + vbQuestion) <> vbYes Then

Exit Sub

End If

Dim mProcID As Long

mProcID = OpenProcess(1&, -1&, ListView1.SelectedItem)

TerminateProcess mProcID, 0&

DoEvents

ListView1.ListItems.Remove (ListView1.SelectedItem.Index)

ListView1.Refresh

End Sub

'得到进程填充listview

Private Sub Command1_Click()

Dim my As PROCESSENTRY32

Dim l As Long

Dim l1 As Long

Dim mlistitem As ListItem

' List1.Clear

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then

my.dwSize = 1060

If (Process32First(l, my)) Then '遍历第一个进程

Do

Set mlistitem = ListView1.ListItems.Add(, , my.th32ProcessID)

mlistitem.SubItems(1) = my.th32ParentProcessID

mlistitem.SubItems(2) = my.szExeFile

Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False

End If

l1 = CloseHandle(l)

End If

End Sub

Private Sub Form_Load()

ListView1.ListItems.Clear

ListView1.ColumnHeaders.Clear

ListView1.FullRowSelect = True

ListView1.ColumnHeaders.Add , , "Process ID", 1500

ListView1.ColumnHeaders.Add , , "Process Parent ID", (1500)

ListView1.ColumnHeaders.Add , , "Name", (Me.Width - 3200)

ListView1.View = lvwReport

End Sub

'循环检测进程中是否有指定进程,如果有,关闭,如果没有,启动一个程序

Private Sub Command3_Click()

Dim my As PROCESSENTRY32

Dim l As Long

Dim l1 As Long

Dim flag As Boolean

Dim mName As String

Dim i As Integer

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then

my.dwSize = 1060

If (Process32First(l, my)) Then '遍历第一个进程

Do

i = InStr(1, my.szExeFile, Chr(0))

mName = LCase(Left(my.szExeFile, i - 1))

If mName = "winword.exe" Then

PID = my.th32ProcessID

pname = mName

MsgBox "找到word"

If MsgBox("你想删除 " & mName & " 进程?", vbYesNo + vbQuestion) <> vbYes Then

Exit Sub

End If

Dim mProcID As Long

mProcID = OpenProcess(1&, -1&, PID)

TerminateProcess mProcID, 0&

flag = True

Exit Sub

Else

flag = False

End If

Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False

End If

l1 = CloseHandle(l)

End If

If flag = False Then

MsgBox "没有找到word"

Shell "c:\Program Files\Microsoft Office\Office\WINWORD.EXE", vbNormalFocus

End If

End Sub

时间: 2024-08-27 07:54:38

显示进程、关闭进程的相关文章

IE8浏览器进程关闭延迟

我们在Windows XP中使用IE8时,当在一个窗口中浏览网页却发现在任务管理器中有多个iexplore.exe 的进程,而且在关闭选项卡后并不会自动关闭该进程,这就导致了该进程顽固占用着系统资源的故障(如下图所示).这其实不能算是故障错误之类的,而是IE8的新特性.IE8设计了一个备份iexplore.exe的进程,使浏览的选项卡崩溃时不会导致其他选项卡崩溃而退出,而是可以继续正常浏览网页. 但是对于系统资源紧张的用户来说,这一功能可能会让他们的电脑内存捉襟见肘,所以我们可以通过注册表设置来

WinXP系统ZhuDongFangYu.exe进程关闭方法

  WinXP系统ZhuDongFangYu.exe进程关闭方法.不少小伙伴在使用XP系统的时候,发现在系统内有一个ZhuDongFangYu.exe的进程,但是完全不懂这是什么进程.其实这是360安全卫士的进程,只要开启360安全卫士就会出现的进程了.如果想要结束这个进程的话,又要如何结束呢?下面小编就来告诉你. 方法步骤: 1.即便是在任务管理器上把这个进程关闭了,但开机的时候还是会提示. ZhuDongFangYu.exe进程关闭 2.首先点击桌面开始菜单. 开始菜单 3.点击桌面开始菜单

Shell 查找和关闭进程

首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:   # kill -pid   注释:标准的kill命令通常都能达到目的.终止有问题的进程,并把进程的资源释放给系统.然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源.为了防止这些所谓的"僵尸进程",应确保在杀死父进程之前,先杀死其所有的子进程.   确定要杀死进程的PID或PPID   # ps -ef | grep httpd   以优雅的方式结束进程   # kill -l PID   -

.net开发的一个接口程序,debug里的EXE执行时不显示界面,进程里有

问题描述 .net开发的一个接口程序,debug里的EXE执行时不显示界面,进程里有 .net开发的一个接口程序,debug里的EXE执行时不显示界面,进程里有,换其他电脑可行,就有一台电脑不行,这台电脑其他程序可以打开,winform架构 解决方案 是不是又死循环在里面,界面被卡死,你在初始化那里下个断点看看

c++-VS操作word,往文档中写入如几万条的数据后,保存然后释放资源关闭进程中,会出现进程未退出

问题描述 VS操作word,往文档中写入如几万条的数据后,保存然后释放资源关闭进程中,会出现进程未退出 VS操作word,往文档中写入如几万条的数据后,保存word,然后释放资源关闭winword.exe过程中,会出现winWord.exe未退出(数据量不大时操作是正常的),请教下,这有可能是什么原因,可否有方法解决?下列代码:void CWord::CloseApp(){ m_wdTable.ReleaseDispatch(); m_wdRange.ReleaseDispatch(); m_w

winform-C#关闭进程,如何判断系统是否正在运行此进程

问题描述 C#关闭进程,如何判断系统是否正在运行此进程 准备用C#关闭某进程,比如explorer进程,如何判断系统是否正在运行此进程,从而避免因为系统不存在此进程而报错? 用的是这个方法,但是如果系统中未运行该进程,就会报错 string ProcessName = ""explorer""; Process[] MyProcess = Process.GetProcessesByName(ProcessName); MyProcess[0].Kill(); 解决

为应用程序池 &#039;DefaultAppPool&#039; 提供服务的进程关闭时间超过了限制_win服务器

解决方法如下: Internet 信息服务(IIS)管理器->应用程序池->DefaultAppPool->右击属性 一.回收 1.回收工作进程(分钟):选中,值为1740 2.回收工作进程(请求数目):不选(原先设置为35000) 3.在下列时间回收工作进程:不填 4.消耗太多内存时回收工作进程:全不选.(2.3.4项可能避免了在访问量高的时候强制回收进程可能引发的服务器响应问题,导致iis假死不响应) 二.性能 只选中空闲超时20分钟.其他都不选.WEB园最大工作进程数为1(默认).

为应用程序池 DefaultAppPool 提供服务的进程关闭时间超过了限制_win服务器

为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制 服务器经常产生"应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制.进程 ID 是 '2068'."的错误,导致iis处于假死状态,经了解是IIS应用程序池的设置问题.解决方法如下: Internet 信息服务(IIS)管理器->应用程序池->DefaultAppPool->右击属性 一.回收 1.回收工作进程(分钟):选中,值为1740 2.回收工作进程(请

iOS中:发起语音/视频通话后,发起方断线/飞行模式/关闭进程,没有触发错误回调

问题描述 双方都在线,发起方发起语音通话/视频通话,接收方收到请求,但是暂不接通.此时发起方开启飞行模式/断网/杀进程等操作,接收方没有收到任何回调,仍然可存在于待接通的界面.接收方存在于待接通界面,在发起方已经不在线的情况下,仍然可以接通对话,并且对话仍然会存在连接.另外,在已经接通的对话中,一方进行掉线/杀进程/开飞行模式,没有回调,对话仍然继续.期望:当发起方/接收方一方由于关闭进程/掉线/飞行模式时,能够向另一方发起回调. 以上问题在Demo上能够重现. 解决方案 这个目前是这样的.以后

怎么在不关闭进程的情况下 清除内存中的sessionid

问题描述 怎么在不关闭进程的情况下清除内存中的sessionid 解决方案 解决方案二:Session.Clear();解决方案三:引用1楼return_false的回复: Session.Clear(); 清除客户端的SessionID不是服务端