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

3

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

Eu não quero dizer usando o argumento dentro do script. O script Ruby não é destacado como um destino de soltar quando o arquivo está sobre o ícone, e soltá-lo apenas reordena os ícones. Eu quero que ele se comporte da mesma forma que os arquivos em lote (ou qualquer outro executável).

    
por Ben Scott 09.10.2010 / 03:01

4 respostas

4

Os tipos de arquivos que podem ter itens soltos neles possuem 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: este é um hack. Brincar com o seu registro pode realmente estragar o seu computador. Se você se importa com seus dados e não confia em mim (assim como você não deveria), faça um backup antes você continua.)

  1. Inicie o editor de registro. É chamado de "regedit". (Se você estiver executando o Vista ou o Windows 7, talvez seja necessário clicar com o botão direito do mouse e "executar como administrador".)
  2. Abra HKEY_CLASSES_ROOT \ batfile \ ShellEx \ DropHandler. Haverá um GUID como o valor padrão. Acontece que é o valor usado pelos arquivos em lote, arquivos EXE e alguns outros. Como não tenho conhecimento de nenhum objeto COM que o Ruby usa, vamos abusar desse. É rotulado no registro como "destino de descarte .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 guid e, em seguida, cancele a 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 de GUI. Se você usar um interpretador Ruby diferente do que eu, ou se você mesmo configurar o manipulador padrão, você poderá encontrar as chaves "rbfile" e / ou "rbwfile" em seu lugar.
  5. Clique com o botão direito em uma das teclas e crie uma nova chave lá chamada "ShellEx", se ela ainda não existir. Em seguida, crie outra chave dentro daquela nova, chamada "DropHandler".
  6. Edite o valor padrão nessa chave DropHandler e cole no GUID que você copiou na etapa 3. Clique em OK.
  7. Repita as etapas 5 e 6 com a outra chave.

Uma vez feito isso, você poderá arrastar arquivos para o seu script.

    
por 09.10.2010 / 10:32
2

Baseado em como-posso-eu-permitir-arquivos-para-cair-em-um-rubi-script-no-windows-explorer / 197624 # 197624 "> resposta , aqui está um arquivo reg que irá configurar drop support para scripts Ruby (não totalmente testado, provavelmente destruirá seu computador) ( gist ):

Windows Registry Editor Version 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}"
    
por 10.10.2010 / 01:47
1

Eu compilei meu programa Ruby por gem OCRA , e ele funciona se eu arrastar "filename.txt" diretamente para o executável compilado arquivo (* .exe) no Windows 7 Explorer. Aqui está o começo 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 você queira dar suporte ao arrastar e soltar nomes de arquivos desconhecidos, tente

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

Nenhuma modificação no registro do Windows ou configuração de programa de abertura padrão é necessária.

    
por 17.12.2014 / 17:36
0

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

Veja aqui como fazer isso.

    
por 09.10.2010 / 06:07