2010-05-16 54 views
2

如何使用WinAPI制作程序窗口的屏幕截图& C#?使用WinAPI的窗口截图

我发送WM_PAINT (0x000F)消息到窗口,我要截图,wParam = HDC句柄,但在我的picturebox没有截图。如果我发送一个WM_CLOSE消息,所有waorking(目标窗口关闭)。我在WM_PAINT上做错了什么?可能是HDC不是PictureBox(WinForms)组件?附: GetLastError() == ""

[DllImport("User32.dll")] 
public static extern Int64 SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 
    ..... 

SendMessage(targetWindowHandle, 0x000F, pictureBox.Handle, IntPtr.Zero); 
+0

没有我需要截图不活动的窗口,并没有使他们活跃。只需发送WM_PAINT给他们,并得到回应。 – 2010-05-16 10:49:50

回答

1

pictureBox.Handle是一个窗口句柄,而不是一个DC句柄。有几个指南在线做截图。一个是here。请参阅@In silico的答案。

+0

那样会写呢? 在任何地方复制图像 – 2010-05-16 10:47:54

2

您也可以使用纯托管代码,而不需要互操作采取截图。下面的代码将捕捉屏幕的100x100区域,当然您可以调整到全屏。关键功能是Graphics.CopyFromScreen

Bitmap bmp = new Bitmap(100,100); 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
    g.CopyFromScreen(0, 0, 0, 0, new Size(100, 100));   
    } 
    pictureBox1.Image = bmp;