2013年09月08日

VBA:IEの画面をキャプチャする手順

ソースは緑里庵のサイトを参照。
gooのトップページをキャプチャした画像。goo.bmp(9.26MB)
1.InternetExplorerオブジェクトを取得
IEを新規に開くか、すでに開いているIEを取得する。
2.IEの表示部分のWindowハンドルを取得
IEのWindowハンドルから子ウインドウをクラス名で辿る。
"Frame Tab" → "TabWindowClass" → "Shell DocObject View"
3.2で取得したWindowハンドルからBitmapを作成
2のWindowハンドルからDCを取得 → 互換DCを作成 → 互換DCの互換Bitmapを作成。作成するBitmapの幅と高さは、document.body.scrollWidth / scrollHeight
4.IEのDCから互換DCへ描画
ドキュメントが1画面に収まらない場合は、描画 → スクロール → 描画 …と繰り返す。
5.Bitmapを保存する
クリップボードにコピーする場合はBitmapハンドルを渡すだけ。
ファイルに作成する場合は、ヘッダーを作成しBitmapをバッファに取得して書き込む。
posted by 忘却の達人 at 09:49| Comment(5) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
使わせていただきました。
高速だし、すばらしいです!

公開していただきありがとうございます。

・画像にマウスカーソルを合成させる
・スクロール位置を元に戻す
という機能追加をしたいと思っているのですが、
自分ではできないまま、一か月がたってしまいました。

もしよろしければアドバイスいただけないでしょうか。

キャプチャ前の、スクロール位置を取得したいのですが、
どうしても scrollTop プロパティが取得できず0が帰ってきます。。

ウォッチで見るとみられるのですが。。

もしお時間ある時に、
アドバイスいただけると嬉しいです。
Posted by かえる at 2015年06月19日 15:22
コメントありがとうございます。

scrollTopはdocument.documentElement.scrollTopで取得できます。

マウスカーソルの合成は、WindowsAPIのGetCursorとDrawIconを使えばできると思います。
Posted by 緑里庵 at 2015年06月21日 11:59
ありがとうございます!
仕事場でしか見られないので(普通は逆)
お返事が遅くなり申し訳ありません。

で、できました!
教えていただいた書き方でScrollTopが取得できました!

本当にありがとうございます。
なんて素敵なひとだ。。
感動しました。。

(それにしても、相当さがしましたが、
 インターネットで見つけられなかったのですが。。)
Posted by かえる at 2015年06月23日 18:43
今の案件に使わせて頂きました。
大変素晴らしく、こんな凄いものを公開して頂き有難うございます。

ですが、問題が発生してしまいました。
私の開発環境では、IE10までだったので、問題なくキャプチャーされていたのですが、
お客様の環境がIE11になり、キャプチャーして貼り付けた画像が真っ白な状態になりました。
スクロールもするし、貼り付けた画像の大きさもキャプチャー元の画像の大きさと同じなので、ハンドルはちゃんと取れていると思うのですが、何故か真っ白になってしまいます。

どうか、アドバイスを頂けないでしょうか?
宜しくお願い致します。
Posted by MAX at 2016年05月26日 01:32
コメントありがとうございます。

IE11は何故かデバイスコンテキストから画像が取得できないので真っ白になるようです。

モジュールを更新してIE11用の"IEShot4IE11"という関数を追加しましたのでこちらを試してみて下さい。
尚、この関数を使う前にVBAエディタのツールメニューの参照設定で"Microsoft HTML Object Library"をチェックしといてください。

http://www.ryokurian.jp/atelier/ieshot/
Posted by 緑里庵 at 2016年05月29日 00:48
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック