如何允许文件被拖放到 Windows 资源管理器中的 Ruby 脚本上

如何允许文件被拖放到 Windows 资源管理器中的 Ruby 脚本上

在 Windows 资源管理器 (Win7) 中,我可以将文件拖放到批处理 (.bat) 文件中,然后使用拖放文件的路径作为第一个命令行参数来执行批处理文件。如何使用 Ruby 脚本执行相同的操作?

我的意思不是在脚本中使用参数。当文件位于图标上方时,Ruby 脚本不会突出显示为放置目标,而将其放置只会重新排列图标。我希望它的行为与批处理文件(或任何其他可执行文件)相同。

答案1

可以放置内容的文件类型在注册表中具有键,用于告诉 Windows 如何运行它们。如果您已设置脚本的扩展,以便 Ruby 默认运行该脚本,那么您就成功了一半。

(必须警告:这是黑客行为。弄乱你的注册表可能会严重损坏你的计算机。如果你非常关心你的数据并且不相信我(你也不应该相信我),请在继续之前进行备份。)

  1. 启动注册表编辑器。它的名字是“regedit”。(如果您运行的是 Vista 或 Windows 7,则可能需要右键单击它并选择“以管理员身份运行”。)
  2. 打开 HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler。将有一个 GUID 作为默认值。它恰好是批处理文件、EXE 文件和其他一些文件使用的值。由于我不知道 Ruby 使用任何 COM 对象,我们将滥用这个。它在注册表中被标记为“.exe 放置目标”。它似乎所做的是“启动”脚本,将文件的名称作为参数传递。
  3. 双击“(默认)”打开值。复制 guid,然后取消编辑框。
  4. 现在在 HKEY_CLASSES_ROOT 中找到“RubyFile”和“RubyWFile”。第一个用于控制台脚本,后者似乎用于 GUI 脚本。如果您使用的 Ruby 解释器与我不同,或者您自己设置了默认处理程序,您可能会找到键“rbfile”和/或“rbwfile”。
  5. 右键单击其中一个键,如果尚不存在,则在其中创建一个名为“ShellEx”的新键。然后在该新键内创建另一个名为“DropHandler”的键。
  6. 编辑 DropHandler 键中的默认值,并粘贴您在步骤 3 中复制的 GUID。单击“确定”。
  7. 用另一个键重复步骤 5 和 6。

完成后,您应该能够将文件拖到脚本上。

答案2

基于@cHau回答,这是一个 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”直接拖到 Windows 7 资源管理器中已编译的可执行文件 (*.exe) 上,它就会起作用。这是我的 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 设置为此脚本的默认应用程序。

这里怎么做。

相关内容