Если на твоём
компе есть bluetooth, то,
наверное, ты иногда его включаешь и
выключаешь ) А если ты хоть немного
разбираешься в безопасности компьютеров,
то отключаешь точно – зачем
он будет болтаться. Я тоже отключаю.
Только процедура эта обычно неудобная
— либо в трее кликать долго и мучительно,
пункты выбирать... или хоткеем, если
есть. Ну, допустим, хоткея нет, а кликать
сто раз не хочется. Так что, без проблем!
Сделаем вкл-выкл по одному и тому же
клику, да ещё и хоткей повесим! Раз
плюнуть!
@ECHO OFF
for /F
%%p IN ('devcon status USB\VID_0B05* ^| find /C "running"')
DO (set answer=%%p)
if %answer%==1 (
devcon disable
USB\VID_0B05^&PID_1715
exit /b
)
devcon enable
USB\VID_0B05^&PID_1715
Не дрейфь! Ни
фига не понятно, знаю, но сейчас разберём
всё по символам, и будет полное
просветление!
@ECHO OFF — это
служебная команда. Если оно, это Эхо,
офф, то, когда запустишь скрипт, сами
команды не будет видно, только их
результаты. Соответственно, если ON,
или если такой команды в файле нет
вообще, то всё будет видно. OFF
полезен, когда скрипт уже точно
работает так, как надо. ON –
чтобы видеть, что происходит, и
отследить, где косяк (это, упрощённо
говоря, то, что называют «режим отладки»
- когда мы видим всё, что происходит в
потрохах компьютера, чтобы точно знать,
что идёт не так, и исправить это).
for /F %%p IN ('devcon
status USB\VID_0B05* ^| find /C "running"') DO (set
answer=%%p)
Здесь много
всего. Идём по порядку:
FOR —
это команда, встроенная в Windows, крутая
и очень полезная (такое есть и в других
языках и операционках, конечно, просто
мы сейчас рассмотрим виндовый вариант).
Это, говоря упрощённо, такой IF с
расширенными возможностями. IF
выполняется один раз, а FOR
— пока не закончится то, что
мы ему подсунем условием IN. В
IN мы с тобой подкинем ему
команду, да не одну! Если команда в IN
выполнилась успешно, FOR
перейдёт в DO (“сделать»
по-русски), и сделает то, что мы ему там
напишем, и сделает это столько раз,
сколько должна будет выполниться команда
в IN.
В IN
мы имеем:
devcon status
USB\VID_0B05* ^| find /C "running"
devcon – это
внешняя программа. Скачать её можно тут - http://support.microsoft.com/kb/311272/ru. Имей в виду, что 32-битная версия на 64-ой ОС работать не будет. Прога позволяет
контролировать из командной строки
устройства, подключенные к компу. Для
нас сейчас она полезна тем, что можно
увидеть статус устройства. Зачем? Чтобы
узнать, включено оно или выключено, и
сделать наоборот! )
Для
этого мы сделаем запрос devcon status, а дальше
зададим VID нашего блютуса.
VID – это
набор буквоцифр, уникальный для каждого
девайса. То есть, обращаясь к устройству
через VID, мы можем быть
уверены, что отключим только данный
конкретный блютуз, а не 10 похожих с
монитором на закуску ) Звёздочка после
начала VID означает «любое
количество любых символов дальше».
Поскольку у меня в компьютере других
похожих VID нет, я оставил
звёздочку. Тебе, может быть, понадобится
более длинный VID, а
посмотреть его можно в диспетчере
устройств, в вкладке «Свойства» твоего
блютуса (да и любого другого девайса
тоже).
Помнишь
про ERRORLEVEL? Devcon нужный нам
errorlevel в данном случае не
вернёт. Он скажет, что такое устройство
ЕСТЬ (если ты задал правильный VID),
но его статус в ERRORLEVEL не
покажет. Чтобы узнать статус, заюзаем
уже знакомый нам FIND.
Если блютус
включен, devcon напишет «1
devices running”. Вот этот running
мы и найдём:
find /C "running"
Почему перед
FIND стоит |
? Это как раз одна из альтернатив
ERRORLEVEL, то есть возможность
передать компьютеру информацию о
предыдущей команде. Если мы пишем
devcon status
USB\VID_0B05* | find /C "running"
то всё, что
выводит на экран devcon, будет
вместо экрана «перекинуто» следующей
команде, FIND в нашем случае.
По сути, мы говорим файнду: НАЙДИ
слово running В результатах
предыдущей команды. Всё просто.
И вот файнд уже
возвращает нужный нам ERRORLEVEL.
Его получит команда FOR и
сохранит в заданную переменную, %%p
Переменные в
cmd выделяются знаками
процента. Если имя переменной — одна
буква, то знак процента тоже один, перед
переменной. Если букв в имени переменной
больше одной, то всё имя выделяется
знаками процента, %ПЕРЕМЕННАЯ%. Почему
в cmd/bat файле два процента
перед переменной, и почему иногда
появляется крышечка ^ перед
символами, расскажу дальше.
Дальше FOR
выполнит то, что сказано в DO.
То есть сохранит наш ERRORLEVEL
в другую переменную для дальнейшей
обработки. Кстати говоря, если в cmd
мы пишем в переменную, то сама
переменная будет без процентов. А если
хотим узнать значение переменной — вот
тут с процентами. Поэтому set answer(записываем
переменная)=%%p(читаем значение переменной).
Дальше всё просто
— наш любимый IF:
if %answer%==1 (
devcon disable
USB\VID_0B05^&PID_1715
exit /b
)
Если devcon
нам сказал, что есть одно устройство
со статусом running, то есть
в answer у нас единица, то
выполним действия. Мы выполняем несколько
команд, поэтому все наши команды нужно
взять в скобки, и каждую команду писать
на новой строке, чтобы IF'у
было понятно, когда и что выполнять.
devcon disable
USB\VID_0B05^&PID_1715
ЕСЛИ устройство
ВКЛЮЧЕНО ВЫКЛЮЧИТЬ устройство
exit /b
ВЫЙТИ (из файла
cmd/bat – параметр /b)
Если мы не выйдем,
то выполнится следующая команда:
devcon enable
USB\VID_0B05^&PID_1715
ВКЛЮЧИТЬ
устройство
Суть в том, что
ЕСЛИ устройство ВКЛЮЧЕНО, мы ВЫКЛЮЧИМ
его и ВЫЙДЕМ (в условии IF), и
следующая команда не выполнится. Если
устройство ВЫКЛЮЧЕНО, то в IF
мы не попадём, а значит, не выйдем,
и следующая команда будет ВКЛЮЧИТЬ
устройство.
И нам нужно будет
кликнуть всего один раз, на один значок
(у меня ярлык на этот батник просто
помещён в панель быстрого запуска).
Просто и удобно!
И вот ещё что:
- devcon – полезная штука, скачать его можно тут (и тут для x64 систем, x86 в x64 работать не будет)
- скрипт можно сформулировать и проще — попробуй!
- два процента перед переменной — так надо! ) Если просто вводить в командную строку, то один %, а если из батника — то два. А крышечка — это чтобы комп понял, что это служебный символ, а не печатный. То есть, в нашем случае | - это команда, такая же, как FIND, например.
Комментариев нет:
Отправить комментарий