[リストへもどる]
一括表示

投稿時間:2003/07/14(Mon) 15:57
投稿者名:TAK
Eメール:
URL :
タイトル:
Webページをクリップボードにキャプチャーするには
こんにちは.
先日『Webページ全体をキャプチャー?』で投稿させて頂いたTAKです.
前回の投稿の時に,花ちゃんさんが

>今、ちょっと試して見たら、クリップボードにはコピーできているのですが、フォーマットが
>合わないのでペーストができないようです。

と合ったので,それから逆引きヘルプの『スクリーンのスナップショットをクリップボードに
保存及び印刷』などを参考にして行ってみたのですが,やはりアクティブウィンドウだけしか
クリップボードにコピーできません.
プログラムはVBのWebBrowzerを利用して,Webページの読み込みを終了したらそのウィンドウを
クリップボードにコピーするという方法です.
クリップボードにコピーされたものをWordに貼り付けてみても画面に表示されている部分しか
コピーされていないのですが,どのようにすればWebページ全体をクリップボードにコピーできる
のでしょうか?
お願いします.

投稿時間:2003/07/14(Mon) 16:23
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Webページをクリップボードにキャプチャーするには
WebBrowserコントロールを使っているなら下記でコピーできると思います。

  'すべて選択し、コピーを実施
    With WebBrowser1
        .ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT
        .ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
    End With

同様にIE上なら、メニューバーの編集からすべて選択し、コピーして下さい。
又、Wordを利用するなら直接WordからHTMLファイルを表示すればいいかと思います。

但し、HTML形式のフォーマットなのでWordのような色々のフォーマットに対応している
アプリにしか貼り付けできません。
Wordに貼り付けてからWord上でコピーすれば、メタファイル等でクリップボードに保存
されますので、それをVBのピクチャーボックスにペーストすればいいかと思います。
只、私の試した限りでは、Wordの1ページづつしかコピーできませんでした。
WordからWordへなら全ページ一度にコピーできるのですが。(WEBレイアウトでも同じ)

投稿時間:2003/07/14(Mon) 18:11
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: Webページをクリップボードにキャプチャーするには
クリップボードに渡したいのは、どんな形式ですか?

HTMLテキスト形式でしょうか、OEMテキスト形式でしょうか、
それとも、画面イメージのビットマップを得たいのでしょうか?

HTMLテキスト形式で得たいのであれば、ExecWBメソッドを使って、
OLECMDID_SELECTALL と OLECMDID_COPY を呼び出してやるのが簡単かと思います。
# …これに付いては、花ちゃんさんが既に回答されていたようですね。(汗)

そして、画面イメージの画像を得たい場合は、OleDraw APIを使う事ができます。
OleDrawにて、WebBrowser.object、もしくは WebBrowser.document を渡せば、
任意のデバイスコンテキストに、現在のサイズの画像情報が描画されます。

この場合、得られる画像の縦横のサイズは、WebBrowser自身のサイズに依存しますので、
場合によっては、currentStyleプロパティ経由で、表示されている内容のサイズを取得し、
それに合わせて、WebBrowserのサイズを、逐次、再設定する必要があります。
http://www.microsoft.com/japan/developer/library/jpisdk/dhtml/measure/measuring.htm#chp_measuring

# 必要に応じて、bodyオブジェクトやhtmlオブジェクトのruntimeStyleプロパティに対して、
# overflowX や overflowY を指定して、スクロールバーを除去してやると、見た目にも綺麗かも。



とりあえず、サイズの計算は面倒なので(^^;、OleDraw の方だけのサンプルを挙げておきます。
ここでは、フォームに対して出力させていますので、Formに対して、
.SclaeMode = vbPixel、.AutoRedraw = True の指定を施しておいて下さい。

Option Explicit

Private Enum DVASPECT
    DVASPECT_CONTENT = 1
    DVASPECT_THUMBNAIL = 2
    DVASPECT_ICON = 4
    DVASPECT_DOCPRINT = 8
End Enum

Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Private Declare Function OleDraw Lib "ole32.dll" _
   (ByVal pUnk As Object, _
    ByVal dwAspect As DVASPECT, _
    ByVal hdcDraw As Long, _
    ByRef lprcBounds As RECT) As Long

Private Sub DrawContents()
    Dim r As RECT
    Dim e As Long

    If WebBrowser1.Busy Then
        Exit Sub
    End If

    r.Top = 0
    r.Bottom = 0
    r.Right = ScaleWidth
    r.Bottom = ScaleHeight
    Cls
    e = OleDraw(WebBrowser1.Document, DVASPECT_CONTENT, hDC, r)
'    If e <> 0 Then
'        '例外が発生した場合の処理
'        Err.Raise e
'    End If
    Refresh
End With

投稿時間:2003/07/14(Mon) 20:44
投稿者名:TAK
Eメール:
URL :
タイトル:
Re^2: Webページをクリップボードにキャプチャーするには
花ちゃんさん,魔界の仮面弁士さんありがとうございます.
早速試して見ました.
やはりWordにコピーするまではちゃんとキャプチャーできているようですね.
でm,Wordにコピーするときにテーブルが崩れたりしてしまっているようなので,
やはり違う方法を考えることにしました.
花ちゃんさんすみません.

で,魔界の仮面弁士さんが言っているOleDrawのAPIを使った方法を現在試行錯誤しています.
また,結果が出たら報告します.
どうもありがとうございました.

ちなみに,Webページの全体を画像で得るソフトを開発しています.
なので,取得したいのは画面イメージのビットマップですね.
様々な作者さんが同じようなソフトを作っているみたいで・・・
http://www.forest.impress.co.jp/article/2002/11/25/webscan.html
↑たとえばこんなようなソフトですね.
別にIEと連動するとか考えてないので,とりあえず自作のWebBrowzerで画面全体を
取得できるように頑張っています.