利用Windows自带gdi32.dll实现抓取屏幕

news/2024/11/13 4:14:26/
internal static void GetScreenShot( )
        {

            //获得当前屏幕的大小 
            Rectangle rect = new Rectangle();
            rect = Screen.AllScreens[0].WorkingArea;
              
            //计算图片的大小,因为图片的长和宽有可能超过目前屏幕的大小 
            //创建一个以当前屏幕为模板的图象 
            Control ctl = new Control();
            Graphics g1 = ctl.CreateGraphics();
            //创建以屏幕大小为标准的位图 
            Image MyImage = new Bitmap(rect.Width ,rect .Height, g1);


            Graphics g2 = Graphics.FromImage(MyImage);
            //得到屏幕的DC 
            IntPtr dc1 = g1.GetHdc();
            //得到Bitmap的DC 
            IntPtr dc2 = g2.GetHdc();
            //调用此API函数,实现屏幕捕获  

            BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
            //释放掉屏幕的DC 
            g1.ReleaseHdc(dc1);
            //释放掉Bitmap的DC 
            g2.ReleaseHdc(dc2);
            //以JPG文件格式来保存 
            //Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            //return MyImage.GetThumbnailImage(control.Width, control.Height, myCallback, IntPtr.Zero);
            MyImage.Save("D:\\aa.jpg");
         
        }
            [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
            private static extern bool BitBlt(
                IntPtr hdcDest,    //目标设备的句柄
                int nXDest,        //目标对象的左上角的X坐标
                int nYDest,        //目标对象的左上角的X坐标
                int nWidth,        //目标对象的矩形的宽度
                int nHeight,       //目标对象的矩形的长度
                IntPtr hdcSrc,     //源设备的句柄
                int nXSrc,         //源对象的左上角的X坐标
                int nYSrc,         //源对象的左上角的X坐标
                System.Int32 dwRop //光栅的操作值
            );

http://www.ppmy.cn/news/506121.html

相关文章

android实时抓取屏幕文字,Android录制屏幕的实现方法

原文:Paul Kinlan 翻译:Agora.io 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件。 如今,我们已经接近这个目标。Chrome团队正在添加一种功能,可以通过getUserMedia从Android设备上共享屏…

java获取屏幕截图

全栈工程师开发手册 (作者:栾鹏) java教程全解 java获取屏幕截图 测试代码 public static void main(String[] args) {//文件与BufferedImage间的转换BufferedImage biigetScreen();img2file(bii,"jpg","test1.jpg"); …

捕获计算机屏幕++方法,在Win10中获取屏幕截图的五大方法

如果您是Win10的新手,或者甚至是专业人士在Win10中截取屏幕截图与其他操作系统相比有些困难。屏幕截图在某些情况下可以节省您的时间。此外,如果您指定截屏的所有不同方式,尤其是在Win10中,您绝对可以节省更多时间。请注意,所有这些截图都只适用于Win10,它可能适用于其他…

C++ 屏幕抓取代码及解析

代码 // An highlighted block void GetScreenShot(void) {BITMAPFILEHEADER bfHeader;BITMAPINFOHEADER biHeader;BITMAPINFO bInfo;HGDIOBJ hTempBitmap;HBITMAP hBitmap;BITMAP bAllDesktops;HDC hDC, hMemDC;LONG lWidth, lHeight;BYTE *bBits NULL;HANDLE hHeap GetPro…

C#实现捕获当前屏幕截图(转)

C#实现捕获当前屏幕截图(转) 编程思路(API 编程):先调用 GetForegroundWindow 获取当前活动程序窗口句柄,然后调用 GetWindowDC 获取窗口的设备句柄(或 GetDC 函数),调用 BitBlt 位图传输函数将…

python如何屏幕截图_Python实现屏幕截图的两种方式

使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释。 一、Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 不跨平台 import time import win32gui, win32ui, win32con, win32api def window_capture(filename): hwnd = …

c语言程序图片截取,C++实现屏幕截图功能

本文实例为大家分享了C++实现全屏截图功能的具体代码,供大家参考,具体内容如下 最近维护的项目,在某些情况下,光有日志还不行,于是添加了截图功能,特定情况下,会自动截图,辅助分析,从而改进程序。以下是截图实现代码。 void CDemoDlg::ScreenShot(void) {CWnd *pDeskt…

opencv python抓取屏幕数字

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…