如何允許將檔案拖曳到 Windows 資源管理器中的 Ruby 腳本上

如何允許將檔案拖曳到 Windows 資源管理器中的 Ruby 腳本上

在 Windows 資源管理器 (Win7) 中,我可以將文件拖放到批次 (.bat) 檔案中,然後執行批次文件,並將拖放文件的路徑作為第一個命令列參數。我怎麼才能用 Ruby 腳本做同樣的事情?

我的意思不是在腳本中使用參數。當文件位於圖示上方時,Ruby 腳本不會突出顯示為放置目標,放置它只會對圖示重新排序。我希望它的行為與批次檔(或任何其他可執行檔)相同。

答案1

可以放置內容的檔案類型在註冊表中具有告訴 Windows 如何運行它們的鍵。如果您設定了腳本的擴展,以便 Ruby 預設運行該腳本,那麼您就成功了一半。

(強制性警告:這是駭客攻擊。弄亂您的註冊表可能會徹底搞砸您的電腦。如果您非常關心您的資料並且不信任我(也不應該),請在繼續之前進行備份。 )

  1. 啟動註冊表編輯器。它被稱為“註冊表”。 (如果您使用的是 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 設定為該腳本的預設應用程式。

這裡怎麼做。

相關內容