Страница 9 из 9

Добавлено: Чт окт 10, 2013 05:05
LonerD
D1P писал(а): Кнопка, вызывающая диалог отключения USB Flash-накопителей и других подобных устройств.

Код: Выделить всё

TOTALCMD#BAR#DATA
RunDll32.exe
shell32.dll,Control_RunDLL hotplug.dll
hotplug.dll
Извлечение флеш-накопителя


-1
Позволяет избежать щёлканья по иконке в трее
А каким образом можно вызвать тот диалог, который отображается при щёлканье по иконке в трее или аналогичный ему по функциональности родной windows-диалог?
Считал, что приведённое решение эквивалентно клику по иконке в трее, оказалось, что это совсем не так. Если через трей устройство (USB-док-станция HDD) извлекается без вопросов, то через диалог, вызванный указанной кнопкой, - ни-ни - "devise is not removable, я такое извлекать ни хАчу и ни буду!".

Добавлено: Пт окт 18, 2013 00:49
LonerD
Похоже мой вопрос не имеет ответа.
Погуглил, в том числе и по сайту Майкрософта - вопрос несколько раз поднимался, но решения так и не было предложено. :(

Добавлено: Сб окт 19, 2013 16:46
Flasher
LonerD
Когда прочитал, первая мысль - это не диалог, а всплывающее меню. Какие ты знаешь вспл. меню, которые вызываются нативной комстрокой? Я таких не знаю.
Поэтому логичным вариантом было обратиться на скриптофорумы AutoIt/AHK. Я видел вариации по теме работы с ОУ. Подразумеваю, что решение где-то имеет место быть.

Добавлено: Пт ноя 01, 2013 00:12
ApceH
LonerD
Тот диалог, по моему, ещё менее удобно использовать, кликать больше придётся.
Я использую прогу RemoveDrive (http://www.uwe-sieber.de/drivetools_e.html) и к ней вот такой скриптик:

Код: Выделить всё

var ws = WScript.CreateObject("WScript.Shell");
if (WScript.Arguments.Count() < 2 || WScript.Arguments(0).substring(1, 2) != ':') { 
 ws.Popup("Скрипт предназначен для запуска из Total Commander!\n\nСкрипт ожидает 2 параметра:\n• путь в текущей панели (можно использовать %P)\n• путь в противоположной панели.",0,"Неправильное использование",16); 
 WScript.Quit(1); 
} 
WScript.Sleep(100);
var SourcePath = WScript.Arguments(0);
var TargetPath = WScript.Arguments(1);
if (TargetPath.substring(0,1) == SourcePath.substring(0,1)) TargetPath = "C:\\";
ws.Run("\"" + ws.ExpandEnvironmentStrings("%COMMANDER_EXE%") + "\" /O /S /L=C:\\ /R=\"" + TargetPath + "\"", 7, true);
ws.Run("\"" + ws.ExpandEnvironmentStrings("%COMMANDER_PATH%") + "\\ADDONS\\RemoveDrive.exe\" " + SourcePath.substring(0, 2)+" -l -e -b", 0, false);
Ну и на кнопке параметры:

Код: Выделить всё

"%P" "%T"
Отлично извлекает и флешки, и USB-HDD, и даже выдвигает CD-ROM. К тому же скрипт предварительно переключается на C: в панелях, где открыта флешка, поэтому извлечение обычно мгновенное.

Добавлено: Сб ноя 02, 2013 03:22
Flasher
ApceH
Несколько неуместный пример. Во-первых, RemoveDrive (о котором LonerD, разумеется, прекрасно знает) тут не раз обсуждалась, а во-вторых, меню выбора на то и нужно, чтобы выбирать определённое устройство для отключения, к тому же есть всплывающие окна результатов без всяких консолей.
Привязка к ТС в скрипте - явное излишество. Я бы, конечно, такой ерундой скрипты не нагружал, коль они и так в папке ТС и понятно, откуда будут запускаться. Кстати, зачем там задержка тоже неясно.

Добавлено: Пн мар 10, 2014 13:13
angry_dog
TViP писал(а):Немного переделал скрипт от Skole под RemoveDrive v2.1
По сравнению с другими утилитами для безопасного извлечения у этой большое преимущество в том что она может показывать какой процесс в данный момент блокирует USB устройство...
После запуска окошко с предложением отключить флешку, а потом ошибка

Код: Выделить всё

Windows Script Host
---------------------------
Сценарий:	C:\Program Files\Total Commander\REMOVEFLASH\RemoveDrive\скрипт.vbs
Строка:	13
Символ:	7
Ошибка:	Не удается найти указанный файл. 
Код:	80070002
Источник: 	(null)
Подскажите, что исправить?

Добавлено: Пн мар 10, 2014 13:47
Flasher
angry_dog
Читаем нижнюю часть памятки.

Добавлено: Пн мар 10, 2014 13:59
angry_dog
Flasher, прочитал все. Путь исправил на свой.
Ошибка на эту строку указывает

Код: Выделить всё

      WSH.Run Exe & objDisk.PNPDeviceID & " -i -h -l -b -w:2000"  
На седьмой символ, а это пробел.

Добавлено: Пн мар 10, 2014 14:05
Flasher
angry_dog
Прочесть - хорошо, а сделать как написано?
В частности:
1) Укажите в новом сообщении на это автору скрипта. Укажите ссылку на нужный пост, если скриптов в топике приведено более одного.
В общем, пока в исходный пост добавляется ссылка на скрипт, привожу редакцию:

Код: Выделить всё

' Отключить запоминающие USB-устройства

'================ Путь к утилите RemoveDrive ================
RD = """%COMMANDER_PATH%\Utils\RemoveDrive\RemoveDrive.exe"""
'============================================================
Dim WSH : Set WSH = CreateObject("WScript.Shell")
For Each Disk In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")._
ExecQuery("SELECT Caption, PNPDeviceID FROM Win32_DiskDrive WHERE InterfaceType = 'USB' AND Partitions = 1")
  If MsgBox("Отключить " & Disk.Caption & " ?", 36, Space(20) & "Безопасное извлечение") = 6 Then _
  WSH.Run RD & " " & Disk.PNPDeviceID & " -i -h -l -b -w:2000", 2, True
Next : Set WSH = Nothing : WScript.Quit

Добавлено: Пн мар 10, 2014 19:04
angry_dog
Извиняюсь, сначала не понял что нужно. Я не указал скрипт, про который спрашиваю. Вот этот - http://forum.wincmd.ru/viewpost.php?p=78370
Спасибо Вам, Flasher
Скопировал Ваш код, сохранил с расширением VBS, запускаю, ошибка. Что я делаю не так? Прошу простить меня за несообразительность.

Добавлено: Пн мар 10, 2014 20:22
Flasher
Исходный пост, надо полагать, этот, а не последующий.
angry_dog писал(а):запускаю, ошибка
Неужели не бросается в глаза кусок с формой "Путь к утилите RemoveDrive"? Логично, что путь должен соответствовать реальному расположению программы.

Добавлено: Пн мар 10, 2014 22:42
angry_dog
Flasher писал(а):Неужели не бросается в глаза кусок с формой "Путь к утилите RemoveDrive"
Спасибо Вам, Flasher за помощь и терпение. Забыл поставить в конце пути. Все получилось! Я люблю этот форум!