人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: keijun5145
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● lang_and_engine
ベストアンサー

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

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

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

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

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


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

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


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


lang_and_engineさんのコメント
方法3に補足・・・拙筆ですが,WSHで画面キャプチャしてペイントで保存するコードをむかし公開しました。 下記のようなコードをVBSで書いたのでしょうか? 画面をコマンドラインからキャプチャする方法 (WSHバッチでPrintScreen) http://d.hatena.ne.jp/language_and_engineering/20081121/1227203100

keijun5145さんのコメント
1?2はVBAで実施しています。 ※ファイル編集、画面切り替え、プリントスクリーンまではVBAです。 以下、当該VBSのコードです。 Option Explicit Dim xlsa Dim pt Dim FileName Dim paintexe Dim objExecCmd 'エクセルの数値を反映 Set xlsa = WScript.CreateObject("Excel.Application") xlsa.visible = true 'mergeというマクロをファイル名.xlsmを開いて実行 xlsa.Run "'" & "C:\Users\Owner\Desktop\trimming\ファイル名.xlsm" & "'!" & "merge" '------------------以下保留------------------ 'ペイントを起動する!! 'Set pt = CreateObject("WScript.Shell") 'paintexe = "mspaint.exe" 'Set objExecCmd = pt.Exec(paintexe) ※ペイントを起動してからWScript.SleepやWScript.Timeoutを使ってもアクティブになる前に終了してしまいます。 方法としては一定時間待ってAlt+TABをSendkeysで出してやればアクティブ化はできるかと思ったのですが…何度やってもうまく行きません。どうすれば良いでしょう?

lang_and_engineさんのコメント
怪しい点がいくつか (1)一つ上のコメントのURL内のサンプルコード中に書きましたように,AppActivateしていますか? (2)mergeというマクロの実行後,VBS側でSleepしていますか? (3)そのVBSをCUIで実行してください。思った結果が得られるよりも前に終了してしまっている場合,エラーメッセージが出てくることもあります。なにかエラーメッセージは出てきますか? コマンドプロンプトで cscript a.vbs のように実行します。出力を確かめてください。

lang_and_engineさんのコメント
あとは別の手ですが, もし自分が同じ処理を実装するとしたら,プリントスクリーン+ペイントは不安定になりそうなので使わないですね。 (方法4)VBAマクロで,ブック内のShapeを画像ファイルとして保存する。 プリントスクリーンは使わない。 選択範囲を画像として保存(高画質) | ヴィーバ VeaBa! Excel VBA Tips http://veaba.keemoosoft.com/2013/04/591/ -Export

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

lang_and_engineさんのコメント
最初のコメントに記載したURL内の解説で,下記のようなくだりがあります。 ?? アプリケーションにキー操作のメッセージを送るためには,そのアプリケーションがアクティブになっている必要がある。 そして,アプリケーションのウィンドウをアクティブにするためには,WSHでは AppActivate を使う。 しかしこの AppActivate は,「ダブルクリック等でスクリプトを起動」という状況ではエクスプローラにフォーカスが行ってしまい,失敗する。 (ファイルを選択してEnterキーを押下した場合も同じ。) ?? ということですが,今回はVBSをどうやって実行しているのでしょうか? →どこにVBSファイルを置いているのか。ダブルクリックでフォルダ上のVBSをじかに起動しているのか(=アクティブ状態に関連して問題がおきやすい)。それとも,BATやコマプロ上からCUIでWSHを起動しているのか。

質問者から

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


2 ● TransFreeBSD

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

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以外なら、何らかの問題が起きてます。
こういうのはエラーが起きないよう、またエラーが発生してないかと、状況と結果を逐一確認していく事が中心になります。
根気よく行きましょう。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ