<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Ожидание подключения USB накопителей]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3078</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3078&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Ожидание подключения USB накопителей».]]></description>
		<lastBuildDate>Sun, 31 May 2015 00:35:30 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=94270#p94270</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sun, 31 May 2015 00:35:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=94270#p94270</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=94269#p94269</link>
			<description><![CDATA[<p>Flasher, спасибо..</p>]]></description>
			<author><![CDATA[null@example.com (padloyd)]]></author>
			<pubDate>Sun, 31 May 2015 00:08:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=94269#p94269</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=94268#p94268</link>
			<description><![CDATA[<p><strong>padloyd</strong><br />Вообще-то тут про vbs. Использовать его в качестве резидента не всегда хорошо. Для данной задачи лучше применять спецпрограммы c возможностью глобального автозапуска - USB Safely Remove и Zentimo xStorage Manager.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sat, 30 May 2015 23:38:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=94268#p94268</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=94266#p94266</link>
			<description><![CDATA[<p>здравствуйте, помогите пожалуйста, скрипт отличный.. работает... можно ли его доработать немного.. я в программировании вообще не разбираюсь, можно ли сделать чтобы при подключении флешки с буквой диска Z и не вылезали окна а создавался любой текстовый фаил скажем в корне диска С и запускался батник (в идеале нужно перезапустить несколько служб в win7), а при отключении фаил удалялся. заранее спасибо за ответ.</p>]]></description>
			<author><![CDATA[null@example.com (padloyd)]]></author>
			<pubDate>Sat, 30 May 2015 19:27:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=94266#p94266</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44730#p44730</link>
			<description><![CDATA[<p><strong>prefiosa</strong>, камеру найти не смог. Так что, помочь, увы, не смогу.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 02 Feb 2011 11:14:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44730#p44730</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44666#p44666</link>
			<description><![CDATA[<p>Если это может помочь,твой скрипт (пост 2009-05-03 13:48:57) работает с USB-камеры,определяет (сообщает), когда включенa или выключенa камера USB.<br />Я хочу, чтобы в дополнение после запуска скрипта,он проверил-Есть USB-камера или нет, и если нет, то запустить Блокнота.</p>]]></description>
			<author><![CDATA[null@example.com (prefiosa)]]></author>
			<pubDate>Mon, 31 Jan 2011 12:20:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44666#p44666</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44653#p44653</link>
			<description><![CDATA[<p>Ясно. Подумаем. Осталось где-то найти камеру.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 31 Jan 2011 10:04:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44653#p44653</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44647#p44647</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (prefiosa)]]></author>
			<pubDate>Mon, 31 Jan 2011 09:06:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44647#p44647</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44632#p44632</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 30 Jan 2011 21:54:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44632#p44632</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44616#p44616</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p><strong>prefiosa</strong>, write English please for «старирать».</p></blockquote></div><p>Выполнение программ блокнота.Команду RUN</p>]]></description>
			<author><![CDATA[null@example.com (prefiosa)]]></author>
			<pubDate>Sun, 30 Jan 2011 16:50:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44616#p44616</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44604#p44604</link>
			<description><![CDATA[<p><strong>prefiosa</strong>, write English please for «старирать».</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 30 Jan 2011 14:24:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44604#p44604</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44602#p44602</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (prefiosa)]]></author>
			<pubDate>Sun, 30 Jan 2011 13:16:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44602#p44602</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=33854#p33854</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 14 Mar 2010 22:50:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=33854#p33854</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=22478#p22478</link>
			<description><![CDATA[<p>Спасибо, учту Ваши замечания <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Poltergeyst)]]></author>
			<pubDate>Sun, 03 May 2009 13:50:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=22478#p22478</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Ожидание подключения USB накопителей]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=22467#p22467</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sun, 03 May 2009 09:48:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=22467#p22467</guid>
		</item>
	</channel>
</rss>
