找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16085|回复: 3

[问题求助] [已解决]vbs后台一直循环2秒监控。如果发现u盘插入,就弹出我的电脑。如何实现?

[复制链接]
发表于 2015-1-21 11:41:47 | 显示全部楼层 |阅读模式
本帖最后由 ygqiang 于 2015-1-21 18:33 编辑

[已解决]vbs后台一直循环2秒监控。如果发现u盘插入,就弹出我的电脑。如何实现?
如果发现有重复标题的文件夹窗口,就自动关闭(只保留1个文件夹窗口)
  1. '关闭重复窗口、u盘插入-自动打开我的电脑
  2. '
  3. '后台一直循环2秒监控。
  4. '如果发现u盘插入,就弹出我的电脑
  5. '如果发现有重复标题的文件夹窗口,就自动关闭(只保留1个文件夹窗口)

  6. Do
  7.   Main
  8.   WScript.Sleep 2000
  9. Loop

  10. Sub Main()

  11.   Dim wso, fso
  12.   Set wso = CreateObject("WScript.Shell")
  13.   Set fso = CreateObject("Scripting.FileSystemObject")
  14.   
  15.   '监控u盘/usb移动硬盘,是否插入
  16.   
  17.   '如果u盘插入-自动打开我的电脑
  18.   wso.Run "Explorer.exe /n,"

  19.   '关闭重复的文件窗口
  20.   Call CloseRepeatFolderWindow()
  21.   
  22.   Set wso = NoThing
  23.   
  24. End Sub

  25. '监控u盘/usb移动硬盘,是否插入
  26. Sub Monitor-U()

  27. End Sub

  28. ' VBS关闭重复的文件夹窗口 By Crlf bathome.net
  29. Sub CloseRepeatFolderWindow()
  30.   On Error Resume Next
  31.   Dim Shell, Dict, Wins
  32.   Set Shell = CreateObject("Shell.Application")
  33.   Set Dict = CreateObject("Scripting.Dictionary")
  34.   Set Wins = Shell.Windows
  35.   For i=Wins.Count-1 To 0 step -1
  36.     If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then
  37.       If Dict.Exists(Wins(i).LocationURL) Then
  38.         Wins(i).Quit
  39.       Else
  40.         Dict.Add Wins(i).LocationURL,True
  41.       End If
  42.     End If
  43.   Next
  44. End Sub

  45. '检测vbs代码是否重复运行
  46. Function AppPrevInstance()
  47.   AppPrevInstance=False
  48.   Dim objItem, i
  49.   For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
  50.     IF LCase(objItem.Name)=LCase(Right(WScript.FullName,11)) Then
  51.       IF InStr(1,objItem.CommandLine,WScript.ScriptFullName,vbTextCompare) > 0 Then i=i+1
  52.     End IF
  53.   Next
  54.   If i>1 Then AppPrevInstance=True
  55. End Function
复制代码
 楼主| 发表于 2015-1-21 11:44:58 | 显示全部楼层
  1. '监控
  2. Sub MonitorWindowTitle(ByVal strWindowTitle)
  3.   Dim wso, objWord, objTasks
  4.   Set wso = CreateObject("Wscript.Shell")
  5.   Set objWord = CreateObject("word.Application")
  6.   Set objTasks = objWord.Tasks
  7.   Do While objTasks.Exists(strWindowTitle) = False
  8.     WScript.sleep 200    ' 延时 0.2 秒
  9.     Call CloseRepeatFolderWindow()
  10.     '检查是否重复运行
  11.     If AppPrevInstance() = True Then
  12.       Call wso.Popup("该程序不允许重复运行!" & vbCrLf & String(75," ") & _
  13.           vbCrLf & "程序将在 3 秒后全部退出 ...", 3, WScript.ScriptName, vbOKOnly+vbCritical)
  14.       '直接退出程序
  15.       objWord.Quit
  16.       WScript.Quit(2)
  17.     End If
  18.   Loop
  19. End Sub
复制代码
 楼主| 发表于 2015-1-21 18:33:23 | 显示全部楼层
[已解决]最终vbs代码如下:
 楼主| 发表于 2015-1-21 18:35:40 | 显示全部楼层
  1. '后台一直循环2秒监控。
  2. '1、如果发现u盘插入,就弹出我的电脑(每当u盘插入1次,就弹出1次我的电脑,而且只允许弹出1次。下次重新插入u盘,再弹出1次我的电脑)
  3. '2、如果发现有重复标题的文件夹窗口,就自动关闭(只保留1个文件夹窗口)
  4. '上面2个功能是各自独立的、互相之间没有联系的。

  5.   Dim wso, objWord
  6.   Set wso = CreateObject("Wscript.Shell")
  7.   Set objWord = CreateObject("word.Application")

  8.     If AppPrevInstance() = True Then
  9.       Call wso.Popup("该程序不允许重复运行!" & vbCrLf & String(75," ") & _
  10.           vbCrLf & "程序将在 3 秒后全部退出 ...", 3, WScript.ScriptName, vbOKOnly+vbCritical)
  11.       '直接退出程序
  12.       objWord.Quit
  13.       WScript.Quit(2)
  14.     End If


  15. dim TmpDiskNum
  16. TmpDiskNum=0
  17. Do
  18.         Call ufind()
  19.         WScript.Sleep 2000
  20.         '关闭重复的文件窗口
  21.         Call CloseRepeatFolderWindow()
  22. Loop

  23. '监控u盘/usb移动硬盘,是否插入
  24. Sub ufind()
  25. On Error Resume Next
  26.         dim a
  27.         Set fso = CreateObject("scripting.filesystemobject")
  28.         Set Disks = fso.Drives
  29.         dim DiskNumber
  30.         DiskNumber = 0
  31.        
  32.         For Each Disk In Disks
  33.                 If Disk.IsReady And Disk.DriveType = 1 Then
  34.                
  35.                         DiskNumber = DiskNumber + 1
  36.                        
  37.                         'MsgBox "发现U盘" & Disk.DriveLetter & ":\!", 4096 + 64, "温馨提示"
  38.                         '如果u盘插入-自动打开我的电脑
  39.                         D = Disk.DriveLetter
  40.                        
  41.                         if DiskNumber > TmpDiskNum then '如果是检测到 但是没有开启过 择开启
  42.                                 dim wso
  43.                                 Set wso = CreateObject("WScript.Shell")
  44.                                 wso.Run "Explorer.exe /n,"
  45.                         end if
  46.                        
  47.                         '关闭重复的文件窗口
  48.                         Call CloseRepeatFolderWindow()
  49.                         WScript.Sleep 1000
  50.                         Set wso = NoThing
  51.                         a = true
  52.                 End If
  53.         Next
  54.        
  55.         TmpDiskNum = DiskNumber
  56.        
  57.         if a = false then
  58.                 'U盘不存在
  59.                 'msgbox "没有发现U盘,请检查U盘是否插好",,"温馨提示"
  60.         End if
  61.        
  62. End Sub


  63. '检测vbs代码是否重复运行
  64. Function AppPrevInstance()
  65.   AppPrevInstance=False
  66.   Dim objItem, i
  67.   For Each objItem in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
  68.     IF LCase(objItem.Name)=LCase(Right(WScript.FullName,11)) Then
  69.       IF InStr(1,objItem.CommandLine,WScript.ScriptFullName,vbTextCompare) > 0 Then i=i+1
  70.     End IF
  71.   Next
  72.   If i>1 Then AppPrevInstance=True
  73. End Function



  74. 'VBS关闭重复的文件夹窗口 By Crlf bathome.net
  75. Sub CloseRepeatFolderWindow()
  76.   On Error Resume Next
  77.   Dim Shell, Dict, Wins
  78.   Set Shell = CreateObject("Shell.Application")
  79.   Set Dict = CreateObject("Scripting.Dictionary")
  80.   Set Wins = Shell.Windows
  81.   For i=Wins.Count-1 To 0 step -1
  82.     If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then
  83.       If Dict.Exists(Wins(i).LocationURL) Then
  84.         Wins(i).Quit
  85.       Else
  86.         Dict.Add Wins(i).LocationURL,True
  87.       End If
  88.     End If
  89.   Next
  90. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:18 , Processed in 0.015327 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表