我需要大约杀死一个应用程序,所以我可以在我的数据库该应用程序的幻象用户(这不能关闭应用程序产生)。 手动,如果我们杀了从任务管理器应用程序,幻影用户将存在。 现在我需要在VB 6代码自动执行。 救命! 谢谢。
Answer 1:
有两种方式:1。发送WM_CLOSE到目标应用程序,如果它有一个窗口(隐藏/显示)。 任务管理器的“结束任务”使用此方法。 大多数应用程序的处理WM_CLOSE和正常终止。 2.使用了TerminateProcess APi可杀有力 - 任务管理器的“结束进程”使用此方法。 这个API强行终止进程。
一个例子可以在这里找到: http://www.vb-helper.com/howto_terminate_process.html
Answer 2:
用VB6.0 TASKKILL
Private Sub Command1_Click()
Shell "taskkill.exe /f /t /im Application.exe"
End Sub
Answer 3:
调用ShellExecute的与TASKKILL命令
TASKKILL [/ S系统[/ U的用户名[/ P [口令]]]] {[/ FI滤波器] [/ PID的ProcessID | / IM imagename]} [/ T] [/ F]
描述:此工具用于终止由进程ID(PID)或图像名的任务。
Answer 4:
Shell "taskkill.exe /f /t /im processname.exe"
这迫使( /f
)与图像名(进程的terminatation /im
processname.exe的),并且这是由它(启动所有的子进程/t
)。 您可能不需要所有这些交换机。 见taskkill
更多信息,命令的帮助(请在命令行中输入以下):
taskkill/?
Answer 5:
Option Explicit
Private Declare Function IsWindow Lib "user32" (ByVal hWnd 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Target As String
'---------------------------------------------------------------------------------------
' Creation Date : 24/10/2005 09:03
' Created By : Jason Bruwer
' Purpose : Returns the windows handle of a window if you know the name
' : E.g.
' Microsoft Word
' Microsoft Excel
' Microsoft PowerPoint
' Adobe Reader
' Updated By : [Initials] - [Date] - [Changes]
'---------------------------------------------------------------------------------------
Public Function GetWindowsHandle(WindowName As String, hWindow As Long) As Boolean
On Error GoTo Errors
' Get the target's window handle.
hWindow = FindWindow(vbNullString, WindowName)
If hWindow = 0 Then GoTo Cheers
GetWindowsHandle = True
Cheers:
Exit Function
Errors:
frmMain.LogErrorAcrossUsingRBT ("GetWindowsHandle")
GoTo Cheers
End Function
'---------------------------------------------------------------------------------------
' Creation Date : 24/10/2005 09:03
' Created By : Jason Bruwer
' Purpose : Enumerates all the currently open windows and searches for an application
' with the specified name.
' Updated By : [Initials] - [Date] - [Changes]
'---------------------------------------------------------------------------------------
Public Function TerminateTask(app_name As String) As Boolean
On Error GoTo Errors
Target = UCase(app_name)
EnumWindows AddressOf EnumCallback, 0
TerminateTask = True
Cheers:
Exit Function
Errors:
frmMain.LogErrorAcrossUsingRBT ("TerminateTask")
GoTo Cheers
End Function
'---------------------------------------------------------------------------------------
' Creation Date : 24/10/2005 09:04
' Created By : Jason Bruwer
' Purpose : Checks to see if this is the window we are looking for and then trys
' to kill the application
' Updated By : [Initials] - [Date] - [Changes]
'---------------------------------------------------------------------------------------
Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
Dim buf As String * 256
Dim title As String
Dim length As Long
' Get the window's title.
length = GetWindowText(app_hWnd, buf, Len(buf))
title = Left$(buf, length)
'If title <> "" Then Debug.Print title
' See if this is the target window.
If InStr(UCase(title), Target) <> 0 Then
' Kill the window.
If Not KillProcess(app_hWnd) Then Exit Function
End If
' Continue searching.
EnumCallback = 1
End Function
'---------------------------------------------------------------------------------------
' Creation Date : 24/10/2005 09:06
' Created By : Jason Bruwer
' Purpose : Trys to kill an application by using its windows handle
' Updated By : [Initials] - [Date] - [Changes]
'---------------------------------------------------------------------------------------
Public Function KillProcess(hWindow As Long) As Boolean
Dim RetrunValue As Long
Dim ProcessValue As Long
Dim ProcessValueID As Long
Dim ThreadID As Long
On Error GoTo Errors
If (IsWindow(hWindow) <> 0) Then
ThreadID = GetWindowThreadProcessId(hWindow, ProcessValueID)
If (ProcessValueID <> 0) Then
App.LogEvent "Warning...killing orphan process..."
ProcessValue = OpenProcess(PROCESS_ALL_ACCESS, CLng(0), ProcessValueID)
RetrunValue = TerminateProcess(ProcessValue, CLng(0))
CloseHandle ProcessValueID
End If
End If
KillProcess = True
Cheers:
Exit Function
Errors:
frmMain.LogErrorAcrossUsingRBT ("KillProcess")
GoTo Cheers
End Function
Answer 6:
卡尔·彼得森的VB6代码出色的归档具有高品质的示例代码和完整的解释同时使用WM_CLOSE和了TerminateProcess。 接受没有替代品!
一个缺陷可能会在很多的代码在那里看到的是,发送WM_CLOSE你有一个单一的窗口句柄是不够的-大多数应用程序包含多个窗口。 在Karl的代码实现的答案是:查找所有属于该应用程序中的顶级窗口和消息发送到每个。
文章来源: End Process from Task Manager using VB 6 Code