yu2n 发表于 2015-1-4 12:55 
win7 64系统,用了下面的vbs代码。偶尔会遇到问题,会弹出窗口提示。然后就不能监控了。 | | | Const strWindowTitle = "Microsoft Windows" | | | | Do | | Main | | WScript.Sleep 2000 | | Loop | | | | Sub Main() | | | | Dim wso, fso | | Set wso = CreateObject("WScript.Shell") | | Set fso = CreateObject("Scripting.FileSystemObject") | | | | | | Call MonitorWindowTitle(strWindowTitle) | | | | | | wso.SendKeys "(%{F4})" | | | | | | wso.Run "Explorer.exe /n," | | | | | | Call CloseRepeatFolderWindow() | | | | Set wso = NoThing | | | | End Sub | | | | | | Sub MonitorWindowTitle(ByVal strWindowTitle) | | Dim wso, objWord, objTasks | | Set wso = CreateObject("Wscript.Shell") | | Set objWord = CreateObject("word.Application") | | Set objTasks = objWord.Tasks | | Do While objTasks.Exists(strWindowTitle) = False | | WScript.sleep 200 | | Call CloseRepeatFolderWindow() | | | | If AppPrevInstance() = True Then | | Call wso.Popup("该程序不允许重复运行!" & vbCrLf & String(75," ") & _ | | vbCrLf & "程序将在 3 秒后全部退出 ...", 3, WScript.ScriptName, vbOKOnly+vbCritical) | | | | objWord.Quit | | WScript.Quit(2) | | End If | | Loop | | Call wso.AppActivate(strWindowTitle) | | objTasks(strWindowTitle).Activate | | objTasks(strWindowTitle).WindowState = 0 | | objWord.Quit | | End Sub | | | | | | Sub CloseRepeatFolderWindow() | | On Error Resume Next | | Dim Shell, Dict, Wins | | Set Shell = CreateObject("Shell.Application") | | Set Dict = CreateObject("Scripting.Dictionary") | | Set Wins = Shell.Windows | | For i=Wins.Count-1 To 0 step -1 | | If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then | | If Dict.Exists(Wins(i).LocationURL) Then | | Wins(i).Quit | | Else | | Dict.Add Wins(i).LocationURL,True | | End If | | End If | | Next | | End Sub | | | | | | Function AppPrevInstance() | | AppPrevInstance=False | | Dim objItem, i | | For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_ | | IF LCase(objItem.Name)=LCase(Right(WScript.FullName,11)) Then | | IF InStr(1,objItem.CommandLine,WScript.ScriptFullName,vbTextCompare) > 0 Then i=i+1 | | End IF | | Next | | If i>1 Then AppPrevInstance=True | | End FunctionCOPY |
|