如何用VB做强制关闭其他程序??

作者&投稿:芒逸 (若有异议请与网页底部的电邮联系)
使用VB关闭其他程序~

'VB 终止指定进程 ,刷新托盘图标


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

Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Byte
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * 1024
End Type

Private Const WM_MOUSEMOVE = &H200

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
OsName As String
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
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 bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function UpdateWindow Lib "user32" Alias "UpdateWindow" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Sub KillExe(EXEName As String)
Dim my As PROCESSENTRY32
Dim hProcessHandle As Long
Dim success As Long
Dim l As Long


l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If l Then
my.dwSize = 1060
If (Process32First(l, my)) Then
Do
If UCase$(Right$(Left$(my.szExeFile, InStr(1, my.szExeFile, Chr$(0)) - 1), Len(EXEName))) = UCase$(EXEName) Then
hProcessHandle = OpenProcess(&H1F0FFF, True, my.th32ProcessID)
If hProcessHandle <> 0 Then success = TerminateProcess(hProcessHandle, ByVal 0&)
If success = 1 Then CloseHandle (hProcessHandle)
End If
Loop Until (Process32Next(l, my) < 1)
End If
CloseHandle l
End If

End Sub

Private Function GetSysTrayWnd() As Long

Dim Result As Long
Dim Ver As OSVERSIONINFO
Ver.dwOSVersionInfoSize = 148
GetVersionEx Ver

Result = FindWindow("Shell_TrayWnd", vbNullString)
Result = FindWindowEx(Result, 0, "TrayNotifyWnd", vbNullString)
If Ver.dwMajorVersion = 5 And Ver.dwMinorVersion > 0 Then Result = FindWindowEx(Result, 0, "SysPager", vbNullString)
If Ver.dwMajorVersion = 5 Then Result = FindWindowEx(Result, 0, "ToolbarWindow32", vbNullString)
GetSysTrayWnd = Result
End Function


Private Sub RefreshTrayIcon()

Dim hwndTrayToolBar As Long
Dim X, Y As Long
Dim rTrayToolBar As RECT
Dim pos As Long
hwndTrayToolBar = GetSysTrayWnd

GetClientRect hwndTrayToolBar, rTrayToolBar

For X = 1 To rTrayToolBar.Right - 1
For Y = 1 To rTrayToolBar.Bottom - 1
pos = (X And &HFFFF) + (Y And &HFFFF) * &H10000

PostMessage hwndTrayToolBar, WM_MOUSEMOVE, 0, pos

Next Y
Next X
End Sub

Private Sub Command1_Click()
Dim hShellTray As Long
Dim a As String
a = "c:\windows
otepad.exe"'以记事本为例
KillExe a

RefreshTrayIcon'刷新托盘图标
End Sub

如果已经在电脑上运行了,打开任务管理器中的应用程序点你要关闭的那个结束任务就可以了
如果是退出的方法一般 end 就可以

Option Explicit
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPheaplist = &H1
Private Const TH32CS_SNAPthread = &H4
Private Const TH32CS_SNAPmodule = &H8
Private Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
Private Const MAX_PATH As Integer = 260
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const PROCESS_CREATE_PROCESS = &H80
Private Const PROCESS_CREATE_THREAD = &H2
Private Const PROCESS_DUP_HANDLE = &H40
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_QUERY_LIMITED_INFORMATION = &H1000
Private Const PROCESS_SET_QUOTA = &H100
Private Const PROCESS_SET_INFORMATION = &H200
Private Const PROCESS_SUSPEND_RESUME = &H800
Private Const PROCESS_TERMINATE = &H1
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_VM_WRITE = &H20
Private Const SYNCHRONIZE = &H100000

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 * MAX_PATH
End Type

Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess 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 bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByValuExitCode As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Function GetTargetProcessID(ByVal lpProcess As String) As Long
Dim dwRet As Long
Dim hSnapShot As Long
Dim pe32 As PROCESSENTRY32
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0)
pe32.dwSize = LenB(pe32)
ProcessFirst hSnapShot, pe32
Do
If InStr(pe32.szExeFile, lpProcess) > 0 Then
dwRet = pe32.th32ProcessID
Exit Do
Else
pe32.szExeFile = String(MAX_PATH, 0)
End If
Loop While (ProcessNext(hSnapShot, pe32))
CloseHandle (hSnapShot)
GetTargetProcessID = dwRet
End Function

Private Function CloseTargetProcess(ByVal dwProcessID As Long) As Boolean
Dim hProcess As Long
Dim lpExitCode As Long
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessID)
If hProcess = 0 Then
CloseTargetProcess = False
Exit Function
End If
If GetExitCodeProcess(hProcess, lpExitCode) = 0 Then
CloseTargetProcess = False
Exit Function
End If
If TerminateProcess(hProcess, lpExitCode) = 0 Then
CloseTargetProcess = False
Else
CloseTargetProcess = True
End If
CloseHandle (hProcess)
End Function
Private Function CloseProcess(ProcessName As String)
On Error Resume Next
Dim ret As Long
ret = GetTargetProcessID(ProcessName)
If ret <> 0 Then
ret = CloseTargetProcess(ret)
End If
End Function

'调用
Call CloseProcess("123.exe") '这里的进程名必须一致. 大小写都要一样

'你不需要知道他的工作原理.这东西要是说的话可以出本书. 知道怎么用就行了

简单点说就是 根据镜像名 123.exe 得到进程的PID 然后发送结束命令.

如果是XP专业版以上的系统的话,直接最简单的方法
Shell "Taskkill.exe /im:123.exe"
就解决了

得到句柄 然后
sendmessage(hwnd,WM_CLOSE)

么那么严重,新手该研究API还是要研究的.


在vb6.0中如何关闭excel对象?
建议修改成这样:On Error GoTo err Dim XlsApp As Object Dim XlsSheet As Object Dim XlsBook As Object Set XlsApp = CreateObject("Excel.Application")Set XlsBook = XlsApp.Workbooks.Open(Path)XlsApp.DisplayAlerts = False XlsBook.Close '上面的代码出错就不执行他了 XlsApp.Quit '同上...

VB中文件操作的两种方式
Close:关闭文件 即释放文件的控制权 Line Input:以行为单位取得文件内容 以行为单位是指从当前位置开始到下一个换行符为止的内容 换行符是Chr( ) & Chr( )两个字节组成 VB中已定义了常量vbCrLf 可直接使用 要注意的是Line Input读取一行时会把行尾的换行符去掉 因此我们在读取每行内容时要记得补...

vb6.0 点击最大化最小化和关闭(有上角的)触发什么事件
Case vbFormControlMenu '点击窗体关闭按钮 'cancel=true 可以取消关闭窗体动作 Case Else '其它方式引起窗体关闭,还有其它常数,这里不列举了 End Select End Sub 通过窗体大小变化时判断窗体状态来确定哪个按钮被按下。Private Sub Form_Resize()Select Case Form1.WindowState Case vbNormal '还原按钮被...

VB.NET中关闭窗体代码,有的写me.close,有的只写end。请问,这两种代码...
me.close是关闭自身窗体,如果同时打开多个窗体,用me.close不能退出程序。end是一个强大的退出指令,可以关闭所有窗体,并释放所有已占用的资源(当然有一些限制。所以自己主动释放是最好的)。

vb open函数
O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则...

vb中关于exit sub问题
Private Sub Command1_Click()For i=0 to List1.ListCount-1 If List1.List(i)="me" Then List1.ListIndex=i Exit Sub End If MsgBox "你所找的项不存在!"Next i End Sub 利用For循环在一个列表控件List1中逐项查找"me",找到之后将List1的当前项设为匹配的那一项,如果找完整个列表...

vb的问题.大家帮帮忙,小弟谢过了!
在WinNT\/2K下则需要先调用CloseHandle关闭exe文件本身对应的IMAGE的句柄HANDLE[硬编码为4],然后调用 UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,并且解除了程序本身在内存的映射对象,最后就可以用DeleteFile删除自身啦!(注意:本方法不适用于WinXP!)WinNT\/2K下的代码如下[selfkill-nt.c]:include "...

在VB中如何使用BAT文件
set x = Createobject("Wscript.shell")x.run ("cmd \/c c:\\aa.bat")上面这个可以运行BAT文件,如果想要隐藏CMD窗口的话在后面加上,vbhide也就是 set x = Createobject("Wscript.shell")x.run ("cmd \/c c:\\aa.bat"),vbhide

《VB程序设计》
(1) 用Call语句调用Sub过程 (2)把过程名作为一个语句来用 】59.用VB程序代码建立一个数据连接(D:、DATA、BASE、STUDENT。MDB)?并打开连接。 【'这是直接用控件,在窗体是放一个DATA控件再直接用strSQL = "select * from Users order by id asc" Data1.DatabaseName = "D:\\DATABASE\\STUDENT.MDB" Data...

vb循环语句导致类似死机的状态,用do loop写的,为什么?
VB中 do...loop 循环本身没有结束循环条件,无论循环中代码执行何种运算,只要没有语法错误,它就一直执行,如果它的执行速度过高,则会一直占用CPU,导致死机等系统问题;对 do loop的应用,需要在循环内部添加结束循环的条件语句,除此之外,还需要为循环设置一定间隔时间,比如使用延时类“ ...

岑巩县18957553208: 在vb中怎样编一段可以强迫关闭其他正在运行的程序的代码
但利英佰: 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 ...

岑巩县18957553208: 怎样用vb程序来关闭其它应用程序
但利英佰: 你可以使用API函数FindWindow和PostMessage来寻找一个窗口并且关闭它.下面的范例演示如何关闭一个标题为"Calculator"的窗口.'下面的代码放到模块中 Declare ...

岑巩县18957553208: 如何用VB结束别的程序的进程? -
但利英佰: 哈哈 正好我电脑里有这个教程~Option Explicit '声明API Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32...

岑巩县18957553208: 如何用VB关闭其他应用程序 -
但利英佰: 可以调用api函数FindWindow,得到要关闭的程序的窗口句柄,然后用PostMessage或SendMessage发送WM_CLOSE消息.

岑巩县18957553208: 用VB写个(强制)结束进程程序 -
但利英佰: Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As LongPrivate Declare Function ProcessFirst Lib "kernel32" Alias "Process32...

岑巩县18957553208: 怎么用VB写出一段程序可以强行结束某个进程?? -
但利英佰: '你要关闭什么进程 '就写 'Call taskkill("进程名.exe") '注意大小写啊Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long Private Declare Function Process...

岑巩县18957553208: vb中如何写一段代码禁用一个程序
但利英佰: 给你个技巧:使另一个程序无法打开,只要执行一条语句:open “文件名(包括路径)” for input as #1 '就这样,不要用close关闭即可 要恢复能够打开程,只要写上:close #1 即可 简单吧!

岑巩县18957553208: (VB)怎么强制退出程序?? -
但利英佰: 用End命令即可.示例:Private Sub Command1_Click() End '关闭程序 End Sub 不管程序在执行什么,点下后,程序直接关闭.

岑巩县18957553208: 求用VB做一个能够关闭指定程序的程序,最好是代码? -
但利英佰: Dim TaskName TaskName="qq.exe" Set w=GetObject("winmgmts:") Set p=w.Execquery("select * from win32_process where name='" & TaskName & "'") For Each i In p i.Terminate Next '放到timer控件里

岑巩县18957553208: vb怎样结束指定进程 -
但利英佰: 我简单地提供提供三种方法: ------------------------------------------ 第一种:用cmd中的taskkill结束程序 shell ”cmd/c taskkill /f /im 你的进程名.exe“ ------------------------------------------ 第二种:(WIN7)以下的电脑可以使用,用ntsd结束程序 shell ”cmd/c...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网