问:
您好,脚本专家!如何确定 USB 闪存驱动器的连接时间?
-- PS
答:
您好,PS。是的,我们承认:脚本专家确实懒惰。(尤其是在周五,这一天我们必须编写周一专栏。)可能有一种方法能够专门监视何时插入 USB 闪存驱动器。但是,我们找不到这种方法,至少不能马上找到它。不可否认,或许我们可能感觉有点困难。但是,我们还是决定编写一个脚本,用来告诉您任何可移动驱动器与计算机连接(或断开连接)的时间。我们希望这样可以为您提供一些附加价值和灵活性。
嗨,我们并没有说我们确实已为您提供了附加价值和灵活性。我们只是希望自己能够做到。
实际上,这是一个容易编写的小脚本。另外,它还有一个优点,就是能够在任意版本的 Windows 上运行。(最初,我们曾经不加思索地想要使用 Win32_VolumeChangeEvent 类来完成这项任务,但是,该特定 WMI 类只能在 Windows Server 2003 上找到。)
该段代码如下所示:
复制代码 代码如下:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery _
("Select * From __InstanceOperationEvent Within 10 Where " _
& "TargetInstance isa 'Win32_LogicalDisk'")
Do While True
Set objEvent = colEvents.NextEvent
If objEvent.TargetInstance.DriveType = 2 Then
Select Case objEvent.Path_.Class
Case "__InstanceCreationEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been added."
Case "__InstanceDeletionEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been removed."
End Select
End If
Loop
是的,它确实类似于几天前我们向您展示的屏幕保护程序监视脚本。我们希望重复使用同一个脚本为您提供附加价值和灵活性。(尽管这主要是确保我们能够节省精力。)
此脚本首先连接到本地计算机上的 WMI 服务。然后,我们发出以下查询:
Set colEvents = objWMIService.ExecNotificationQuery _
("Select * From __InstanceOperationEvent Within 10 Where " _
& "TargetInstance ISA 'Win32_LogicalDisk'")
这个查询起什么作用呢?嗯,这里我们要使用 ExecNotificationQuery 方法来订阅一组特定的 WMI 事件。什么 WMI 事件?(伙计,您的问题太多了,不是吗?)在本例中,我们希望在每次更改 Win32_LogicalDisk 类的实例时我们都会得到通知。正如您马上就能看到的,这些更改将包括:为该类创建一个新实例(即,添加一个可移动驱动器)和删除该类的一个现有实例(即,取下一个可移动驱动器)。Within 10 只是意味着每 10 秒钟我们将检查一次,看看是否有任何 Win32_LogicalDisk 实例发生了变化。
是的,这也意味着,如果您插入了一个可移动驱动器,然后在 6 秒钟后将其取出,那么我们可能永远也不会知道这件事。如果这是个问题,那么将 10 改为一个更小的数值。也可以将 10 改为一个更大的数值。例如,将 10 改为 60,就会每 60 秒钟进行一次检查,而不是每 10 秒钟。
明白了吗?我们甚至将附加价值和灵活性加入了代码自身中!
然后,我们建立一个不停运行的 Do 循环::
Do While True
接下来我们遇到了下面这行代码:
Set objEvent = colEvents.NextEvent
正如我们在上一专栏中说过的,这行代码将使脚本“中断”,意思就是脚本将暂停在此行,直到 Win32_LogicalDisk 类发生变化为止。这种变化(可以是创建了新实例或者是删除/修改了一个现有实例)将使脚本执行 Do 循环中的其余代码行。
好问题:剩下那些行代码究竟要做什么?嗯,首先看一下生成事件的驱动器是否恰好为可移动驱动器(至少就 WMI 而言,DriveType 为 2):
If objEvent.TargetInstance.DriveType = 2 Then
如果 DriveType 不是 2,那么我们只能再循环并等待下一个事件的发生。如果 DriveType 等于 2,那么我们使用 Select Case 块来确定发生的是哪种类型的事件。我们可通过确定事件的 Class 来执行此操作:
Select Case objEvent.Path_.Class
为什么这样做?有两个原因:首先,我们并不关心现有实例所发生的任何变化。例如,我们并不关心驱动器 C 上的可用驱动器空间是否发生了变化。如果您看一下 Select Case 代码,您就会注意到我们并不去费神检查 __InstanceModificationEvent。为什么不呢?因为我们并不关心 __InstanceModificationEvent(以某种方式修改现有实例时生成的事件的类型)。
其次,我们想要对 __InstanceCreationEvent(它会告诉我们已经创建了一个新驱动器)和 __InstanceDeletionEvent(它会告诉我们已经删除了一个现有驱动器)加以区别。通过确定事件类型,我们可以回显不同(并相应)的消息。例如,下面是用于确定是否创建了新驱动器的代码,如果是,则回显一条用于指示该结果的消息:
Case "__InstanceCreationEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been added."
下面是用于通知我们是否删除了现有驱动器的代码:
Case "__InstanceDeletionEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been removed."
回显相应的消息后,我们再循环并等待下一个事件的发生。默认情况下,该脚本将永远运行下去,或者至少在您终止该脚本进程之前会是这样。先发生哪种情况就先执行哪段代码。
正如我们说过的,这并不是您真正想要的,但是它确实能够达到这一目的。哦,不要忘了附加价值和灵活性。这应该足以弥补一个事实,那就是我们并没有真正回答您的问题。(我们希望我们已经解答了该问题的一个方面。不过这不是您的问题。)
您好,脚本专家!如何确定 USB 闪存驱动器的连接时间?
-- PS
答:
您好,PS。是的,我们承认:脚本专家确实懒惰。(尤其是在周五,这一天我们必须编写周一专栏。)可能有一种方法能够专门监视何时插入 USB 闪存驱动器。但是,我们找不到这种方法,至少不能马上找到它。不可否认,或许我们可能感觉有点困难。但是,我们还是决定编写一个脚本,用来告诉您任何可移动驱动器与计算机连接(或断开连接)的时间。我们希望这样可以为您提供一些附加价值和灵活性。
嗨,我们并没有说我们确实已为您提供了附加价值和灵活性。我们只是希望自己能够做到。
实际上,这是一个容易编写的小脚本。另外,它还有一个优点,就是能够在任意版本的 Windows 上运行。(最初,我们曾经不加思索地想要使用 Win32_VolumeChangeEvent 类来完成这项任务,但是,该特定 WMI 类只能在 Windows Server 2003 上找到。)
该段代码如下所示:
复制代码 代码如下:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colEvents = objWMIService.ExecNotificationQuery _
("Select * From __InstanceOperationEvent Within 10 Where " _
& "TargetInstance isa 'Win32_LogicalDisk'")
Do While True
Set objEvent = colEvents.NextEvent
If objEvent.TargetInstance.DriveType = 2 Then
Select Case objEvent.Path_.Class
Case "__InstanceCreationEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been added."
Case "__InstanceDeletionEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been removed."
End Select
End If
Loop
是的,它确实类似于几天前我们向您展示的屏幕保护程序监视脚本。我们希望重复使用同一个脚本为您提供附加价值和灵活性。(尽管这主要是确保我们能够节省精力。)
此脚本首先连接到本地计算机上的 WMI 服务。然后,我们发出以下查询:
Set colEvents = objWMIService.ExecNotificationQuery _
("Select * From __InstanceOperationEvent Within 10 Where " _
& "TargetInstance ISA 'Win32_LogicalDisk'")
这个查询起什么作用呢?嗯,这里我们要使用 ExecNotificationQuery 方法来订阅一组特定的 WMI 事件。什么 WMI 事件?(伙计,您的问题太多了,不是吗?)在本例中,我们希望在每次更改 Win32_LogicalDisk 类的实例时我们都会得到通知。正如您马上就能看到的,这些更改将包括:为该类创建一个新实例(即,添加一个可移动驱动器)和删除该类的一个现有实例(即,取下一个可移动驱动器)。Within 10 只是意味着每 10 秒钟我们将检查一次,看看是否有任何 Win32_LogicalDisk 实例发生了变化。
是的,这也意味着,如果您插入了一个可移动驱动器,然后在 6 秒钟后将其取出,那么我们可能永远也不会知道这件事。如果这是个问题,那么将 10 改为一个更小的数值。也可以将 10 改为一个更大的数值。例如,将 10 改为 60,就会每 60 秒钟进行一次检查,而不是每 10 秒钟。
明白了吗?我们甚至将附加价值和灵活性加入了代码自身中!
然后,我们建立一个不停运行的 Do 循环::
Do While True
接下来我们遇到了下面这行代码:
Set objEvent = colEvents.NextEvent
正如我们在上一专栏中说过的,这行代码将使脚本“中断”,意思就是脚本将暂停在此行,直到 Win32_LogicalDisk 类发生变化为止。这种变化(可以是创建了新实例或者是删除/修改了一个现有实例)将使脚本执行 Do 循环中的其余代码行。
好问题:剩下那些行代码究竟要做什么?嗯,首先看一下生成事件的驱动器是否恰好为可移动驱动器(至少就 WMI 而言,DriveType 为 2):
If objEvent.TargetInstance.DriveType = 2 Then
如果 DriveType 不是 2,那么我们只能再循环并等待下一个事件的发生。如果 DriveType 等于 2,那么我们使用 Select Case 块来确定发生的是哪种类型的事件。我们可通过确定事件的 Class 来执行此操作:
Select Case objEvent.Path_.Class
为什么这样做?有两个原因:首先,我们并不关心现有实例所发生的任何变化。例如,我们并不关心驱动器 C 上的可用驱动器空间是否发生了变化。如果您看一下 Select Case 代码,您就会注意到我们并不去费神检查 __InstanceModificationEvent。为什么不呢?因为我们并不关心 __InstanceModificationEvent(以某种方式修改现有实例时生成的事件的类型)。
其次,我们想要对 __InstanceCreationEvent(它会告诉我们已经创建了一个新驱动器)和 __InstanceDeletionEvent(它会告诉我们已经删除了一个现有驱动器)加以区别。通过确定事件类型,我们可以回显不同(并相应)的消息。例如,下面是用于确定是否创建了新驱动器的代码,如果是,则回显一条用于指示该结果的消息:
Case "__InstanceCreationEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been added."
下面是用于通知我们是否删除了现有驱动器的代码:
Case "__InstanceDeletionEvent"
Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
" has been removed."
回显相应的消息后,我们再循环并等待下一个事件的发生。默认情况下,该脚本将永远运行下去,或者至少在您终止该脚本进程之前会是这样。先发生哪种情况就先执行哪段代码。
正如我们说过的,这并不是您真正想要的,但是它确实能够达到这一目的。哦,不要忘了附加价值和灵活性。这应该足以弥补一个事实,那就是我们并没有真正回答您的问题。(我们希望我们已经解答了该问题的一个方面。不过这不是您的问题。)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“用vbs确定可移动驱动器的连接时间”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年12月22日
2024年12月22日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]