Страница 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);
Ну и на кнопке параметры:
Отлично извлекает и флешки, и 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 за помощь и терпение. Забыл поставить
в конце пути. Все получилось! Я люблю этот форум!