2010年3月1日月曜日

Ruby:Windowsのクリップボード

RubyからWindowsのクリップボードを扱いたいと思い、探してみましたが結構面倒なんですね(^^;

ここのWin32Utilsというツールを使うとよいようです。wxRubyのコンボボックスで選択した値をクリップボードに入れたかったのですが、ComboBox#copy で出来るように書いてあるのですが出来ませんでした。それで、
クリップボードを利用する
にお世話になり、Win32Utilsをインストールしました。
あと、
クリップボードを操作する
Ruby/クリップボードを使う方法
を参照させていただきました。ありがとうございました。

以下、インストール履歴です。まず何もインストールせずにirb(Rubyインタラクティブ環境)で確認します。


>irb
irb(main):001:0> require 'win32/clipboard'
LoadError: no such file to load -- win32/clipboard
from (irb):1:in `require'
from (irb):1
from C:/ruby1.8.7/bin/irb.bat:20:in `'
irb(main):002:0> quit

とエラーが出ます。
で、Rubyインストールフォルダ以下の「lib\ruby\1.8\win32」にwin32-clipboard-0.5.2.zipをdlして解凍し、その中のlib/win32ディレクトリにあるclipboard.rbを入れます。
すると

irb(main):001:0> require 'win32/clipboard'
LoadError: no such file to load -- windows/clipboard
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1
from (irb):1:in `require'
from (irb):1
from :0

となりますので、今度はwindows-pr-1.0.8.zipの中のlib/windows/clipboard.rbを入れます。
irb(main):002:0> require 'win32/clipboard'
LoadError: no such file to load -- windows/api
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1
from (irb):2:in `require'
from (irb):2
from :0

まだまだ終わりません(^^; 今度はwindows-api-0.4.0.zipからlib/windows/api.rbを入れます。
irb(main):004:0> require 'win32/clipboard'
LoadError: no such file to load -- win32/api
from C:/ruby1.8.7/lib/ruby/1.8/windows/api.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/windows/api.rb:1
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1
from (irb):4:in `require'
from (irb):4
ということで最後にwin32-api-1.4.5.zipから・・・と思ったらここにapi.rbなんてない!(^^;
そこでgemで次のようにしてみました。

c:\>gem install win32-api
Successfully installed win32-api-1.4.6-x86-mswin32-60
1 gem installed
Installing ri documentation for win32-api-1.4.6-x86-mswin32-60...
Installing RDoc documentation for win32-api-1.4.6-x86-mswin32-60...
で、再びirbです。

C:\>irb
irb(main):001:0> require 'win32/clipboard'
LoadError: no such file to load -- win32/api
from C:/ruby1.8.7/lib/ruby/1.8/windows/api.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/windows/api.rb:1
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/windows/clipboard.rb:1
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1:in `require'
from C:/ruby1.8.7/lib/ruby/1.8/win32/clipboard.rb:1
from (irb):1:in `require'
from (irb):1
from :0

まだだめ(^^; 

ここでC:\ruby1.8.7(Rubyインストールディレクトリ)\lib\ruby\gems\1.8\gems\win32-api-1.0.4-mswin32\lib\win32にあるapi.soをC:\ruby1.8.7\lib\ruby\1.8\win32の下にコピー。
すると、

irb(main):002:0> require 'win32/clipboard'
=> true
irb(main):003:0> include Win32
=> Object
irb(main):004:0> puts "Clipboard data is :" + Clipboard.data
Clipboard data is :puts "Clipboard data is :" + Clipboard.data
=> nil
irb(main):005:0> Clipboard.data
=> "puts \"Clipboard data is :\" + Clipboard.data"
irb(main):006:0> Clipboard.set_data("123")
=> Win32::Clipboard
irb(main):007:0> quit

めでたくクリップボードが使えるようになりました(^^V
各ライブラリのインストール先などはもっといいところがあるのかもしれません。

2 件のコメント:

匿名 さんのコメント...

ありがとうございます。
おかげさまでClipboardを
インストールできました。

Oz さんのコメント...

よかったですね(っていつの回答だ(^^;)すみません。コメントに気づきませんでした(^^; どうやったらコメントがついたときにわかるようになるのでしょう??

ライブラリを自在に使うにはなんだかんだ導入しないといけないので、ネットを調べまくらないといけませんね。毎度苦労しています。少しでもお役に立てたとあって喜んでおります。