使用WinAPI的窗口截图

时间:2010-05-16 10:33:02

标签: c# c++ winapi sendmessage

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

我向窗口发送了WM_PAINT (0x000F)消息,我想截图,wParam = HDC处理,但我的图片框中没有截图。如果我发送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);

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

pictureBox.Handle是一个窗口句柄,而不是DC句柄。有几个在线指南可用于截屏。一个是here。另见@In silico的答案。

答案 2 :(得分:1)