c# - 使用 WinAPI 的窗口截图

标签 c# c++ winapi sendmessage

如何使用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);

最佳答案

您还可以使用纯托管代码截取屏幕截图,而无需互操作。以下代码将截取屏幕的 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;

关于c# - 使用 WinAPI 的窗口截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843357/

相关文章:

c# - Linq to NHibernate 返回与 HQL 不同的结果?

c# - 在 ASP.NET MVC 中将 WF 用于 Controller /操作

c++ - 如何从 FindFirstFile() 获取多种文件类型是可能的吗?

c++ - 更改 vector 中的位置值 + 自动创建该位置并在需要时增加 vector 范围

c++ - 丰富的编辑控件 : difference between rcPage and rc members of FORMATRANGE structure

c++ - 如何通过其 HWND 句柄更改另一个进程中 TDateTimePicker 控件中当前选定的日期?

c# - 为什么 ListView 拒绝显示其列、项目和子项目(仅显示组)?

c# - 在预构建中生成代码的问题

c++ - 使用 _CrtDumpMemoryLeaks 将数据显示到控制台

c++ - 如何在C++中获取线程的结果