<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Ожидание подключения USB накопителей]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3078&amp;type=atom" />
	<updated>2015-05-31T00:35:30Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=3078</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94270#p94270" />
			<content type="html"><![CDATA[<p>Пож-та. С комстрокой, я надеюсь, проблем не будет? <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>cmd /c &gt;C:\Test.txt &amp; for %# in (&lt;служба1&gt; &lt;служба2&gt; &lt;служба3&gt; &lt;служба4&gt;) do net stop %# &amp; net start %#</code></pre></div><p></p><p>Можно и на vbs:<br /></p><div class="codebox"><pre><code>CreateObject(&quot;Scripting.FileSystemObject&quot;).CreateTextFile(&quot;C:\Test.txt&quot;)
With CreateObject(&quot;Shell.Application&quot;)
  For Each Name in Split(&quot;&lt;служба1&gt; &lt;служба2&gt; &lt;служба3&gt; &lt;служба4&gt;&quot;)
    If .CanStartStopService(Name)
      If .IsServiceRunning(Name) Then .ServiceStop(Name, False)
      .ServiceStart(Name, False)
    End If
  Next
End With</code></pre></div><p>Ну, а удаление - вообще банальность: <em>del C:\Test.txt</em>. Опция скрытия в программах предусмотрена, если что.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-05-31T00:35:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94270#p94270</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94269#p94269" />
			<content type="html"><![CDATA[<p>Flasher, спасибо..</p>]]></content>
			<author>
				<name><![CDATA[padloyd]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33095</uri>
			</author>
			<updated>2015-05-31T00:08:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94269#p94269</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94268#p94268" />
			<content type="html"><![CDATA[<p><strong>padloyd</strong><br />Вообще-то тут про vbs. Использовать его в качестве резидента не всегда хорошо. Для данной задачи лучше применять спецпрограммы c возможностью глобального автозапуска - USB Safely Remove и Zentimo xStorage Manager.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-05-30T23:38:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94268#p94268</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94266#p94266" />
			<content type="html"><![CDATA[<p>здравствуйте, помогите пожалуйста, скрипт отличный.. работает... можно ли его доработать немного.. я в программировании вообще не разбираюсь, можно ли сделать чтобы при подключении флешки с буквой диска Z и не вылезали окна а создавался любой текстовый фаил скажем в корне диска С и запускался батник (в идеале нужно перезапустить несколько служб в win7), а при отключении фаил удалялся. заранее спасибо за ответ.</p>]]></content>
			<author>
				<name><![CDATA[padloyd]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33095</uri>
			</author>
			<updated>2015-05-30T19:27:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94266#p94266</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44730#p44730" />
			<content type="html"><![CDATA[<p><strong>prefiosa</strong>, камеру найти не смог. Так что, помочь, увы, не смогу.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-02-02T11:14:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44730#p44730</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44666#p44666" />
			<content type="html"><![CDATA[<p>Если это может помочь,твой скрипт (пост 2009-05-03 13:48:57) работает с USB-камеры,определяет (сообщает), когда включенa или выключенa камера USB.<br />Я хочу, чтобы в дополнение после запуска скрипта,он проверил-Есть USB-камера или нет, и если нет, то запустить Блокнота.</p>]]></content>
			<author>
				<name><![CDATA[prefiosa]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26701</uri>
			</author>
			<updated>2011-01-31T12:20:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44666#p44666</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44653#p44653" />
			<content type="html"><![CDATA[<p>Ясно. Подумаем. Осталось где-то найти камеру.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-01-31T10:04:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44653#p44653</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44647#p44647" />
			<content type="html"><![CDATA[<p>Может быть, я не могу объяснить хорошо.Я хотел, когда ничего не включено в USB, тогда запустить блокнот.Вот так:<br /></p><div class="codebox"><pre><code>If GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;).ExecQuery( _
    &quot;SELECT * FROM Win32_DiskDrive WHERE InterfaceType = &#039;USB&#039;&quot; _
    ).Count = 0 Then</code></pre></div><p>Это работает только тогда, когда включен диск с интерфейсом USB.<br />Но проблема сейчас в том, что скрипт не работает, если в USB включена камера.<br />Как это сделать что бы скрипт работал, когда включена USB-камера</p>]]></content>
			<author>
				<name><![CDATA[prefiosa]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26701</uri>
			</author>
			<updated>2011-01-31T09:06:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44647#p44647</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44632#p44632" />
			<content type="html"><![CDATA[<p>Если под <a href="http://forum.script-coding.com/viewtopic.php?pid=44602#p44602">что-либо</a> понимать съёмные USB диски, то примерно так:<br /></p><div class="codebox"><pre><code>If GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;).ExecQuery( _
    &quot;SELECT * FROM Win32_DiskDrive WHERE InterfaceType = &#039;USB&#039;&quot; _
    ).Count &gt; 0 Then
    
    WScript.CreateObject(&quot;WScript.Shell&quot;).Run &quot;notepad.exe&quot;
End If</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-01-30T21:54:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44632#p44632</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44616#p44616" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p><strong>prefiosa</strong>, write English please for «старирать».</p></blockquote></div><p>Выполнение программ блокнота.Команду RUN</p>]]></content>
			<author>
				<name><![CDATA[prefiosa]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26701</uri>
			</author>
			<updated>2011-01-30T16:50:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44616#p44616</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44604#p44604" />
			<content type="html"><![CDATA[<p><strong>prefiosa</strong>, write English please for «старирать».</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-01-30T14:24:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44604#p44604</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44602#p44602" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Вот сколько раз говорилось — лучше новый пост, нежели исправления; я-то не сохранил Ваш первоначальный код, где работало, а тут ещё и кэш браузера слетел — не поднять неправленного поста <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" />.</p><p>Впрочем, у меня работает и на новом:<br /></p><div class="codebox"><pre><code>&#039;-------------------------------------------------------------------------------------------------
&#039;---------------- Без гарантий. Используете на свой страх и риск. --------------------------------
&#039;-------------------------------------------------------------------------------------------------
&#039;Скрипт предназначен для слежения за подключением/отключением Flash USB накопителя и основан на 
&#039;интерфейсе WMI. События подключения, останова и физического извлечения накопителя, подтверждаются
&#039;соответствующими сообщениями. Желательно запускать скрипт при включенном и опознанном накопителе, 
&#039;либо при программно остановленном и удаленном из USB разъема компьютера.
&#039;-------------------------------------------------------------------------------------------------
&#039;Lang. VBScript
&#039;OC WinMe/XP
&#039;-------------------------------------------------------------------------------------------------
&#039;Внимание! Возможность завершения работы скрипта здесь не предусмотрена.
&#039;-------------------------------------------------------------------------------------------------

Public PlugIn,PlugOut,Disconnect
Public objService
Public PrevDrivesStr,DriveLetter

&#039;[Подключение к пространству имен WMI]
&#039;-------------------------------------------------------------------------------------------------
    Set objService        =GetObject    (&quot;winmgmts:\\.\Root\CIMV2&quot;)

    PlugIn        =0    &#039;Флаг подключения накопителя USB
    PlugOut        =0    &#039;Флаг останова накопителя 
    Disconnect    =0    &#039;Флаг физического извлечения накопителя

    GetDriveLetter False    &#039;Определение первоначального состояния подключения



&#039;[Создание запросов на события]
&#039;-------------------------------------------------------------------------------------------------
Set objSink    =WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;Sink_&quot;)

&#039;/Соответствует подключению накопителя/
objService.ExecNotificationQueryAsync _
        objSink, _
        &quot;SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA &quot;&quot;Win32_USBControllerDevice&quot;&quot;&quot;

MsgBox &quot;Запущено наблюдение за USB накопителем.&quot;, _
    vbExclamation Or vbSystemModal, _
    &quot;Наблюдение за USB накопителем.&quot;

&#039;[Бесконечный цикл с оповещением о состоянии USB контроллера в зависимости от состояния флагов]
&#039;-------------------------------------------------------------------------------------------------
Do
    WScript.Sleep 100

    &#039;[Оповещение события подключения]
    &#039;-----------------------------------------------------------------------------------------
    If PlugIn=1     Then 
        If Disconnect=1 Then Disconnect=0    &#039;Сброс флага в случае аварийного отключения накопителя
        &#039;---------------------------------------------------------------------------------
        MsgBox &quot;Подключен USB накопитель. &quot; &amp; _
            GetDriveLetter(True), _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;
        PlugIn        =0
    End If

    &#039;[Оповещение события программного останова]
    &#039;-----------------------------------------------------------------------------------------
    If PlugOut=1     Then 
        &#039;---------------------------------------------------------------------------------
        MsgBox &quot;USB накопитель остановлен программно либо произошло аварийное извлечение из корпуса компьютера. &quot; &amp; _
            GetDriveLetter(True), _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;
        PlugOut        =0
        Disconnect    =1
    End If
    &#039;-----------------------------------------------------------------------------------------
Loop

&#039;[Получение буквы съемного Flash USB диска]
&#039;-------------------------------------------------------------------------------------------------
Function GetDriveLetter(flg)

        DrivesStr=&quot;&quot;
        Set RemovableDrives    =objService.ExecQuery(&quot;SELECT * FROM Win32_LogicalDisk WHERE DriveType=2&quot;)
        &#039;---------------------------------------------------------------------------------
        For Each Drive In RemovableDrives
            DrivesStr=DrivesStr &amp; Drive.DeviceId
        Next
        &#039;---------------------------------------------------------------------------------
        If flg=True Then    
            &#039;Подключение накопителя
            If Len(DrivesStr)&gt;Len(PrevDrivesStr) Then 
                DriveLetter=Replace(DrivesStr,PrevDrivesStr,&quot;&quot;)
                GetDriveLetter=DriveLetter
            End If
            &#039;Отключение накопителя
            If Len(PrevDrivesStr)&gt;Len(DrivesStr) Then 
                DriveLetter=Replace(PrevDrivesStr,DrivesStr,&quot;&quot;)
                GetDriveLetter=DriveLetter
            End If
        End If
        &#039;---------------------------------------------------------------------------------
        PrevDrivesStr=DrivesStr
        
End Function

&#039;[Обработка событий - простановка флагов состояния USB контроллера]
&#039;-------------------------------------------------------------------------------------------------
Sub Sink_OnObjectReady(objEvent, objContext)    &#039;Подключение

    OperationData        =objEvent.Path_.Class
    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    If     OperationData=&quot;__InstanceCreationEvent&quot; Then
        For Each objSWbemObjectEx_Win32_DiskDrive In objService.Get(objEvent.TargetInstance.Dependent).Associators_(&quot;&quot;, &quot;Win32_DiskDrive&quot;)
            For Each objSWbemObjectEx_Win32_DiskPartition In objSWbemObjectEx_Win32_DiskDrive.Associators_(&quot;&quot;, &quot;Win32_DiskPartition&quot;)
                For Each objSWbemObjectEx_Win32_LogicalDisk In objSWbemObjectEx_Win32_DiskPartition.Associators_(&quot;&quot;, &quot;Win32_LogicalDisk&quot;)
                    WScript.Echo &quot;Win32_LogicalDisk.DeviceID   := [&quot; &amp; objSWbemObjectEx_Win32_LogicalDisk.DeviceID &amp; &quot;]&quot;
                    WScript.Echo &quot;Win32_LogicalDisk.VolumeName := [&quot; &amp; objSWbemObjectEx_Win32_LogicalDisk.VolumeName &amp; &quot;]&quot;
                Next
            Next
        Next
        
        PlugIn=1
    ElseIf     OperationData=&quot;__InstanceDeletionEvent&quot; Then
        &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        If Disconnect=1 Then 

            &#039;[Оповещение события физического извлечения]
            &#039;-------------------------------------------------------------------------
            MsgBox &quot;USB накопитель нормально извлечен из корпуса компьютера. &quot; &amp; _
            DriveLetter, _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;

            Disconnect    =0
        Else    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            PlugOut        =1
        End If
        &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    End If
    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
End Sub

&#039;-------------------------------------------------------------------------------------------------
&#039;poltergeyst</code></pre></div><p>P.S. Новая текстовка выглядит лучше, но я бы предпочёл вместо «USB накопитель <strong>нормально извлечен</strong> из корпуса компьютера» — «…отстыкован…» (ибо в этот момент ненормально уже невозможно) и «аварийное извлечение» — «аварийная отстыковка»; так более понятно.</p></blockquote></div><p>Что необходимо изменить сценарий что скрипт после запуска проверит есть ли что-нибудь включено в USB и если ничего не включено&nbsp; скрипт старирать например блокнота</p>]]></content>
			<author>
				<name><![CDATA[prefiosa]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26701</uri>
			</author>
			<updated>2011-01-30T13:16:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44602#p44602</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=33854#p33854" />
			<content type="html"><![CDATA[<p>Прочитав <a href="http://forum.farmanager.com/viewtopic.php?p=59709#p59709">сообщение</a> <strong>NightRoman</strong> на флруме Far Manager&#039;а, понял, что в <a href="http://p10903.clients.m-10.ru/viewtopic.php?pid=22455#p22455">#19</a> я танцевал не оттуда. Правильнее танцевать примерно так:<br /></p><div class="codebox"><pre><code>Option Explicit

Const wbemFlagReturnImmediately = &amp;H00000010
Const wbemFlagForwardOnly       = &amp;H00000020

Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx_Win32_DiskDrive, objSWbemObjectEx_Win32_DiskPartition, objSWbemObjectEx_Win32_LogicalDisk


Set objSWbemServicesEx = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;)

Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery( _
    &quot;SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA &#039;Win32_PnPEntity&#039; AND &quot; &amp; _
    &quot;TargetInstance.Description = &#039;Дисковый накопитель&#039;&quot;)

Do
    With collSWbemObjectSet.NextEvent
        Select Case .Path_.Class
            Case &quot;__InstanceCreationEvent&quot;
                With .TargetInstance
                    WScript.Echo &quot;Plugged device:       &quot;, .Name
                    WScript.Echo &quot;DeviceID:             &quot;, .DeviceID
                    
                    For Each objSWbemObjectEx_Win32_DiskDrive In .Associators_(&quot;&quot;, &quot;Win32_DiskDrive&quot;,,,,,,, wbemFlagReturnImmediately + wbemFlagForwardOnly)
                        WScript.Echo &quot;  Physical disk drive:&quot;, objSWbemObjectEx_Win32_DiskDrive.Name
                        
                        If objSWbemObjectEx_Win32_DiskDrive.Partitions &gt; 0 Then
                            For Each objSWbemObjectEx_Win32_DiskPartition In objSWbemObjectEx_Win32_DiskDrive.Associators_(&quot;&quot;, &quot;Win32_DiskPartition&quot;,,,,,,, wbemFlagReturnImmediately + wbemFlagForwardOnly)
                                WScript.Echo &quot;    Disk partition:   &quot;, objSWbemObjectEx_Win32_DiskPartition.Name
                                
                                For Each objSWbemObjectEx_Win32_LogicalDisk In objSWbemObjectEx_Win32_DiskPartition.Associators_(&quot;&quot;, &quot;Win32_LogicalDisk&quot;,,,,,,, wbemFlagReturnImmediately + wbemFlagForwardOnly)
                                    With objSWbemObjectEx_Win32_LogicalDisk
                                        WScript.Echo &quot;      Logical disk:   &quot;, .Name &amp; &quot; (&quot; &amp; .VolumeName &amp; &quot;), &quot; &amp; .FileSystem
                                    End With
                                Next
                            Next
                        End If
                    Next
                    
                    WScript.Echo
                End With
            Case &quot;__InstanceDeletionEvent&quot;
                With .TargetInstance
                    WScript.Echo &quot;Unplugged device:     &quot;, .Name
                    WScript.Echo &quot;DeviceID:             &quot;, .DeviceID
                    WScript.Echo
                End With
            Case Else
        End Select
    End With
Loop

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0</code></pre></div><div class="quotebox"><blockquote><div class="codebox"><pre><code>Plugged device:        CHIPSBNK v1.9.13 USB Device
DeviceID:              USBSTOR\DISK&amp;VEN_CHIPSBNK&amp;PROD_V1.9.13&amp;REV_5.00\09101105196F4809&amp;0
  Physical disk drive: \\.\PHYSICALDRIVE2
    Disk partition:    Диск #2, раздел #0
      Logical disk:    N: (AGP), FAT

Unplugged device:      CHIPSBNK v1.9.13 USB Device
DeviceID:              USBSTOR\DISK&amp;VEN_CHIPSBNK&amp;PROD_V1.9.13&amp;REV_5.00\09101105196F4809&amp;0

Plugged device:        Kingston DataTraveler C10 USB Device
DeviceID:              USBSTOR\DISK&amp;VEN_KINGSTON&amp;PROD_DATATRAVELER_C10&amp;REV_1.00\001CC05FE92CF9B14151B5CC&amp;0
  Physical disk drive: \\.\PHYSICALDRIVE2
    Disk partition:    Диск #2, раздел #0
      Logical disk:    K: (KINGSTON), FAT32

Unplugged device:      Kingston DataTraveler C10 USB Device
DeviceID:              USBSTOR\DISK&amp;VEN_KINGSTON&amp;PROD_DATATRAVELER_C10&amp;REV_1.00\001CC05FE92CF9B14151B5CC&amp;0</code></pre></div></blockquote></div><p>Насколько я понимаю, условие «… AND TargetInstance.Description = &#039;Дисковый накопитель&#039;» будет языково-зависимым и, возможно, даже ОС-зависимым.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-03-14T22:50:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=33854#p33854</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=22478#p22478" />
			<content type="html"><![CDATA[<p>Спасибо, учту Ваши замечания <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2009-05-03T13:50:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=22478#p22478</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=22467#p22467" />
			<content type="html"><![CDATA[<p>Вот сколько раз говорилось — лучше новый пост, нежели исправления; я-то не сохранил Ваш первоначальный код, где работало, а тут ещё и кэш браузера слетел — не поднять неправленного поста <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" />.</p><p>Впрочем, у меня работает и на новом:<br /></p><div class="codebox"><pre><code>&#039;-------------------------------------------------------------------------------------------------
&#039;---------------- Без гарантий. Используете на свой страх и риск. --------------------------------
&#039;-------------------------------------------------------------------------------------------------
&#039;Скрипт предназначен для слежения за подключением/отключением Flash USB накопителя и основан на 
&#039;интерфейсе WMI. События подключения, останова и физического извлечения накопителя, подтверждаются
&#039;соответствующими сообщениями. Желательно запускать скрипт при включенном и опознанном накопителе, 
&#039;либо при программно остановленном и удаленном из USB разъема компьютера.
&#039;-------------------------------------------------------------------------------------------------
&#039;Lang. VBScript
&#039;OC WinMe/XP
&#039;-------------------------------------------------------------------------------------------------
&#039;Внимание! Возможность завершения работы скрипта здесь не предусмотрена.
&#039;-------------------------------------------------------------------------------------------------

Public PlugIn,PlugOut,Disconnect
Public objService
Public PrevDrivesStr,DriveLetter

&#039;[Подключение к пространству имен WMI]
&#039;-------------------------------------------------------------------------------------------------
    Set objService        =GetObject    (&quot;winmgmts:\\.\Root\CIMV2&quot;)

    PlugIn        =0    &#039;Флаг подключения накопителя USB
    PlugOut        =0    &#039;Флаг останова накопителя 
    Disconnect    =0    &#039;Флаг физического извлечения накопителя

    GetDriveLetter False    &#039;Определение первоначального состояния подключения



&#039;[Создание запросов на события]
&#039;-------------------------------------------------------------------------------------------------
Set objSink    =WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;Sink_&quot;)

&#039;/Соответствует подключению накопителя/
objService.ExecNotificationQueryAsync _
        objSink, _
        &quot;SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA &quot;&quot;Win32_USBControllerDevice&quot;&quot;&quot;

MsgBox &quot;Запущено наблюдение за USB накопителем.&quot;, _
    vbExclamation Or vbSystemModal, _
    &quot;Наблюдение за USB накопителем.&quot;

&#039;[Бесконечный цикл с оповещением о состоянии USB контроллера в зависимости от состояния флагов]
&#039;-------------------------------------------------------------------------------------------------
Do
    WScript.Sleep 100

    &#039;[Оповещение события подключения]
    &#039;-----------------------------------------------------------------------------------------
    If PlugIn=1     Then 
        If Disconnect=1 Then Disconnect=0    &#039;Сброс флага в случае аварийного отключения накопителя
        &#039;---------------------------------------------------------------------------------
        MsgBox &quot;Подключен USB накопитель. &quot; &amp; _
            GetDriveLetter(True), _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;
        PlugIn        =0
    End If

    &#039;[Оповещение события программного останова]
    &#039;-----------------------------------------------------------------------------------------
    If PlugOut=1     Then 
        &#039;---------------------------------------------------------------------------------
        MsgBox &quot;USB накопитель остановлен программно либо произошло аварийное извлечение из корпуса компьютера. &quot; &amp; _
            GetDriveLetter(True), _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;
        PlugOut        =0
        Disconnect    =1
    End If
    &#039;-----------------------------------------------------------------------------------------
Loop

&#039;[Получение буквы съемного Flash USB диска]
&#039;-------------------------------------------------------------------------------------------------
Function GetDriveLetter(flg)

        DrivesStr=&quot;&quot;
        Set RemovableDrives    =objService.ExecQuery(&quot;SELECT * FROM Win32_LogicalDisk WHERE DriveType=2&quot;)
        &#039;---------------------------------------------------------------------------------
        For Each Drive In RemovableDrives
            DrivesStr=DrivesStr &amp; Drive.DeviceId
        Next
        &#039;---------------------------------------------------------------------------------
        If flg=True Then    
            &#039;Подключение накопителя
            If Len(DrivesStr)&gt;Len(PrevDrivesStr) Then 
                DriveLetter=Replace(DrivesStr,PrevDrivesStr,&quot;&quot;)
                GetDriveLetter=DriveLetter
            End If
            &#039;Отключение накопителя
            If Len(PrevDrivesStr)&gt;Len(DrivesStr) Then 
                DriveLetter=Replace(PrevDrivesStr,DrivesStr,&quot;&quot;)
                GetDriveLetter=DriveLetter
            End If
        End If
        &#039;---------------------------------------------------------------------------------
        PrevDrivesStr=DrivesStr
        
End Function

&#039;[Обработка событий - простановка флагов состояния USB контроллера]
&#039;-------------------------------------------------------------------------------------------------
Sub Sink_OnObjectReady(objEvent, objContext)    &#039;Подключение

    OperationData        =objEvent.Path_.Class
    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    If     OperationData=&quot;__InstanceCreationEvent&quot; Then
        For Each objSWbemObjectEx_Win32_DiskDrive In objService.Get(objEvent.TargetInstance.Dependent).Associators_(&quot;&quot;, &quot;Win32_DiskDrive&quot;)
            For Each objSWbemObjectEx_Win32_DiskPartition In objSWbemObjectEx_Win32_DiskDrive.Associators_(&quot;&quot;, &quot;Win32_DiskPartition&quot;)
                For Each objSWbemObjectEx_Win32_LogicalDisk In objSWbemObjectEx_Win32_DiskPartition.Associators_(&quot;&quot;, &quot;Win32_LogicalDisk&quot;)
                    WScript.Echo &quot;Win32_LogicalDisk.DeviceID   := [&quot; &amp; objSWbemObjectEx_Win32_LogicalDisk.DeviceID &amp; &quot;]&quot;
                    WScript.Echo &quot;Win32_LogicalDisk.VolumeName := [&quot; &amp; objSWbemObjectEx_Win32_LogicalDisk.VolumeName &amp; &quot;]&quot;
                Next
            Next
        Next
        
        PlugIn=1
    ElseIf     OperationData=&quot;__InstanceDeletionEvent&quot; Then
        &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        If Disconnect=1 Then 

            &#039;[Оповещение события физического извлечения]
            &#039;-------------------------------------------------------------------------
            MsgBox &quot;USB накопитель нормально извлечен из корпуса компьютера. &quot; &amp; _
            DriveLetter, _
            vbExclamation Or vbSystemModal, _
            &quot;Наблюдение за USB накопителем&quot;

            Disconnect    =0
        Else    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            PlugOut        =1
        End If
        &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    End If
    &#039;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
End Sub

&#039;-------------------------------------------------------------------------------------------------
&#039;poltergeyst</code></pre></div><p>P.S. Новая текстовка выглядит лучше, но я бы предпочёл вместо «USB накопитель <strong>нормально извлечен</strong> из корпуса компьютера» — «…отстыкован…» (ибо в этот момент ненормально уже невозможно) и «аварийное извлечение» — «аварийная отстыковка»; так более понятно.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-05-03T09:48:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=22467#p22467</id>
		</entry>
</feed>
