重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以前にも質問させていただき、systemでRubyのプログラムからペイントを開くことができました。

もう一つ質問ですが、プログラムから開いたペイントを操作することは可能でしょうか?

具体的には画像のサイズ変更をしたいです。


system("C:/Windows/System32/mspaint.exe","sam.jpg")
このようにsam.jpgを開く段階まではできました。

A 回答 (2件)

windowsで他のアプリケーションを直接操作するのは、それなりに大変です。



(1) rubyライブラリに専用ライブラリが用意されていればそちらを使う。
(2) コマンドラインで操作可能なものは、systemなどでコマンドラインオプションを駆使する
 → mspaintでは開くファイルしか指定できないかも?
(3) OLE(COM)に対応しているものは、OLE/COM(rubyならwin32ole)で操作する
 → mspaintは対応してなかったかと
(4) その他、方法がなければwin32apiを使って(マウスクリックやキーボード操作等の)メッセージを送信して操作する
 rubyに限らず、どの言語でもwin32apiの専門知識が必要とされます
 マウスやキーボードで可能なことは何でも送信できますが、いろいろな前処理(ウィンドウハンドルの取得など)
 が必要ですし後処理が必要な場合もあります。
 → rubyならwin32apiライブラリ、rubyに限らず、VBでもperlでも特化言語以外はかなり非効率的かと思います。
win32api - rubyリファレンス
http://www.ruby-lang.org/ja/old-man/html/Win32AP …

ですので、代案として
(1) rubyのライブラリを使ってリサイズする (#1の方の回答をご参照ください)
(2) コマンドラインで完結するアプリケーションでリサイズする
(3) OLEが使用可能(使ったことないけどphotoshopとかかな?)なアプリケーションでリサイズする
win32ole活用法
 http://jp.rubyist.net/magazine/?0003-Win32OLE
(4) win32apiプログラムに特化した言語(uwsc等)のスクリプトを起動してリサイズのメッセージを送信する
(これだと、ruby使う意味が全く無いですが)
などがあるかと思います。
    • good
    • 0

systemって、Windowsでの操作で言えば「sam.jpgを右クリックして『アプリケーションを指定して→Paint』」と同じようなものです。

それ以降の操作はPaint側でやる必要があります。
ちょっと調べましたが、Paintを外部から制御するのは、キーコードを送るくらいしか無さそうです。Excelとかだとw32oleモジュールで操作できたりしますが。

で、目的が「画像サイズの変更」だけなら、ペイントなぞ使わず、Ruby(+一部外部ライブラリ)だけでやる方法がよいのでは?

例えば、コマンドラインでの画像編集ソフトであるImageMagicKをRubyで使う RMagicKを使うとか
http://gihyo.jp/dev/serial/01/ruby/0026
    • good
    • 0
この回答へのお礼

ありがとうございます。

もう一つ質問したいのですが、コンソール上で

>gem search -r rmagick


と入力すると

ERROR: http://rubygems.org/ does not appear to be a repository
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
Errno::ETIMEDOUT: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなか
ったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立
された接続は失敗しました。 - connect(2) (http://rubygems.org/yaml)

とエラーが出てしまいます。。

何が原因なのでしょうか。

お礼日時:2011/08/06 16:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!