<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: отслеживание подключения устройств USB]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=752</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=752&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: отслеживание подключения устройств USB».]]></description>
		<lastBuildDate>Sat, 06 Oct 2007 15:19:17 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: отслеживание подключения устройств USB]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=5369#p5369</link>
			<description><![CDATA[<p>Скрипт отслеживает подключение и отключение устройств со сменным носителем и буквой диска больше &quot;С&quot;.<br />Без опроса дисковода А:.<br />Без использования WMI.<br /></p><div class="codebox"><pre><code>On Error Resume Next
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
colDrives = Split(&quot;D E F G H I J K L M N O P Q R S T U V W X Y Z&quot;)
Set dictDrives = CreateObject(&quot;Scripting.Dictionary&quot;)
For Each Drive In colDrives
    Set Drv = FSO.GetDrive(Drive &amp; &quot;:&quot;)
    If Err.Number Then
        dictDrives.Add Drive &amp; &quot;:&quot;, False
    Else
        If Drv.DriveType = 1 And Drv.IsReady Then
            dictDrives.Add Drive &amp; &quot;:&quot;, True
        Else
            dictDrives.Add Drive &amp; &quot;:&quot;, False
        End If
    End If
    Err.Clear
Next
&#039; Бесконечный цикл
While True
    For Each Drive In dictDrives.Keys
        Set Drv = FSO.GetDrive(Drive)
        If (Err.Number) Or (Drv.IsReady = False) Or (Drv.DriveType &lt;&gt; 1) Then
            Flag = False
        Else
            Flag = True
        End If
        Err.Clear
        Current = dictDrives.Item(Drive)
        If Current &lt;&gt; Flag Then
            If Current = False And Flag = True Then
                WScript.Echo &quot;Диск &quot; &amp; Drive &amp; &quot; был подключён.&quot;
                WScript.Echo &quot;FileSystem = &quot; &amp; Drv.FileSystem
                WScript.Echo &quot;FreeSpace = &quot; &amp; Drv.FreeSpace
                WScript.Echo &quot;TotalSize = &quot; &amp; Drv.TotalSize
                WScript.Echo &quot;SerialNumber = &quot; &amp; Drv.SerialNumber
                WScript.Echo &quot;VolumeName = &quot; &amp; Drv.VolumeName
            Else
                WScript.Echo &quot;Диск &quot; &amp; Drive &amp; &quot; был отключён.&quot;
            End If
            dictDrives.Item(Drive) = Flag
        End If
    Next
    WScript.Sleep 1000
Wend</code></pre></div><p>Примечание: для отслеживания конкретной флешки можно контролировать, например, VolumeName.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 06 Oct 2007 15:19:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=5369#p5369</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: отслеживание подключения устройств USB]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=5352#p5352</link>
			<description><![CDATA[<p>Автор идеи - <strong>Alexbootch</strong>.<br />Два варианта скрипта.<br /></p><div class="codebox"><pre><code>&#039; Пример сценария асинхронного отслеживания подключения устройств USB
Sub SINK_OnObjectReady(objReceivedEvent, objAsyncContext)
    Wscript.Echo &quot;Name: &quot; &amp; objReceivedEvent.TargetInstance.Name
    Wscript.Echo &quot;FileSystem: &quot; &amp; objReceivedEvent.TargetInstance.FileSystem
    Wscript.Echo &quot;FreeSpace: &quot; &amp; objReceivedEvent.TargetInstance.FreeSpace
    Wscript.Echo &quot;Size: &quot; &amp; objReceivedEvent.TargetInstance.Size
    Wscript.Echo &quot;VolumeName: &quot; &amp; objReceivedEvent.TargetInstance.VolumeName
    Wscript.Echo &quot;VolumeSerialNumber: &quot; &amp; objReceivedEvent.TargetInstance.VolumeSerialNumber
End Sub

strComputer = &quot;.&quot; 
Set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\CIMV2&quot;) 
Set MySink = WScript.CreateObject( _
    &quot;WbemScripting.SWbemSink&quot;,&quot;SINK_&quot;)

objWMIservice.ExecNotificationQueryAsync MySink, _
    &quot;SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE &quot; &amp; _
    &quot;TargetInstance ISA &#039;Win32_LogicalDisk&#039;&quot; &amp; _
    &quot; AND TargetInstance.DriveType = 2&quot;

While (True)
    Wscript.Sleep(1000)
Wend</code></pre></div><div class="codebox"><pre><code>&#039; Пример сценария синхронного отслеживания подключения устройств USB
strComputer = &quot;.&quot; 
Set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\CIMV2&quot;) 
Set objEvents = objWMIService.ExecNotificationQuery _
(&quot;SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE &quot; &amp; _
    &quot;TargetInstance ISA &#039;Win32_LogicalDisk&#039;&quot; &amp; _ 
    &quot; AND TargetInstance.DriveType = 2&quot;)

Do While(True)
    Set objReceivedEvent = objEvents.NextEvent
    Wscript.Echo &quot;Name: &quot; &amp; objReceivedEvent.TargetInstance.Name
    Wscript.Echo &quot;FileSystem: &quot; &amp; objReceivedEvent.TargetInstance.FileSystem
    Wscript.Echo &quot;FreeSpace: &quot; &amp; objReceivedEvent.TargetInstance.FreeSpace
    Wscript.Echo &quot;Size: &quot; &amp; objReceivedEvent.TargetInstance.Size
    Wscript.Echo &quot;VolumeName: &quot; &amp; objReceivedEvent.TargetInstance.VolumeName
    Wscript.Echo &quot;VolumeSerialNumber: &quot; &amp; objReceivedEvent.TargetInstance.VolumeSerialNumber
Loop</code></pre></div><p>Есть одна особенность: постоянно идёт опрос дисковода А:\. Причём опрос может продолжаться и после завершения скрипта, и даже после логоффа (замечено на WinXP SP2), проходя только после перезагрузки машины. Таким образом, на машинах с дисководом А:\ используйте с осторожностью.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Fri, 05 Oct 2007 13:15:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=5352#p5352</guid>
		</item>
	</channel>
</rss>
