Главная > Windows | Девайсы > Перезапуск USB устройства после режима "Сон"

Перезапуск USB устройства после режима "Сон"

24.12.2013 12 комментариев » Просмотры: 15 675

Перезапуск USB

Я обладатель одного занимательного девайса - программируемой клавиатуры Logitech G13. Клавиатура фантастическая, особенно для программиста - можно запрограммировать кучу дополнительных кнопок на определенные действия. Однако с ней есть небольшая проблема - после перевода ПК в режим "Сон" и возвращении из него, она "теряет настройки", а программа управляющая ей не обращает на это внимание, помогает отключение и подключение её к ПК. До недавнего времени я использовал для этого удлинитель, однако теперь все изменилось..

Надо заметить, что данный способ абсолютно не привязан к девайсу, поэтому вы можете использовать его и для других устройств, у которых похожая проблема..

Прежде всего надо разбить задачу на несколько частей:

  1. Отключение и включение устройства на определенном порту USB
  2. Написать скрипт который будет делать перезапуск
  3. Выполнять скрипт сразу после выхода из сна

Поехали по списку..

Отключение и включение устройства на определенном порту USB

Я немного погуглил и нашел программу USBDeview. Последнюю версия можно загрузить с сайта разработчиков: http://www.nirsoft.net или с моего сайта: версия 2.27.

Эта программа умеет отключать и включать USB устройства, простым щелчками мышки:

USBDeview - программа для уравления USB портами

USBDeview - программа для уравления USB портами

Таким образом, я смог отключать и подключать свою клавиатурку, что в свою очередь приводило к загрузке профилей и нормальной работе. Теперь нам нужно это оформить в виде скрипта..

Пишем скрипт который будет делать перезапуск

Программа USBDeview хорошо продумана и имеет возможность управления устройствами из консоли, поэтому и с этим пунктом проблем не возникло. У меня получился такой bat скриптик:

В нем, я отключаю устройство с идентификатором "046d;c21", потом жду 1 секунду и включаю его. Идентификатор состоит из VendorID и ProductID, найти их можно в соответствующих столбцах программы USBDeview:

USBDeview: VendorID и ProductID

USBDeview: VendorID и ProductID

Устройства можно указать и другими способами, подробнее об этом написано в мануале в разделе "Disable/Enable/Remove Command-Line Options"

Таким образом, я получил скрипт, запустив который я мог перезапустить USB устройство, а именно перезагрузить свою клавиатурку, чтобы она перезагрузила свои настройки. Теперь мне нужно было делать это автоматически, после выхода Windows из режима "Сон"...

 Запуск скрипта после выхода из режима "Сон"

Для этого нужно создать хитрую задачу в планировщике Windows. Делаем следующее:

  • Открываем "Панель управления"
  • Переходим к отображению всех элементов
  • Переходим в раздел "Админимтрирование"
  • В нем открываем "Планировщик заданий"
Планировщик Задач Windows

Планировщик Задач Windows 8

Нам откроется окно, в котором выбираем пункт "Создать задачу":

Создание задачи в Планировщике Windows

Создание задачи в Планировщике Windows

Теперь в открывшемся окне заполняем следующие поля:

  • Вкладка "Общие"
    • Имя: USB Restart
  • Вкладка "Триггеры", нажимаем "Создать"
    • Начать задачу: При событии
    • Параметры: Простое
    • Журнал: Система
    • Источник: Power-Troubleshooter
    • Код события: 1
    • Включено: должна стоять галочка
  • Вкладка "Действия", нажимаем "Создать"
    • Действие: Запуск программы
    • Программа или сценарий: [указываете-путь-к-скрипту]
      D:\Soft\Drivers\Keyboard\Logitech G13\Restart\restart-g13.bat

Вот и все, добавляем задачу нажимая [ОК]. Для наглядности, те же настройки картинками:

Конфигурирование задачи для Планировщика Windows

Конфигурирование задачи для Планировщика Windows

 

Такой метод настройки я подсмотрел тут: How to execute a script on sleep, hibernate, resume, and shutdown в частности там говорится что можно выполнять и команды до отправки в сон, т.е. можно например отключить устройство при переходе в сон, а при выходе его включать:

Try this when the computer returns from Hibernate or Sleep Mode

Begin the Task: On an event Setting Basic Log: System Source: Power-Troubleshooter Event ID: 1 The system has resumed from sleep.

When you put the computer in Hibernate or Sleep Mode Begin the Task: On an event Setting Basic Log: System Source: Kernel-Power Event ID: 42 The system is entering sleep.

Однако я не проверял, такую возможность..

Ещё можно найти нужные событие в оснастке "Управление компьютером" (Пуск>Выполнить>compmgmt.msc) и поставить триггер именно на них. К примеру вот то событие которое я отслеживаю:

Power Troubleshooter

Power Troubleshooter

Тестирование

После всего этого, я отправил компьютер в "Сон" и при выходе из него скрипт выполнился, клавиатурка перезагрузила профиля и была готова к работе.

Я в очередной раз убедился, что все уже придумали за нас, осталось просто найти эти решения и использовать их.

Автор: | Рейтинг: 4/5 | Теги: , , ,

12 комментариев

Написать свой
  1. Виталий Ответить
    13.06.2023 в 12:16 дп
    Спасибо, выручили. Правда USBDeview не заработала и пришлось использовать другую программу:
    RestartUsbPort V1.2.0 по адресу
    https://www.uwe-sieber.de/misc_tools_e.html#restartusbport
  2. Максим Ответить
    23.12.2016 в 3:40 пп
    Огромное спасибо что помогли. Надо еще вконце статьи добавить, что открываемая программа должна в самих свойствах запускатся с правами администратора (в пункте совместимость с ОС), иначе все усилия по автозагрузке из под режима сна напрасны. К тому-же саму программу лучше всего поместить в корне диска с системой, а не на рабочем столе или где-то ещё непонятно где, BAT команда может запутатся в папках не с латинскими значениями слов.
  3. Антон Ответить
    08.11.2016 в 4:37 пп
    Есть спутниковый модем, раза два три в день отрубается интернет. Как сделать, чтоб при потери связи с инетом, модем автоматически перезагружался?
    • Vitaliy Orlov Ответить
      08.11.2016 в 9:44 пп
      Если такой функции нет в настройках модема, тогда это будет сложно сделать:
      1) Если это стационарное устройство, то только через внутренние настройки; либо установка кастомной прошивки, и опять же внутренние настройки
      2) Если это устройство питается от USB, тогда можешь попробовать то, что описано в статье, в ручном режиме. Если сработает, тогда тебе надо написать скрипт, который будет делать следующее:
      - раз в 1-5 минут, пинг стабильного сервера, например dns гугла: 8.8.8.8, 8.8.4.4
      - если пинг не проходит, значит инет здох и надо перезагружать, сделать это можно опять же с помощью информации из статьи.
      Если сам не можешь написать такой скрипт, обратись на фриланс, там помогут за небольшое вознаграждение.
  4. Костя Ответить
    21.12.2014 в 10:59 пп
    У меня проблема такая возникла... имею мини атс на роботе настроеную на базе системника для связи с корпоративными клиентами, 4 модема разных операторов но когда пропадает свет то мои олухи в офисе постоянно профтыкивают запустить все как надо, а операторы иза етих дурацких лохов мне симки лочят ... (считают что я занимаюсь марки-фелингом, как обиснил вчера мне оператор лайф, я даже не врубался что за фигня такая) суть в чем мне алгоритм обиснили давно что должна реетрация модемов быть через каждые 15 минут.. я так понял если при запуске обрубить все юсб нафиг и потом их запустить постепенно с интервалом т 900 и дальше т1800.. и так к четвертому то все будет супер.. автор хелп напиши батку как верно сначала рубануть все а потом активировать последовательность включения. чесно я просто олух в том .. а мои на роботе скромняги потупея будут за меня( я понимаю что прошу много но будет тебе респект и уважуха... и примного благодарства я думаю и народу понадобится когдато)
    • Vitaliy Orlov Ответить
      22.12.2014 в 8:58 дп
      Привет!

      Насколько я понял, тебе надо сделать следующее:
      1) Вырубить модемы
      2) Включать их с интервалом в 15 минут

      Тогда тебе надо сделать следующее:
      1) Читаешь в статье и ищешь id всех модемов, т.е. ты должен найти 4е значения типа: "046d;c21"
      2) Тестишь, что реально отключается, включается и все работает. Команды написаны выше:
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /disable_by_pid "046d;c21c"
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /enable_by_pid "046d;c21c"
      3) Пишешь батник, типа того:

      @echo off
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /disable_by_pid "046d;c21c"
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /disable_by_pid "046d;c22c"
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /disable_by_pid "046d;c23c"
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /disable_by_pid "046d;c24c"
      timeout /t 900 /nobreak > nul
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /enable_by_pid "046d;c21c"
      timeout /t 900 /nobreak > nul
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /enable_by_pid "046d;c22c"
      timeout /t 900 /nobreak > nul
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /enable_by_pid "046d;c23c"
      timeout /t 900 /nobreak > nul
      start D:\Soft\System\USB\usbdeview-x64\USBDeview.exe /enable_by_pid "046d;c24c"
      Тут 900 = 15 мин = 15 * 60 = 900 сек

      4) Тестируешь батник, можешь поставить там время не 900, а например 60, чтоб долго не ждать.

      Как-то так.
  5. Сергей Ответить
    10.10.2014 в 6:37 пп
    Видимо не все модемы отключаются при отключении порта . Мой ZTE MF667 в сети даже если комп выключить . У меня была задача : автовключение компа в определённое время , автоподключение к инету , автоскачивание файла . И ещё модем нужно переподключить . Зачем мне это надо ? Вот зачем : "Учет трафика не ведется в период с 1:00 ночи до 8:00 утра." Так что хотелось всё настроить , леч спать , а утром обнаружить что всё скачалось без моего участия ) Можно конечно было сделать проще , просто включив закачку в нужное время , но так не катит , потому что нужно разрывать соединение в самом модеме и в час ночи .

    Пререпробовал несколько прог , читал форумы , но так ничего и не нашёл . Но потом наткнулся на прогу в своём компе "Q-Share" , не зная что она делает - запустил . Инет пропал , и модем перестал моргать . Вышел из проги , перетыкаю модем - всё ок . Снова запускаю прогу и выхожу с неё . Инет соединение не восстанавливается , но переподключением USB-порта(через диспетчер устройств) снова всё работает . Тогда я воспользовался программой "devcon" и батником (Reload.bat ) .
    Вот его содержание :
    :ping
    set i=0
    :noping
    If %i%==0 (
    c:\reload\devcon.exe disable PCI\VEN_8086&DEV_3B34&CC_0C0320


    timeout /t 3
    c:\reload\devcon.exe enable PCI\VEN_8086&DEV_3B34&CC_0C0320
    )

    "PCI\VEN_8086&DEV_3B34&CC_0C0320" эту часть заметить на ИД вашего устройства , либо USB-Хоста , в котором это устройство есть.

    Изначально батник проверял пинг к нескольким сайтам , если ошибки , то батник переподключал USB-устройство . Я убрал лишнее (может ещё можно что убрать , не особо разбираюсь) и он работает как мне нужно . Единственная проблема это работа проги "Q-Share" , она не даёт моему инету работать ) Но когда я перебирал USB порты и вставлял в батник их ИД , нашлось что-то интересное . Батник выключал целую группу USB-устройств и прога "Q-Share" падала с ошибкой , и + инет восстанавливался )
    Осталось только поставить "Q-Share" в автозагрузку , а батник отложенную автозагрузку :)

    В итоге вот что получиться : Комп включается в 01:02 (настроено в биосе) , автоматом загружается прога для скачивания файла(и она автоматом скачивает если есть инет) , загружается "Q-Share" и сбивает модем с толку , потом запускается мой батник и отключает USB-устройства (может даже все) , от этого "Q-Share" падает с ошибкой , потом батник включает устройства , модем заново подключается к сети и как только в компе появляется инет сразу идёт загрузка файлов .
    Ещё можно настроить что бы комп потом выключился .

    Может кому пригодится :)
    • Сергей Ответить
      10.10.2014 в 6:50 пп
      Вот что нарыл о "Q-Share" : это прога от компании GIGABYTE . Поставляется с софтом для мат. платы . Краткое описание "Утилита Q-Share позволяет настраивать и управлять разделяемыми сетевыми ресурсами".
      Я так и не въехал как она работает , но узнал что не только мне "напрочь отключает интернет" ))
  6. Игорь Ответить
    18.09.2014 в 9:52 пп
    а как сделать так что бы модем yota перезагружался с определнным временем что бы я каждый раз не выаскивал модем из USB порта
    • Vitaliy Orlov Ответить
      20.09.2014 в 8:03 дп
      Точно так же, как описано в статье: найти pid, создать bat файл для запуска USBDeview.exe, в планировщике Windows на вкладке "Триггеры" выбрать необходимый интервал времени.

Добавить комментарий для Vitaliy Orlov Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>


Ниже приводятся ссылки на блоги ссылающиеся на этот пост:
  1. Pingback от Runtime error LCore.exe — Logitech G13 24.12.2013
  2. Pingback от Runtime error LCore.exe — Logitech G13 13.07.2018