ImageMagickでクリップボード上の画像を保存することは可能??

現在、以下の流れをVBSを使用することで自動化することを検討しています。
1.VBAを使ってExcelファイルを編集
2.編集後の画面をプリントスクリーン
3.画像を保存
4.画像をトリミング

1,2,4はVBSやバッチで組むことはできたのですが、
3ができるのかどうか不明です。
※mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがあることからやめようと思っています。

プリントスクリーンでクリップボードにコピー状態になっている画像をImageMagickで保存することはできるのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/12/25 13:09:29
  • 終了:2015/01/01 13:10:04

ベストアンサー

id:language_and_engineering No.1

lang_and_engine回答回数170ベストアンサー獲得回数632014/12/25 14:25:26

こんにちは。自動化の方針があまりよろしくないような気がしますが・・・

(方法その1)
エクセルをHTML形式で保存すれば,画像を抜き出せます。なので,プリントスクリーンする必要はありません。

WordやExcelに貼り付けられた画像を一発で抜き取る方法 [self reblog]※情報古いです | マイペースクリエイターの覚え書き
http://mypacecreator.net/blog/archives/1319

  • 「ファイル>Webページとして保存」で一発解決!! Webページとして保存することで、埋め込み前のサイズのデータが吐き出されます。 たったこれだけ!


(方法その2)
あえてエクセルの画面をキャプチャしたいとしても,低機能なプリントスクリーンコマンドをじかに使うのではなく,高機能なキャプチャソフト(フリーソフト)で,キャプチャと同時に画像ファイルとして保存されるようにすればよいです。そのソフトのCUI呼び出しをVBSから書けばよいですね。そして保存された画像に対してトリミングなどの処理を走らせると。

→「CUI 画面キャプチャ 保存 フリーソフト」でお好みのソフトをお探しください


(方法その3)ペイントで済ませる。
>mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがある

どんなコードを書いた結果,ペイントではうまくいかなかったのでしょうか?コードを提示していただければ,改善できる可能性もあります。できればペイント貼り付けは避けたほうが良いですけどね。。


GUIの関わる自動化って,安定させるのがとにかく難しいですよね。CUIでできるだけ済ませるのが近道です。
ではよろしくお願いします。

他4件のコメントを見る
id:keijun5145

(1)…AppActivateを記述しましたが、ペイントがアクティブになるのではなく、タスクバー上のペイントのアイコンが黄色?のように点滅するだけでアクティブにはなりません。
(2)…しています。さらにVBSで実行している(記述している)Batファイルの1行目にもTimeoutを入れています。
(3)…会社のPCにファイルがあるので、明日確認してみます。
※AppActivateがうまくいけばあとはSendkeysで何とかできる気がするのですが…

2014/12/25 22:30:54
id:language_and_engineering

最初のコメントに記載したURL内の解説で,下記のようなくだりがあります。

~~

アプリケーションにキー操作のメッセージを送るためには,そのアプリケーションがアクティブになっている必要がある。

そして,アプリケーションのウィンドウをアクティブにするためには,WSHでは AppActivate を使う。

しかしこの AppActivate は,「ダブルクリック等でスクリプトを起動」という状況ではエクスプローラにフォーカスが行ってしまい,失敗する。

(ファイルを選択してEnterキーを押下した場合も同じ。)

~~

ということですが,今回はVBSをどうやって実行しているのでしょうか?

→どこにVBSファイルを置いているのか。ダブルクリックでフォルダ上のVBSをじかに起動しているのか(=アクティブ状態に関連して問題がおきやすい)。それとも,BATやコマプロ上からCUIでWSHを起動しているのか。

2014/12/26 11:16:37

その他の回答(1件)

id:language_and_engineering No.1

lang_and_engine回答回数170ベストアンサー獲得回数632014/12/25 14:25:26ここでベストアンサー

こんにちは。自動化の方針があまりよろしくないような気がしますが・・・

(方法その1)
エクセルをHTML形式で保存すれば,画像を抜き出せます。なので,プリントスクリーンする必要はありません。

WordやExcelに貼り付けられた画像を一発で抜き取る方法 [self reblog]※情報古いです | マイペースクリエイターの覚え書き
http://mypacecreator.net/blog/archives/1319

  • 「ファイル>Webページとして保存」で一発解決!! Webページとして保存することで、埋め込み前のサイズのデータが吐き出されます。 たったこれだけ!


(方法その2)
あえてエクセルの画面をキャプチャしたいとしても,低機能なプリントスクリーンコマンドをじかに使うのではなく,高機能なキャプチャソフト(フリーソフト)で,キャプチャと同時に画像ファイルとして保存されるようにすればよいです。そのソフトのCUI呼び出しをVBSから書けばよいですね。そして保存された画像に対してトリミングなどの処理を走らせると。

→「CUI 画面キャプチャ 保存 フリーソフト」でお好みのソフトをお探しください


(方法その3)ペイントで済ませる。
>mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがある

どんなコードを書いた結果,ペイントではうまくいかなかったのでしょうか?コードを提示していただければ,改善できる可能性もあります。できればペイント貼り付けは避けたほうが良いですけどね。。


GUIの関わる自動化って,安定させるのがとにかく難しいですよね。CUIでできるだけ済ませるのが近道です。
ではよろしくお願いします。

他4件のコメントを見る
id:keijun5145

(1)…AppActivateを記述しましたが、ペイントがアクティブになるのではなく、タスクバー上のペイントのアイコンが黄色?のように点滅するだけでアクティブにはなりません。
(2)…しています。さらにVBSで実行している(記述している)Batファイルの1行目にもTimeoutを入れています。
(3)…会社のPCにファイルがあるので、明日確認してみます。
※AppActivateがうまくいけばあとはSendkeysで何とかできる気がするのですが…

2014/12/25 22:30:54
id:language_and_engineering

最初のコメントに記載したURL内の解説で,下記のようなくだりがあります。

~~

アプリケーションにキー操作のメッセージを送るためには,そのアプリケーションがアクティブになっている必要がある。

そして,アプリケーションのウィンドウをアクティブにするためには,WSHでは AppActivate を使う。

しかしこの AppActivate は,「ダブルクリック等でスクリプトを起動」という状況ではエクスプローラにフォーカスが行ってしまい,失敗する。

(ファイルを選択してEnterキーを押下した場合も同じ。)

~~

ということですが,今回はVBSをどうやって実行しているのでしょうか?

→どこにVBSファイルを置いているのか。ダブルクリックでフォルダ上のVBSをじかに起動しているのか(=アクティブ状態に関連して問題がおきやすい)。それとも,BATやコマプロ上からCUIでWSHを起動しているのか。

2014/12/26 11:16:37
id:keijun5145

WScript.Sleepで15秒間を空けてファイルを手入力で保存してVBSがやがて動くようにしたのですが、保存したファイルがVBSで認識できていないのか、VBSの中で起動しているBATファイルがうまくファイルを読んでくれません。

id:TransFreeBSD No.2

TransFreeBSD回答回数664ベストアンサー獲得回数2662014/12/25 21:41:58

#なんか言い出しっぺの気がしますので本題の所を...

http://sharp-bang.jp/prog/im.html

convert clipboard: clip_saved.png

トリミング(crop)も同時に出来ます。
http://takuya-1st.hatenablog.jp/entry/20120411/1334169320

convert -crop 960x720+160+0 clipboard: clipcrop_saved.png

vbsからは

Dim WshShell
Dim saved_filename
Dim returncode
Const SHOWMINIMIZED = 7
Const Convert = """c:\path\to\convert"""
Const CropSize = "960x720+160+0"
saved_filename = """c:\other\to\clipcrop_saved.png"""

Set WshShell = WScript.CreateObject("WScript.Shell")
returncode = WshShell.Run(Convert & " -crop " & CropSize & " clipboard: " & saved_filename, SHOWMINIMIZED, true)
If returncode <> 0 Then
  MsgBox "convert return code: " & returncode
End If

こんな感じでしょうか。
resultが0以外なら、何らかの問題が起きてます。
こういうのはエラーが起きないよう、またエラーが発生してないかと、状況と結果を逐一確認していく事が中心になります。
根気よく行きましょう。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません