【发布时间】:2016-02-05 17:00:10
【问题描述】:
我正在创建此代码以帮助我开发的更大流程。这篇文章将帮助我自动化它。假设您已经打开了至少 2 个 ie 窗口,下面的第一部分查找第一个打开的时间并将其设置为变量“strReturn”。这基本上是删除冒号的时间。我删除了冒号以便更轻松地进行数字比较。因为它似乎按顺序循环遍历这些,所以我让它立即退出 FOR 语句,因为我只关心第一个。
然后,第二个语句,它是为杀死进程的所有实例而构建的,我试图修改为只杀死与变量中的时间匹配的那个。但是,它什么也没做...我确定我执行不正确。我已经加粗了我从原始版本中修改的部分......好吧,尝试加粗 - 你会看到星号......哈哈。清楚我哪里出错了吗? TIA
'=============================================================
'Finds time first instance of iexplore process was started
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'iexplore.exe'")
For Each objProcess in colProcessList
dtmStartTime = objProcess.CreationDate
strReturn = replace(split(WMIDateStringToDate(dtmStartTime), " ")(1), ":", "")
wscript.echo strReturn
exit for
Next
'.............................................................
Function WMIDateStringToDate(dtmStart)
WMIDateStringToDate = CDate(Mid(dtmStart, 5, 2) & "/" & _
Mid(dtmStart, 7, 2) & "/" & Left(dtmStart, 4) _
& " " & Mid (dtmStart, 9, 2) & ":" & _
Mid(dtmStart, 11, 2) & ":" & Mid(dtmStart, _
13, 2))
End Function
'=============================================================
'(Supposed to) Kill every instance of iexplore.exe except the instance matching the start time in strReturn variable (1st instance).
KillProc "iexplore.exe"
Sub KillProc( myProcess )
Dim blnRunning, colProcesses, objProcess
blnRunning = False
Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery( "Select * From Win32_Process", , 48 )
For Each objProcess in colProcesses
If LCase( myProcess ) = LCase( objProcess.Name ) **and strReturn < replace(split(WMIDateStringToDate(dtmStartTime), " ")(1), ":", "")** Then 'Confirm process is running
blnRunning = True 'Get exact case for the actual process name
myProcess = objProcess.Name 'Kill process
objProcess.Terminate()
End If
Next
If blnRunning Then
Do Until Not blnRunning
Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery( "Select * From Win32_Process Where Name = '"& myProcess & "'" )
WScript.Sleep 1000 'Wait 1 second
If colProcesses.Count = **1** Then 'Exit loop (changed from 0 to 1)
blnRunning = False
End If
Loop
End If
End Sub
【问题讨论】: