Автор Daniel Pineault
|
05.12.2020 г. |
Время от времени программы не завершаются должным образом. Поэтому может возникнуть необходимость прекратить процесс. Ниже представлена простая функция, в которую вы передаете полное имя процесса, который нужно завершить.
'--------------------------------------------------------------------------------------- ' Procedure : WMI_KillProcesse ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Forcibly kill all the instances of a specified process ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: Uses Late Binding, so none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sProcessName : Name of the process to kill ' sHost : Host computer to query, omit for the local PC ' ' Usage: ' ~~~~~~ ' Call WMI_KillProcesse("explorer.exe") ' Call WMI_KillProcesse("excel.exe") ' Call WMI_KillProcesse("calculator.exe") ' ' Revision History: ' Rev Date(yyyy-mm-dd) Description ' ************************************************************************************** ' 1 2015-05-28 Initial Release ' 2 2020-08-21 Added Proc Header ' Code updated ' Updated Error Handler ' Made it Option Explicit compliant '--------------------------------------------------------------------------------------- Public Function WMI_KillProcesse(sProcessName As String, Optional sHost As String = ".") As Boolean On Error GoTo Error_Handler Dim oWMI As Object 'WMI object to query about the PC's OS Dim sWMIQuery As String 'WMI Query Dim oCols As Object Dim oCol As Object Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sHost & "\root\cimv2") sWMIQuery = "SELECT Name FROM Win32_Process" Set oCols = oWMI.ExecQuery(sWMIQuery) For Each oCol In oCols If LCase(sProcessName) = LCase(oCol.Name) Then oCol.Terminate ' Kill this instances of the process End If Next oCol WMI_KillProcesse = True Error_Handler_Exit: On Error Resume Next Set oCol = Nothing Set oCols = Nothing Set oWMI = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: WMI_KillProcesse" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" Resume Error_Handler_Exit End Function Имейте в виду, что он закроет все экземпляры данного процесса. Допустим, у вас запущено 3 экземпляра Excel, и вы завершаете работу excel.exe, все три экземпляра будут остановлены.
Кроме того, этот метод представляет собой завершение процесса грубой силой, поэтому вам не будет предложено сохранить и несохраненную работу ... Это последний подход, обычно для зависших процессов.
Источник VBA – Kill a Process
Просмотров: 2446
Ваш коментарий будет первым | | |