PrintWindow截取隐藏窗口
来源:互联网 发布:传奇支付平台源码 编辑:程序博客网 时间:2024/06/10 13:49
PrintWindow的好处就在这,只要想截的窗口不是最小化,无论在屏幕外还是只显示一半还是被覆盖,都可以成功截取我们想要的部分。
C#代码如下:(网上代码有些缺陷,略做修改)
public static Bitmap GetWindow(IntPtr hWnd) //hWnd可以是窗口、控件等的handle,因此这种方法截我们想要的部分非常好用。
{
IntPtr hscrdc = GetWindowDC(hWnd);
Control control = Control.FromHandle(hWnd);
IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, control.Width, control.Height);
IntPtr hmemdc = CreateCompatibleDC(hscrdc);
SelectObject(hmemdc, hbitmap);
bool re= PrintWindow(hWnd, hmemdc, 0);
Bitmap bmp = null;
if(re)
{
bmp = Bitmap.FromHbitmap(hbitmap);
}
DeleteObject(hbitmap);
DeleteDC(hmemdc);//删除用过的对象
ReleaseDC(hWnd, hscrdc);
return bmp;
}
调用非托管函数如下:
[DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(
string lpszDriver, // driver name驱动名
string lpszDevice, // device name设备名
string lpszOutput, // not used; should be NULL
IntPtr lpInitData // optional printer data
);
[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc); // handle to DC
[DllImport("gdi32.dll")]
public static extern IntPtr CreateCompatibleBitmap(
IntPtr hdc, // handle to DC
int nWidth, // width of bitmap, in pixels
int nHeight // height of bitmap, in pixels
);
[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(
IntPtr hdc, // handle to DC
IntPtr hgdiobj // handle to object
);
[DllImport("gdi32.dll")]
public static extern int DeleteDC( IntPtr hdc ); // handle to DC
[DllImport("gdi32.dll")]
public static extern IntPtr DeleteObject(IntPtr hObject);
[DllImport("user32.dll")]
public static extern bool PrintWindow(
IntPtr hwnd, // Window to copy,Handle to the window that will be copied.
IntPtr hdcBlt, // HDC to print into,Handle to the device context.
UInt32 nFlags // Optional flags,Specifies the drawing options. It can be one of the following values.
);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC( IntPtr hwnd );
[DllImport("user32.dll")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
附:有些平台的截图是全黑的,开启视频加速可能会导致这样的问题,关闭就能正常截图了。
- PrintWindow截取隐藏窗口
- PrintWindow截取隐藏窗口
- PrintWindow函数、CxImage、GSOAP实现隐藏窗口抓图到JPEG并通过webservice传至服务器
- 隐藏窗口
- 隐藏窗口
- 关于PrintWindow
- 截取窗口关闭事件
- 关闭窗口和隐藏窗口
- dojo 弹出窗口,隐藏窗口
- Qt:截取当前窗口图
- 截取窗口的最小化消息
- 最小化时隐藏窗口
- 如何隐藏控制台窗口?
- 在任务栏隐藏窗口
- 控制台程序窗口隐藏
- 隐藏Console窗口
- 隐藏控制台窗口
- 批处理隐藏自身窗口
- 欢迎使用CSDN-markdown编辑器
- FTP上传问题:FTP上传不了文…
- java获取毫秒
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- Android列表用法之一:实战简单ListView
- PrintWindow截取隐藏窗口
- informix报错大集结
- Spring之注解实现aop(面向切面编程)
- 从特征描述符到深度学习:计算机视觉发展20年
- 如何删除Windows被占用的COM
- eclipse 删除插件
- c++ 程序中实现抛出异常
- SpringMVC的初始
- String数组转List,List转String数组