Wie kann ich das Ablegen von Dateien in einem Ruby-Skript im Windows Explorer zulassen?

Wie kann ich das Ablegen von Dateien in einem Ruby-Skript im Windows Explorer zulassen?

Im Windows Explorer (Win7) kann ich eine Datei in eine Batchdatei (.bat) ziehen, und die Batchdatei wird mit dem Pfad zur gezogenen Datei als erstes Befehlszeilenargument ausgeführt. Wie kann ich dasselbe mit einem Ruby-Skript tun?

Ich meine nicht, das Argument innerhalb des Skripts zu verwenden. Das Ruby-Skript wird nicht als Ablageziel hervorgehoben, wenn sich die Datei über dem Symbol befindet, und beim Ablegen werden die Symbole nur neu angeordnet. Ich möchte, dass es sich genauso verhält wie Batchdateien (oder jede andere ausführbare Datei).

Antwort1

Die Dateitypen, auf denen Daten abgelegt werden können, verfügen über Schlüssel in der Registrierung, die Windows mitteilen, wie sie ausgeführt werden sollen. Wenn Sie die Erweiterung Ihres Skripts so eingerichtet haben, dass Ruby das Skript standardmäßig ausführt, haben Sie es schon zur Hälfte geschafft.

(Obligatorische Warnung: Dies ist ein Hack. Wenn Sie an Ihrer Registrierung herumspielen, kann das Ihren Computer gewaltig ruinieren. Wenn Ihnen Ihre Daten überhaupt wichtig sind und Sie mir nicht vertrauen (was Sie auch nicht sollten), erstellen Sie ein Backup, bevor Sie fortfahren.)

  1. Starten Sie den Registrierungseditor. Er heißt „regedit“. (Wenn Sie Vista oder Windows 7 verwenden, müssen Sie möglicherweise mit der rechten Maustaste darauf klicken und „Als Administrator ausführen“ auswählen.)
  2. Öffnen Sie HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Als Standardwert wird eine GUID angezeigt. Dies ist der Wert, der von Batchdateien, EXE-Dateien und einigen anderen verwendet wird. Da ich keine COM-Objekte kenne, die Ruby verwendet, werden wir dieses missbrauchen. Es ist in der Registrierung als „.exe-Drop-Ziel“ gekennzeichnet. Es scheint das Skript zu „starten“ und die Dateinamen als Argumente zu übergeben.
  3. Doppelklicken Sie auf „(Standard)“, um den Wert zu öffnen. Kopieren Sie die GUID und brechen Sie dann das Bearbeitungsfeld ab.
  4. Suchen Sie nun in HKEY_CLASSES_ROOT nach „RubyFile“ und „RubyWFile“. Das erste ist für Konsolenskripte und das zweite scheint für GUI-Skripte zu sein. Wenn Sie einen anderen Ruby-Interpreter als ich verwenden oder den Standardhandler selbst einrichten, finden Sie stattdessen möglicherweise die Schlüssel „rbfile“ und/oder „rbwfile“.
  5. Klicken Sie mit der rechten Maustaste auf einen der Schlüssel und erstellen Sie dort einen neuen Schlüssel namens „ShellEx“, falls dieser noch nicht vorhanden ist. Erstellen Sie dann innerhalb dieses neuen Schlüssels einen weiteren Schlüssel namens „DropHandler“.
  6. Bearbeiten Sie den Standardwert in diesem DropHandler-Schlüssel und fügen Sie die GUID ein, die Sie in Schritt 3 kopiert haben. Klicken Sie auf „OK“.
  7. Wiederholen Sie die Schritte 5 und 6 mit dem anderen Schlüssel.

Sobald dies erledigt ist, sollten Sie Dateien auf Ihr Skript ziehen können.

Antwort2

Bezogen auf@cHau'SAntwort, hier ist eine Reg-Datei, die Drop-Unterstützung für Ruby-Skripte einrichtet (nicht vollständig getestet, wird wahrscheinlich Ihren Computer zerstören) (Kern):

Windows-Registrierungseditor, 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}"

Antwort3

Ich habe mein Ruby-Programm kompiliert vonOCRA-Juwel, und es funktioniert, wenn ich „filename.txt“ direkt auf die kompilierte ausführbare Datei (*.exe) im Windows 7-Explorer ziehe. Hier ist der Anfang meines 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

Wenn Sie Drag & Drop unbekannter Dateinamen unterstützen möchten, können Sie versuchen

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

Es sind keine Änderungen an der Windows-Registrierung oder Standardeinstellungen zum Öffnen von Programmen erforderlich.

Antwort4

Versuchen Sie, Ruby mithilfe der Dateierweiterung als Standardanwendung für diese Skripte festzulegen.

SehenHierwie es geht.

verwandte Informationen