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

[问题求助] [已解决]如何在监测到u盘插入时,只打开1次“我的电脑”?

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

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

  4. Do
  5.   Call ufind()
  6.   WScript.Sleep 2000
  7. '关闭重复的文件窗口
  8.   Call CloseRepeatFolderWindow()
  9. Loop


  10. '监控u盘/usb移动硬盘,是否插入
  11. Sub ufind()
  12. dim a
  13. Set wso = CreateObject("WScript.Shell")
  14. Set fso = CreateObject("scripting.filesystemobject")
  15. Set Disks = fso.Drives
  16. For Each Disk In Disks
  17. If Disk.IsReady And Disk.DriveType = 1 Then
  18. 'MsgBox "发现U盘" & Disk.DriveLetter & ":\!", 4096 + 64, "温馨提示"
  19.   '如果u盘插入-自动打开我的电脑
  20.   wso.Run "Explorer.exe /n,"

  21.   '关闭重复的文件窗口
  22.   Call CloseRepeatFolderWindow()
  23. WScript.Sleep 1000
  24. Set wso = NoThing
  25. a=true
  26. End If
  27. Next
  28. if a =false then
  29. 'msgbox "没有发现U盘,请检查U盘是否插好",,"温馨提示"
  30. End if
  31. End Sub




  32. ' VBS关闭重复的文件夹窗口 By Crlf bathome.net
  33. Sub CloseRepeatFolderWindow()
  34.   On Error Resume Next
  35.   Dim Shell, Dict, Wins
  36.   Set Shell = CreateObject("Shell.Application")
  37.   Set Dict = CreateObject("Scripting.Dictionary")
  38.   Set Wins = Shell.Windows
  39.   For i=Wins.Count-1 To 0 step -1
  40.     If Instr(LCase(Wins(i).FullName),"\explorer.exe") Then
  41.       If Dict.Exists(Wins(i).LocationURL) Then
  42.         Wins(i).Quit
  43.       Else
  44.         Dict.Add Wins(i).LocationURL,True
  45.       End If
  46.     End If
  47.   Next
  48. End Sub
复制代码
 楼主| 发表于 2015-1-21 18:31:46 | 显示全部楼层
[已解决]最终vbs代码如下:
 楼主| 发表于 2015-1-21 18:34:00 | 显示全部楼层
  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:22 , Processed in 0.015900 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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