Как разрешить перетаскивание файлов в скрипт Ruby в проводнике Windows?

Как разрешить перетаскивание файлов в скрипт Ruby в проводнике Windows?

В проводнике Windows (Win7) я могу перетащить файл в пакетный файл (.bat), и пакетный файл будет выполнен с путем к перетащенному файлу в качестве первого аргумента командной строки. Как сделать то же самое со скриптом Ruby?

Я не имею в виду использование аргумента внутри скрипта. Скрипт Ruby не выделяется как цель перетаскивания, когда файл находится над значком, и его перетаскивание просто меняет порядок значков. Я хочу, чтобы он вел себя так же, как пакетные файлы (или любой другой исполняемый файл).

решение1

Типы файлов, на которые можно что-то сбрасывать, имеют ключи в реестре, сообщающие Windows, как их запускать. Если расширение вашего скрипта настроено так, что Ruby запускает скрипт по умолчанию, то вы на полпути.

(Обязательное предупреждение: это взлом. Вмешательство в реестр может серьезно испортить ваш компьютер. Если вы хоть немного заботитесь о своих данных и не доверяете мне (а вам не следует доверять), сделайте резервную копию, прежде чем продолжить.)

  1. Запустите редактор реестра. Он называется «regedit». (Если вы используете Vista или Windows 7, вам может потребоваться щелкнуть правой кнопкой мыши и «запустить от имени администратора».)
  2. Откройте HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Там будет GUID в качестве значения по умолчанию. Это значение используется пакетными файлами, EXE-файлами и некоторыми другими. Поскольку я не знаю ни об одном COM-объекте, который использует Ruby, мы собираемся использовать его. Он помечен в реестре как ".exe drop target". Похоже, что он "запускает" скрипт, передавая имена файлов в качестве аргументов.
  3. Дважды щелкните "(По умолчанию)", чтобы открыть значение. Скопируйте guid, а затем отмените в поле редактирования.
  4. Теперь найдите "RubyFile" и "RubyWFile" внутри HKEY_CLASSES_ROOT. Первый из них для консольных скриптов, а последний, похоже, для GUI-скриптов. Если вы используете другой интерпретатор Ruby, чем я, или если вы сами настроили обработчик по умолчанию, вы можете найти ключи "rbfile" и/или "rbwfile".
  5. Щелкните правой кнопкой мыши по одному из ключей и создайте новый ключ с именем "ShellEx", если он еще не существует. Затем создайте еще один ключ внутри этого нового ключа с именем "DropHandler".
  6. Измените значение по умолчанию в этом ключе DropHandler и вставьте GUID, скопированный на шаге 3. Нажмите «ОК».
  7. Повторите шаги 5 и 6 с другим ключом.

После этого вы сможете перетаскивать файлы в свой скрипт.

решение2

На основе@cHau'sотвечать, вот reg-файл, который настроит поддержку сброса для скриптов Ruby (не полностью протестирован, вероятно, уничтожит ваш компьютер) (суть):

Редактор реестра Windows версии 5.00

[HKEY_CLASSES_ROOT\rbfile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\rbwfile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\RubyFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\RubyWFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

решение3

Я скомпилировал свою программу Ruby с помощьюOCRA драгоценный камень, и это работает, если я перетаскиваю "filename.txt" непосредственно на скомпилированный исполняемый файл (*.exe) в проводнике Windows 7. Вот начало моего Ruby:

reports='filename.txt' #Opening the file
f = File.open('output.txt', 'w')
File.readlines(reports).each do |line|
   #processing, such as f.puts
end

Если вам нужна поддержка перетаскивания неизвестных имен файлов, вы можете попробовать

filename = Dir.entries('.').detect {|z| z.match / whatever pattern or extension  /}
File.open(filename.to_s, 'w')

Не требуется вносить изменения в реестр Windows или настраивать программу открытия по умолчанию.

решение4

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

Видетьздеськак это сделать.

Связанный контент