[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. Const strWindowTitle = "Notepad++"   ' 监控的窗口标题
  2. Do
  3.   Main
  4.   WScript.Sleep 2000
  5. Loop
  6. Sub Main()
  7.   Dim wso, fso
  8.   Set wso = CreateObject("Wscript.Shell")
  9.   Set fso=CreateObject("Scripting.FileSystemObject")
  10.   
  11.   '检查是否重复运行
  12.   If AppPrevInstance() = True Then
  13.     Msgbox "该程序不允许重复运行!" & vbCrLf & String(75," "), vbOKOnly+vbCritical, WScript.ScriptName
  14.     '直接退出程序
  15.     WScript.Quit(2)
  16.   End If
  17.   
  18.   '一直检查窗口,直到指定窗口出现
  19.   Do While wso.AppActivate(strWindowTitle) = False
  20.     WScript.sleep 200    ' 延时 0.2 秒
  21.   Loop
  22.   
  23.   '激活窗口
  24.   Call WindowActive(strWindowTitle)
  25.   
  26.   '关闭窗口(发送 Alt + F4)
  27.   wso.SendKeys "(%{F4})"
  28.   
  29.   '打开我的电脑
  30.   wso.Run "Explorer.exe /n,"
  31.   '关闭重复的文件窗口
  32.   Call CloseRepeatFolderWindow()
  33.   
  34.   Set wso = NoThing
  35.   
  36. End Sub
  37. '一直检查窗口,直到指定窗口出现
  38. Sub MonitorWindowTitle(ByVal strWindowTitle)
  39.   Dim wso : Set wso = CreateObject("Wscript.Shell")
  40.   Do While wso.AppActivate(strWindowTitle) = False
  41.     WScript.sleep 200    ' 延时 0.2 秒
  42.   Loop
  43.   Set wso = NoThing
  44. End Sub
  45. '激活窗口
  46. Sub WindowActive(ByVal strWindowTitle)
  47.   Dim objWord, objTasks
  48.   Set objWord = CreateObject("word.Application")
  49.   Set objTasks = objWord.Tasks
  50.   If objTasks.Exists(strWindowTitle) Then
  51.     objTasks(strWindowTitle).Activate         '激活窗口
  52.     objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  53.   End If
  54.   objWord.Quit
  55. End Sub
  56. ' VBS关闭重复的文件夹窗口 By Crlf bathome.net
  57. Sub CloseRepeatFolderWindow()
  58.   On Error Resume Next
  59.   Dim Shell, Dict, Wins
  60.   Set Shell = CreateObject("Shell.Application")
  61.   Set Dict = CreateObject("Scripting.Dictionary")
  62.   Set Wins = Shell.Windows
  63.   For i=Wins.Count-1 To 0 step -1
  64.     If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then
  65.       If Dict.Exists(Wins(i).LocationURL) Then
  66.         Wins(i).Quit
  67.       Else
  68.         Dict.Add Wins(i).LocationURL,True
  69.       End If
  70.     End If
  71.   Next
  72. End Sub
  73. '检测是否重复运行
  74. Function AppPrevInstance()
  75.   AppPrevInstance=False
  76.   Dim objItem, i
  77.   For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
  78.     IF LCase(objItem.Name)=LCase(Right(WScript.FullName,11)) Then
  79.       IF InStr(1,objItem.CommandLine,WScript.ScriptFullName,vbTextCompare) > 0 Then i=i+1
  80.     End IF
  81.   Next
  82.   If i>1 Then AppPrevInstance=True
  83. End Function
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

版本2,更改了一些逻辑。
  1. Const strWindowTitle = "Notepad++"   ' 监控的窗口标题
  2. Do
  3.   Main
  4.   WScript.Sleep 2000
  5. Loop
  6. Sub Main()
  7.   Dim wso, fso
  8.   Set wso = CreateObject("WScript.Shell")
  9.   Set fso = CreateObject("Scripting.FileSystemObject")
  10.   
  11.   '监控并激活窗口
  12.   Call MonitorWindowTitle(strWindowTitle)
  13.   
  14.   '关闭窗口(发送 Alt + F4)
  15.   wso.SendKeys "(%{F4})"
  16.   
  17.   '打开我的电脑
  18.   wso.Run "Explorer.exe /n,"
  19.   '关闭重复的文件窗口
  20.   Call CloseRepeatFolderWindow()
  21.   
  22.   Set wso = NoThing
  23.   
  24. End Sub
  25. '监控并激活窗口
  26. Sub MonitorWindowTitle(ByVal strWindowTitle)
  27.   Dim wso, objWord, objTasks
  28.   Set wso = CreateObject("Wscript.Shell")
  29.   Set objWord = CreateObject("word.Application")
  30.   Set objTasks = objWord.Tasks
  31.   Do While objTasks.Exists(strWindowTitle) = False
  32.     WScript.sleep 200    ' 延时 0.2 秒
  33.     '检查是否重复运行
  34.     If AppPrevInstance() = True Then
  35.       Call wso.Popup("该程序不允许重复运行!" & vbCrLf & String(75," ") & _
  36.           vbCrLf & "程序将在 3 秒后全部退出 ...", 3, WScript.ScriptName, vbOKOnly+vbCritical)
  37.       '直接退出程序
  38.       objWord.Quit
  39.       WScript.Quit(2)
  40.     End If
  41.   Loop
  42.   Call wso.AppActivate(strWindowTitle)      '激活窗口
  43.   objTasks(strWindowTitle).Activate         '激活窗口
  44.   objTasks(strWindowTitle).WindowState = 0  '0平常模式、1最大化模式、2最小化模式
  45.   objWord.Quit
  46. End Sub
  47. ' VBS关闭重复的文件夹窗口 By Crlf bathome.net
  48. Sub CloseRepeatFolderWindow()
  49.   On Error Resume Next
  50.   Dim Shell, Dict, Wins
  51.   Set Shell = CreateObject("Shell.Application")
  52.   Set Dict = CreateObject("Scripting.Dictionary")
  53.   Set Wins = Shell.Windows
  54.   For i=Wins.Count-1 To 0 step -1
  55.     If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then
  56.       If Dict.Exists(Wins(i).LocationURL) Then
  57.         Wins(i).Quit
  58.       Else
  59.         Dict.Add Wins(i).LocationURL,True
  60.       End If
  61.     End If
  62.   Next
  63. End Sub
  64. '检测是否重复运行
  65. Function AppPrevInstance()
  66.   AppPrevInstance=False
  67.   Dim objItem, i
  68.   For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
  69.     IF LCase(objItem.Name)=LCase(Right(WScript.FullName,11)) Then
  70.       IF InStr(1,objItem.CommandLine,WScript.ScriptFullName,vbTextCompare) > 0 Then i=i+1
  71.     End IF
  72.   Next
  73.   If i>1 Then AppPrevInstance=True
  74. End Function
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

返回列表