¿Cómo puedo permitir que los archivos se coloquen en un script Ruby en el Explorador de Windows?

¿Cómo puedo permitir que los archivos se coloquen en un script Ruby en el Explorador de Windows?

En Windows Explorer (Win7), puedo colocar un archivo en un archivo por lotes (.bat) y el archivo por lotes se ejecuta con la ruta al archivo soltado como primer argumento de la línea de comando. ¿Cómo puedo hacer lo mismo con un script Ruby?

No me refiero a usar el argumento dentro del guión. El script Ruby no se resalta como destino para soltar cuando el archivo está sobre el ícono, y al soltarlo simplemente se reordenan los íconos. Quiero que se comporte igual que los archivos por lotes (o cualquier otro ejecutable).

Respuesta1

Los tipos de archivos a los que se les pueden caer cosas tienen claves en el registro para indicarle a Windows cómo ejecutarlos. Si tiene la extensión de su script configurada para que Ruby ejecute el script de forma predeterminada, entonces está a mitad del camino.

(Advertencia obligatoria: esto es un truco. Jugar con su registro puede arruinar su computadora. Si le importan sus datos y no confía en mí (y tampoco debería hacerlo), haga una copia de seguridad antes de continuar. )

  1. Inicie el editor de registro. Se llama "regedit". (Si está ejecutando Vista o Windows 7, es posible que deba hacer clic derecho y "ejecutar como administrador".)
  2. Abra HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Habrá un GUID como valor predeterminado. Resulta ser el valor utilizado por archivos por lotes, archivos EXE y algunos otros. Como no conozco ningún objeto COM que utilice Ruby, abusaremos de este. Está etiquetado en el registro como "destino de colocación .exe". Lo que parece hacer es "iniciar" el script, pasando los nombres de los archivos como argumentos.
  3. Haga doble clic en "(Predeterminado)" para abrir el valor. Copie la guía y luego cancele fuera del cuadro de edición.
  4. Ahora busque "RubyFile" y "RubyWFile" dentro de HKEY_CLASSES_ROOT. El primero es para scripts de consola y el segundo parece ser para scripts de GUI. Si utiliza un intérprete de Ruby diferente al mío, o si configura el controlador predeterminado usted mismo, puede encontrar las claves "rbfile" y/o "rbwfile" en su lugar.
  5. Haga clic derecho en una de las claves y cree una nueva clave llamada "ShellEx" si aún no existe. Luego cree otra clave dentro de esa nueva, llamada "DropHandler".
  6. Edite el valor predeterminado en esa clave DropHandler y pegue el GUID que copió en el paso 3. Haga clic en Aceptar.
  7. Repita los pasos 5 y 6 con la otra llave.

Una vez hecho esto, deberías poder arrastrar archivos a tu script.

Respuesta2

Residencia en@cHau'srespuesta, aquí hay un archivo de registro que configurará el soporte para scripts de Ruby (no probado completamente, probablemente destruirá su computadora) (esencia):

Editor del Registro de Windows Versión 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}"

Respuesta3

Compilé mi programa Ruby porgema ocra, y funciona si arrastro "nombre de archivo.txt" directamente al archivo ejecutable compilado (*.exe) en el explorador de Windows 7. Aquí está el comienzo de mi 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

En caso de que desee admitir la función de arrastrar y soltar nombres de archivos desconocidos, puede intentar

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

No se requieren modificaciones en el registro de Windows ni configuración predeterminada del programa de apertura.

Respuesta4

Intente configurar Ruby como la aplicación predeterminada para estos scripts, utilizando la extensión del archivo.

Veraquícómo hacerlo.

información relacionada