Текущее время: Вт дек 12, 2017 3:21 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Пт мар 25, 2011 11:00 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт фев 05, 2009 3:48 pm
Сообщения: 54
Предложу свой вариант кнопки.
Код кнопки:
Код:
TOTALCMD#BAR#DATA
nircmd.exe exec hide "USB_Manager.bat"

C:\Program Files (x86)\Zentimo\Zentimo.exe
Подключение/отключение USB устройств
c:\Program Files (x86)\Zentimo\

-1


Код батника USB_Manager.bat:
Код:
@Echo Off
Title USB Manager
SetLocal EnableDelayedExpansion
Set err=0
Set cnt=0
For /F "tokens=* delims=" %%a In ('usr list -s') Do Call :_parser "%%a"
If %cnt%==0 Exit
If %cnt%==1 (
   Set choice=1
   GoTo :_OneDrv
)
Call :_show
GoTo :_Select

:_BadSelect
Echo Неверный выбор, повторите...
Ping -n 3 localhost>Nul
Cls
:_Select
Set choice=
Set disconnect=0
Set connect=0
Echo ---------------------------------
Echo Пожалуйста, выберите действие^^!
Echo ---------------------------------
For /L %%i In (1,1,%cnt%) Do (
   If "!status_drv%%i!"=="" (
      Set connect=1
      Echo %%i. Остановить устройство !drv%%i!
   ) Else (
      Set disconnect=1
      Echo %%i. Вернуть устройство !drv%%i! обратно *
   )
)
Echo.
If Not %connect%==0 Echo 0. Остановить все устройства
If Not %disconnect%==0 (
   Echo 9. Вернуть все устройства обратно
   Echo.
   Echo * Это действие также перезагрузит другие,
   Echo   подключенные к USB хабу, устройства
)
Echo.
Set /p choice=Ваш выбор:

If #%choice%==# Exit
If %choice%==0 (
   If %connect%==0 GoTo :_BadSelect
   Call :_hide
   Set cntRet=0
   For /L %%i In (1,1,%cnt%) Do If "!status_drv%%i!"=="" (
      Set /A cntRet +=1
      Set drvc=!drv%%i!
      Set listdrv=!listdrv!~n!fulldrv%%i!
      Call :_Stop !drv%%i!
   )
   If !cntRet!==1 (
      Call :_balloon "Устройство !drvc! остановлено"
   ) Else Call :_balloon "Остановлены устройства:!listdrv!"
   Exit
)
If %choice%==9 (
   If %disconnect%==0 GoTo :_BadSelect
   Call :_hide
   Set cntRet=0
   For /L %%i In (1,1,%cnt%) Do If Not "!status_drv%%i!"=="" (
      Set /A cntRet +=1
      Set drvc=!drv%%i!
      Set listdrv=!listdrv!~n!fulldrv%%i!
      Call :_Return !drv%%i!
   )
   If !cntRet!==1 (
      Call :_balloon "Устройство !drvc! возвращено обратно"
   ) Else Call :_balloon "Возвращены обратно устройства:!listdrv!"
   Exit
)
If "%choice%" GTR "%cnt%" GoTo :_BadSelect
Call :_hide
:_OneDrv
If "!status_drv%choice%!"=="" (
   Call :_Stop !drv%choice%!
   Call :_balloon "Устройство !drv%choice%! остановлено"
) Else (
   Call :_Return !drv%choice%!
   Call :_balloon "Устройство !drv%choice%! возвращено обратно"
)
Exit

:_Return
usr return -d %~1 >Nul
GoTo :EOF

:_Stop
usr stop -d %1 >Nul
Set err=%errorlevel%
If %err%==0 GoTo :EOF
If %err%==2 (
   usr wholocks -d %1>Nul
   Set err=!errorlevel!
   If !err!==5 GoTo :_message
   If !err!==6 GoTo :_message
   Call :_show
   Cls
   Echo Устройство %1 заблокировано и не может быть остановлено.
   Echo.
   Echo Процесс      Файл блокирующего процесса
   Echo =======      ==========================
   Set cntPr=0
   For /F "skip=4 tokens=1*" %%a In ('usr wholocks -d %1') Do Call :_lockproc "%%a" "%%b"
   Echo.
   Echo ---------------------------------
   Echo Пожалуйста, выберите действие^^!
   Echo ---------------------------------
   Echo 0. Отмена всех действий
   If "!cntPr!"=="1" (
      Echo 1. Остановить блокирующий процесс !proc! и повторить операцию
      Echo 2. "Убить" блокирующий процесс !proc! и повторить операцию
   ) Else (
      Echo 1. Остановить ВСЕ блокирующие процессы и повторить операцию
      Echo 2. "Убить" ВСЕ блокирующие процессы и повторить операцию
   )
   Echo.
   Set /P key=Ваш выбор:
   Call :_hide
   If #!key!==# GoTo :EOF
   If !key! LSS 1 GoTo :EOF
   If !key! GTR 2 GoTo :EOF
   If !key!==1 usr forcedstop -d %1 >Nul
   If !key!==2 For /L %%i In (1,1,!cntPr!) Do TaskKill /F /IM !proc%%i!>Nul
   GoTo :_Stop
)
:_message
If %err%==1 Set Mesg=Устройство %1 не найдено
If %err%==3 Set Mesg=Неверный синтаксис команды
If %err%==4 Set Mesg=Неизвестная команда
If %err%==5 Set Mesg=Не найдены процессы блокирующие устройство %1 или оно уже свободно
If %err%==6 Set Mesg=Произошла ошибка при поиске процессов блокирующих устройство %1
Call :_balloon "%Mesg%"
GoTo :EOF

:_lockproc
Set /A cntPr +=1
Set tab=
Set proc=%~1
Set proc!cntPr!=%~1
If "!proc:~7,1!"=="" Set tab=   
Echo %~1   %tab%%~2
GoTo :EOF

:_parser
Set /A cnt +=1
Set ta=%~1
Set fulldrv%cnt%=!ta:~3!
If Not "!ta!"=="!ta:safely removed=!" (
   Set status_drv%cnt%=1
   Set fulldrv%cnt%=!ta:~3,-20!
)
Set ta=!ta:*^(=!
Set drv%cnt%=!ta:~0,2!
GoTo :EOF

:_hide
nircmd win hide ititle "USB Manager"
GoTo :EOF

:_show
nircmd win activate ititle "USB Manager"
nircmd win show ititle "USB Manager"
GoTo :EOF

:_balloon
Start "" nircmd trayballoon "USB Manager" %1 "Zentimo.exe" 5000
Echo 
GoTo :EOF


Батник и дополнительную бесплатную утилиту nircmd.exe нужно положить в папку программы (у меня это c:\Program Files (x86)\Zentimo\). Думаю, что будет работать и с USR при соответствующей правке пути в коде кнопки.
Консольное окно скрыто и появляется только в случае "крайней" необходимости, когда пользователь должен принять решение. Остальные сообщения в виде "баллонов" в трее.
Кнопка работает в режиме тригера, т.е. первое нажатие Отключает USB устройство(а), следующее нажатие Возвращает USB устройство(а).
Кнопка не привязана к конкретной букве USB устройства и работает с любым USB устройством, о котором выдаст нужную информацию usr.exe.

Проверялось на Win7 x64 с установленной и зарегистрированной Zentimo, предполагаю, что и без регистрации и даже с не запущенной программой тоже должно работать, но проверка не завершена. Возможно авторы прольют свет на корректность работы в таком режиме... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Пт апр 01, 2011 11:58 am 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: Вс ноя 18, 2007 12:20 pm
Сообщения: 397
Откуда: Санкт-Петербург
gora писал(а):
Предложу свой вариант кнопки.

Проверялось на Win7 x64 с установленной и зарегистрированной Zentimo, предполагаю, что и без регистрации и даже с не запущенной программой тоже должно работать, но проверка не завершена. Возможно авторы прольют свет на корректность работы в таком режиме... :)

Gora, спасибо за скрипт! Как я понимаю, такой хитрый скрипт пришлось делать лишь потому что в GUI версии Зентимо нет параметра командной строки, позволяющего остановить девайс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Сб апр 02, 2011 10:14 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт фев 05, 2009 3:48 pm
Сообщения: 54
Igor писал(а):
Как я понимаю, такой хитрый скрипт пришлось делать лишь потому что в GUI версии Зентимо нет параметра командной строки, позволяющего остановить девайс?

Не такой уж он и хитрый, просто длинный. :)
Цель была применить (изучить) бесплатную утилиту usr.exe и проверить ее функционирование без "покупки программы".
Кроме этого добавлен вариант "убийства" процесса, удерживающего извлечение. Он для меня более эффективен, хотя я осознаю небезопасность этого метода и не "навязываю" его в скрипте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Ср окт 19, 2011 3:07 pm 
Не в сети

Зарегистрирован: Ср окт 19, 2011 3:04 pm
Сообщения: 2
Добрый день.
У меня стоит 2 панели для кнопок , но они уже заполнены кнопками (программами).
Подскажите пожалуйста как добавить 3 панель .

С ув. Игорь


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Ср окт 19, 2011 4:32 pm 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: Сб фев 28, 2009 10:45 am
Сообщения: 374
Прошу на форуме, посвященном USB Safely Remove, задавать вопросы касательно USB Safely Remove и безопасного извлечения устройств.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Ср окт 19, 2011 5:22 pm 
Не в сети

Зарегистрирован: Ср окт 19, 2011 3:04 pm
Сообщения: 2
ИЗВИНИТЕ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кнопка на бар Total Commander
СообщениеДобавлено: Вс июл 14, 2013 11:42 am 
Не в сети

Зарегистрирован: Пт авг 14, 2009 5:30 am
Сообщения: 5
Откуда: г. Новокузнецк
Интересная тема.
Текущая версия 5.2.1.
Вопрос тот же: "Как настроить кнопку на панели totalcmd, чтобы после нажатия на неё отключался usb-диск без запросов и окон?"
При этом чтобы не использовать сторонних утилит.
Авторы обещали это реализовать в новых версиях.
Сейчас я пользуюсь для этого горячими клавишами, с включённой опцией "Остановить немедленно" - спасибо за такую возможность.
Однако и кнопка на totalcmd тоже нужна. В некоторых случаях её использование было бы удобнее.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
ООО Кристал Рич © 2014 Powered by phpBB ©