你的位置:首页 > 软件开发 > ASP.net > C#区域截图调用API截图

C#区域截图调用API截图

发布时间:2015-05-10 21:03:25
前言:截图对于一个C++开发者来说无非是小菜一碟,也有朋友使用C#的 Graphics.CopyFromScreen 方法屏幕操作,作为一名整天想着用 C++ 开发游戏的初级 C#.NET 的程序员的我,只是自己研究区域截图,失败 n 多次,最后在半梦半醒中弄出来的简单的Demo ...

前言:截图对于一个C++开发者来说无非是小菜一碟,也有朋友使用C#的 Graphics.CopyFromScreen 方法屏幕操作,作为一名整天想着用 C++ 开发游戏的初级 C#.NET 的程序员的我,只是自己研究区域截图,失败 n 多次,最后在半梦半醒中弄出来的简单的Demo,简单的分享一下而已。如此的班门弄斧,着实不堪,另外我的 C++ 水平也是处于入门水准,如果该博客有什么问题,请各位朋友留言指正,谢谢关照!


附件及其他:

C#的 Graphics.CopyFromScreen 方法   https://msdn.microsoft.com/zh-cn/library/fw1kt6f9.aspx

附件:http://files.cnblogs.com/files/herbertchina/GetFormDemo.zip


本文Demo:(VS2010环境)

本文使用的图片素材:

C#区域截图调用API截图


本文主题:

从窗体的图片中截取需要的部分,本例是验证码区域。


正文:

先贴出主要代码

    /// <summary>    /// 指定窗口区域截图     /// </summary>    /// <param name="handle">窗口句柄. (在get='_blank'>windows应用程序中, 从Handle属性获得)</param>    /// <param name="rect">窗口中的一个区域</param>    /// <returns></returns>    public Bitmap CaptureWindow(IntPtr hWnd,RECT rect)    {      // 获取设备上下文环境句柄       IntPtr hscrdc = GetWindowDC(hWnd);      // 创建一个与指定设备兼容的内存设备上下文环境(DC)       IntPtr hmemdc = CreateCompatibleDC(hscrdc);      IntPtr myMemdc = CreateCompatibleDC(hscrdc);      // 返回指定窗体的矩形尺寸       RECT rect1;      GetWindowRect(hWnd, out rect1);      // 返回指定设备环境句柄对应的位图区域句柄       IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, rect1.Right - rect1.Left, rect1.Bottom - rect1.Top);      IntPtr myBitmap = CreateCompatibleBitmap(hscrdc, rect.Right - rect.Left, rect.Bottom - rect.Top);      //把位图选进内存DC       // IntPtr OldBitmap = (IntPtr)SelectObject(hmemdc, hbitmap);      SelectObject(hmemdc, hbitmap);      SelectObject(myMemdc, myBitmap);      /////////////////////////////////////////////////////////////////////////////      //      // 下面开始所谓的作画过程,此过程可以用的方法很多,看你怎么调用 API 了       //      /////////////////////////////////////////////////////////////////////////////      // 直接打印窗体到画布       PrintWindow(hWnd, hmemdc, 0);      // IntPtr hw = GetDesktopWindow();      // IntPtr hmemdcClone = GetWindowDC(myBitmap);      BitBlt(myMemdc, 0, 0, rect.Right - rect.Left, rect.Bottom - rect.Top, hmemdc, rect.Left, rect.Top, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt);      //SelectObject(myMemdc, myBitmap);      Bitmap bmp = Bitmap.FromHbitmap(myBitmap);      DeleteDC(hscrdc);      DeleteDC(hmemdc);      DeleteDC(myMemdc);      return bmp;    }

原标题:C#区域截图调用API截图

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录