OKWaveコミュニティー

WEBページをイメージとしてキャプチャしたいです


新規ユーザー登録(無料)今すぐ登録しよう!!
はじめての方へ OKWaveではこんなことができます!

転職成功者続出!転職ならen!
人生をよくする就職!就職はen!
FAQ(よくある質問) OKWaveで困ったことはこちら
特集
まったく新しいQ&A、始まりました
文章だけでやりとりする時代は終わった!? 電話の向こうで、あなたの回答を待っている人がいる!
ブログパーツを貼り付けよう!
OKWaveのQ&Aがブログパーツになりました。
貼り付けは簡単!
モテマジックを特別伝授!
合コンで百発百中!?バラエティーマジシャン・なか。たつやさんと恋愛対談
「OKWave」を守るのは君だ!
Q&Aコミュニティサイト「OKWave」の運営スタッフを募集しています。

さあ、気軽に質問してみましょう!   例: 新型PSPのいいところってどこですか?

あと400文字入力できます。  こちらのページでは2000文字まで入力できます。

質問

QNo.1956772 WEBページをイメージとしてキャプチャしたいです
質問者:gilsal よくWEBページをBMPで保存するフリーソフトがありますが、(URL2BMP, HTML2JPG, HTML2BMPなど)、あの仕組みを知りたいです。

・ブラウザを画面表示せずに、
・WEBページをイメージとしてキャプチャ

なんですけど... C#で試行錯誤してます。
AxSHDocVw.AxWebBrowserで、フォームにWebを表示するくらいは出来たんですが...

C++でのお答えでもOKです。
また、もし上記ソフトのソースが公開されていれば、その在処でもOKです。
お力お貸しください。よろしくお願いします。
困り度:
  • 暇なときにでも
質問投稿日時:
06/02/10 16:06
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.3 How To Print a Form That Is Too Large for the Screen or Page
http://support.microsoft.com/kb/230502/en-us

で行けそうな気がします。
回答者:todo36
種類:回答
どんな人:専門家
自信:参考意見
回答日時:
06/02/13 19:38
この回答への補足ありがとうございます。無事、本懐とげることができました。

SendMessage(
hWnd, // 対象ウインドウハンドル
WM_PRINT,
(WPARAM)hMemDC, // メモリDC
PRF_ERASEBKGND |
PRF_CHILDREN |
PRF_CLIENT |
PRF_NONCLIENT |
PRF_OWNED);

こんなふうですね。WM_PRINTは考えつきませんでした...。
この回答へのお礼ご回答ありがとうございます。無事、本懐とげることができました。

回答良回答10pt

ANo.2 1.対象のウインドウのHDCをGetDCで取得
2.CreateDIBSectionでDIBを作成
3.CreateCompatibeDCでメモリDCを作成
4.SelectObjectで3のメモリDCと2のDIBを関連付ける
5.BitBltで1のHDCを3のメモリDCへSRCCOPY

6.DIB(メモリ上)の中に画像情報が入っているので後は煮るなり焼くなり好きにする。

私がわかるのはこれぐらいです。
回答者:sha-girl
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
06/02/13 01:22
この回答への補足表示されているウインドウならご回答の方法でOKでした。
久しぶりに C + SDK でサンプルを作ってみたりしたのでいい勉強になりました。ありがとうございます。

ウインドウを表示せずにできる方法を引き続きさぐってますので、だれかお知恵を。
この回答へのお礼ご回答ありがとうございます。無事、本懐とげることができました。

回答

ANo.1 VC++の場合ですが
MFCを使えばブラウザ自体は簡単に作れると思います。

でまずデバイスコンテキストやDIB、BMPのフォーマットについて調べてください。
それらのソフトがやっていることは
DCの内容を単にディスプレイ上に表示させずに
BMPに変換してファイルに吐き出しているだけだと
思います。
C言語というかGetDC等のWindowsAPIを駆使する
必要があり、
ある程度WindowsプログラムをSDKで
組んだことがないと厳しいと思います。
http://www.kumei.ne.jp/c_lang/sdk/sdk_26.htm

JPG変換はまた別の話ですのでおいておきます。
回答者:sha-girl
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
06/02/12 18:25
この回答への補足ご回答ありがとうございます。

「DCの内容を単にディスプレイ上に表示させずに
BMPに変換してファイルに吐き出しているだけだと
思います。」
同感です。

ご回答のように、1からブラウザを作って、将来にわたりメンテするド根性があれば、それ作ってDCを変えるだけで済むんですが、
せっかく(俺が仕様だと言わんばかりの)出来合いのブラウザがActiveXで使用できるので...

質問への補足ですが、ファイルに保存することは要求してないです(それであれば前に記したソフトをそのまま使います)。
つまり、コントロールの表示先を「画面上」から「メモリ上」にすり替えできればいいなと思ってる訳です。

コントロール(この際LabelでもScrollBarでもなんでもいいです)には普通、指定した親ウインドウのDCがあてがわれると思いますが、
これをCreateCompatibleDCなりで作ったDCですり替えることができれば、解決しそうな気がしてます。(それができないんです(T_T) )。


ちなみに、WM_PAINTの飛び先(OnPaint)の前後にDCをすり替えるコードを入れてみたりもしたんですが、
子ウインドウが描画されず、あえなく敗退しました。

CでのWindowsプログラムも経験あります。だれか、詳細は省いて結構ですので、似たようなことやったことのある方、ご回答おまちしてます。
この回答へのお礼この回答にお礼をつける(質問者のみ)