关于在C#中非顶端窗口截图

用Windows热键截图然后保存的我就不说了,地球人都知道.

这里我想说一下 如何截取非前端窗体的截图

首先说一下PrintWindow这个API的使用

 

 

很遗憾,上面的确可以截取非前端窗体的截图,但是非GDI的程序是无法截图的比如DirectX

 

下面说一下BitBlt这个API的使用

 

 

上面的类 使用了BitBlt这个API 可以截取GDI或者非GDI图形 只不过,非前端窗体图形不能截获...

 

 

下面说一下不使用API 最简单的全屏截图方案

 

 

最后,试试下面这个办法:

 

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用C#中的System.Drawing.Bitmap类和Win32 API来获取窗口截图。具体的代码如下: ```csharp using System; using System.Drawing; using System.Runtime.InteropServices; public class WindowCapture { [DllImport("User32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport("User32.dll")] public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleBitmap(IntPtr dc, int width, int height); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleDC(IntPtr dc); [DllImport("gdi32.dll")] public static extern IntPtr SelectObject(IntPtr dc, IntPtr obj); [DllImport("gdi32.dll")] public static extern bool BitBlt(IntPtr dcDest, int xDest, int yDest, int wDest, int hDest, IntPtr dcSrc, int xSrc, int ySrc, int rasterOp); public static Bitmap CaptureWindow(IntPtr hwnd) { // 获取窗口的设备上下文 IntPtr hdcSrc = GetDC(hwnd); if (hdcSrc == IntPtr.Zero) { return null; } // 创建一个兼容的设备上下文和位图 IntPtr hdcDest = CreateCompatibleDC(hdcSrc); IntPtr hbmDest = CreateCompatibleBitmap(hdcSrc, 100, 100); if (hdcDest == IntPtr.Zero || hbmDest == IntPtr.Zero) { ReleaseDC(hwnd, hdcSrc); return null; } // 将位图选入设备上下文 IntPtr hbmOld = SelectObject(hdcDest, hbmDest); // 复制窗口的内容到位图中 if (!BitBlt(hdcDest, 0, 0, 100, 100, hdcSrc, 0, 0, 0x00CC0020)) { SelectObject(hdcDest, hbmOld); DeleteObject(hbmDest); DeleteDC(hdcDest); ReleaseDC(hwnd, hdcSrc); return null; } // 恢复设备上下文并释放资源 SelectObject(hdcDest, hbmOld); DeleteObject(hbmDest); DeleteDC(hdcDest); ReleaseDC(hwnd, hdcSrc); // 返回位图 return Bitmap.FromHbitmap(hbmDest); } } ``` 使用方法: ```csharp IntPtr hwnd = // 窗口句柄 Bitmap bmp = WindowCapture.CaptureWindow(hwnd); ``` 其中,hwnd为窗口句柄,bmp为获取到的窗口截图。请注意,此代码仅支持获取窗口的静态截图,无法实时获取窗口的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值