3

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

我向WM_PAINT (0x000F)窗口发送消息,我想截图,wParam = HDC处理,但我的图片框中没有截图。如果我发送WM_CLOSE消息,所有工作(目标窗口关闭)。我做错了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);
4

3 回答 3

1

您还可以使用纯托管代码截取屏幕截图,而无需互操作。以下代码将截取 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;
于 2010-05-16T13:10:37.083 回答
0

pictureBox.Handle是窗口句柄,而不是 DC 句柄。网上有几个用于截屏的指南。一个在这里。另请参阅@In silico 的答案。

于 2010-05-16T10:36:43.520 回答
0

请参阅http://www.developerfusion.com/code/4630/capture-a-screen-shot/

于 2010-05-16T11:04:02.010 回答