Rubyからクリップボードを操作する方法


Ruby から Windows のクリップボードを操作する方法を紹介します。
(最後にそれを利用したお勧めのスクリプトを紹介します。)

次の二つの方法を説明します。

扱うクリップボードのデータがASCIIコードだけの場合には、win32-clipboard の方が簡単なのでお勧めです。しかし、ASCII以外の文字も扱いたい場合には、AutoITX3 を使う方が無難です。win32-clipboard では以下の様なエラーが発生することがあります。(win32-clipboard 0.5.2 にて確認しました。)

C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-clipboard-0.5.2/lib/win32/clipboard.rb:123:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/win32-clipboard-0.5.2/lib/win32 /clipboard.rb:123:in `data'


win32-clipboard の使い方

  1. インストール

    まだインストールしていない場合には、gemコマンドでインストールします。

    > gem install win32-clipboard
  2. クリップボードのデータの読み書き

    require 'win32/clipboard' puts Win32::Clipboard.data # クリップボードのデータを取得 Win32::Clipboard.set_data("string to set") # クリップボードにデータを設定
    ASCIIコード以外は正しく扱えないようです。

    詳しくはこちら
    または、win32-clipboardに付属のREADMEを参照

AutoITX の使い方

こちらは日本語も正しく扱えます。

  1. インストール

    まだインストールしていない場合には、AutoITX のインストーラをダウンロードして、インストールする。
    http://www.autoitscript.com/site/autoit/downloads/

  2. クリップボードのデータの読み書き

    # coding: UTF-8 require 'win32ole' itx = WIN32OLE.new("AutoITX3.Control") puts itx.ClipGet # クリップボードのデータを取得 itx.ClipPut("セットする文字列") # クリップボードにデータを設定

    詳しくはインストーラに付属のヘルプファイルを参照

標準入力の内容をクリップボードにセットするスクリプト

以下のスクリプトにパスを通しておくと、たまに役立ちます。

:ruby:
require 'win32ole'

WIN32OLE.new("AutoITX3.Control").ClipPut($stdin.read)

[amazon asin="4839926689" /]

カテゴリー: 記事 タグ: , パーマリンク

コメントを残す