Показать полную графическую версию : [решено] Помогите в создании BATника , который бы завершал сеанс при отключении USB устройства
inostranec007
04-06-2014, 17:27
CMD/BAT помогите в создании BATника , который бы завершал сеанс при отключении USB устройства. Задумка такая, что бы при извлечении устройства выполнялось shutdown -l. Как отследить извлечение в том случае если в журнал Windows не производится запись о событии . Заранее спасибо.
inostranec007, конкретного USB-устройства?
USB-флэшки? USB-винчестера? USB Bluetooth? USB WiFi? USB-мыши? Клавиатуры?
inostranec007
05-06-2014, 10:10
Желательно любого устройства пдключаемого через usb. А вообще есть такая штука, как Рутокен, вот его как раз и надо.
inostranec007, как вариант -- установка утилиты USB Safely Remove (http://safelyremove.com/fullFeaturesList.htm) (смотрим пункт "Program autorun on device connection\disconnection", или "Автозапуск программ при подключении\отключении устройства" в русской версии сайта).
Для отслеживания подключения и отключения USB-устройств нужна обработка события Windows WM_DEVICECHANGE (http://yandex.ru/yandsearch?text=WM_DEVICECHANGE). Пример на Delphi приведён на http://delphiru.ru/winapi/553-hook-usb-device . Думаю что CMD-файл здесь не справится, а вот VB-скрипт должен. Но может знатоки меня и поправят.
usr.exe - бесплатная консольная утилита из состава USB Safely Remove
@Echo Off
:Loop0
Set cnt=0
usr.exe List>temp.txt
For /F "tokens=* delims=" %%i In (temp.txt) Do Set /a cnt += 1& Echo %%i
:Loop1
Echo %cnt%
Set cntN=0
Ping -n 3 localhost>Nul
usr.exe List>temp.txt
For /F "tokens=* delims=" %%i In (temp.txt) Do Set /a cntN += 1
If %cnt%==%cntN% GoTo :Loop1
If %cnt% LSS %cntN% (
Echo USB device is connected
Ping -n 10 localhost>Nul
GoTo :Loop0
)
If %cnt% GTR %cntN% (
Echo USB device is disconnected
Ping -n 10 localhost>Nul
GoTo :Loop0
)
pause > NUL
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.