Como posso permitir que arquivos sejam colocados em um script Ruby no Windows Explorer?

Como posso permitir que arquivos sejam colocados em um script Ruby no Windows Explorer?

No Windows Explorer (Win7), posso colocar um arquivo em um arquivo em lote (.bat), e o arquivo em lote é executado com o caminho para o arquivo descartado como o primeiro argumento da linha de comando. Como posso fazer a mesma coisa com um script Ruby?

Não me refiro a usar o argumento dentro do script. O script Ruby não é destacado como destino para soltar quando o arquivo está sobre o ícone, e soltá-lo apenas reordena os ícones. Quero que ele se comporte da mesma forma que os arquivos em lote (ou qualquer outro executável).

Responder1

Os tipos de arquivos que podem conter itens têm chaves no registro para informar ao Windows como executá-los. Se você tiver a extensão do seu script configurada para que Ruby execute o script por padrão, você estará no meio do caminho.

(Aviso obrigatório: isso é um hack. Mexer no seu registro pode bagunçar regiamente o seu computador. Se você se preocupa com seus dados e não confia em mim (e não deveria), faça um backup antes de continuar. )

  1. Inicie o editor de registro. Chama-se "regedit". (Se você estiver executando o Vista ou Windows 7, pode ser necessário clicar com o botão direito e "executar como administrador".)
  2. Abra HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Haverá um GUID como valor padrão. Acontece que é o valor usado por arquivos em lote, arquivos EXE e alguns outros. Como não conheço nenhum objeto COM que Ruby use, vamos abusar deste. Ele está rotulado no registro como "destino para soltar .exe". O que parece fazer é “iniciar” o script, passando os nomes dos arquivos como argumentos.
  3. Clique duas vezes em "(Padrão)" para abrir o valor. Copie o guia e cancele na caixa de edição.
  4. Agora encontre "RubyFile" e "RubyWFile" dentro de HKEY_CLASSES_ROOT. O primeiro é para scripts de console e o último parece ser para scripts GUI. Se você usar um interpretador Ruby diferente do meu, ou se você mesmo configurar o manipulador padrão, poderá encontrar as chaves "rbfile" e/ou "rbwfile".
  5. Clique com o botão direito em uma das chaves e crie uma nova chave chamada "ShellEx" se ela ainda não existir. Em seguida, crie outra chave dentro dessa nova, chamada "DropHandler".
  6. Edite o valor padrão nessa chave DropHandler e cole o GUID que você copiou na etapa 3. Clique em OK.
  7. Repita os passos 5 e 6 com a outra tecla.

Feito isso, você poderá arrastar arquivos para o seu script.

Responder2

Baseado em@cHauderesponder, aqui está um arquivo reg que configurará o suporte drop para scripts Ruby (não totalmente testado, provavelmente destruirá seu computador) (essência):

Editor de registro do Windows versão 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}"

Responder3

Eu compilei meu programa Ruby porJóia OCRA, e funciona se eu arrastar "filename.txt" diretamente para o arquivo executável compilado (*.exe) no Windows 7 Explorer. Aqui está o início do meu 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

Caso queira suportar arrastar e soltar nomes de arquivos desconhecidos, você pode tentar

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

Não são necessárias modificações no registro do Windows ou configuração padrão do programa de abertura.

Responder4

Tente definir Ruby como o aplicativo padrão para esses scripts, usando a extensão do arquivo.

Veraquicomo fazer isso.

informação relacionada