VB.NET2003、Framework1.1でApiのOleDrawを用いて
他のアプリの画像をピクチャーボックスに表示したいです。
自分のフォームにあるWebBrowserの表示内容をピクチャーボックスに
表示するサンプルがあったので、それをヒントに出来ないかと
思っているのですが、表示対象を指定する箇所の
書き換え方法がどうしてもわからないです。
WebBrowserの内容を表示するもともとの定義は
Dim ImageObj As Object
ImageObj = AxWebBrowser1.Document
となっていました。試しに、PictureBox2の表示内容をピクチャーボックスに
OleDrawを使って描画するテストをしてみたところ、
ImageObj = Picturebox2
とするだけで表示させることができました。
しかし、別アプリのAxWebBrowser1やPictureBox1を指定する方法がわからず困っています。
現在のソースコードは下のようになっています。
テキストボックスはSPY++で調べたハンドルを入れて色々試す際に使用しましたが、
画像が表示されるところまで出来ませんでした。
宜しくお願い致します。
-----------------------------------------------------------
Imports System.Runtime.InteropServices
Const DVASPECT_CONTENT As Integer = 1
Const DVASPECT_THUMBNAIL As Integer = 2
Const DVASPECT_ICON As Integer = 4
Const DVASPECT_DOCPRINT As Integer = 8
<DllImport("ole32.dll")> _
Public Shared Function OleDraw( _
ByVal pUnk As IntPtr, _
ByVal dwAspect As Integer, _
ByVal hdcDraw As IntPtr, _
ByRef lprcBounds As Rectangle) _
As Integer
End Function
Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Location = New Point(80, 0)
Button1.Location = New Point(0, 0)
PictureBox1.Location = New Point(40, 64)
PictureBox2.Location = New Point(264, 64)
Controls.Add(TextBox1)
Controls.Add(Button1)
Controls.Add(PictureBox1)
Controls.Add(PictureBox2)
PictureBox1.Dock = DockStyle.Fill
Dim g As Graphics
PictureBox2.Image = New Bitmap(PictureBox2.Size.Width, PictureBox2.Size.Height)
g = Graphics.FromImage(PictureBox2.Image)
Dim bmap As Bitmap = New Bitmap("c:\1.jpg")
g.DrawImage(bmap, 0, 0, 100, 100)
bmap.Dispose()
g.Dispose()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim Graph As Graphics = Graphics.FromImage(PictureBox1.Image)
'''Dim P As Process
'''P = Process.GetProcessById(TextBox1.Text)
Dim ImageObj As Object
ImageObj = PictureBox2
Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(ImageObj)
Dim hDc As IntPtr = Graph.GetHdc
OleDraw(pUnk, DVASPECT_CONTENT, hDc, PictureBox1.ClientRectangle)
Marshal.Release(pUnk)
Graph.ReleaseHdc(hDc)
Me.Refresh()
End Sub