使用WinAPI进行窗口截图

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);

不,我需要截图非活动窗口,并且不激活它们。只需向它们发送 WM_PAINT 消息并获取响应即可。 - Dmitriy Kudinov
3个回答

1

您还可以使用完全托管的代码而无需Interop来截取屏幕截图。以下代码将捕获屏幕上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;

0

pictureBox.Handle 是一个窗口句柄,而不是 DC 句柄。有很多在线指南可以进行屏幕截图。其中一个是这里。还可以参考 @In silico 的回答。


如何编写呢? 将图像复制到任何位置。 - Dmitriy Kudinov


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接