欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#利用Windows自带gdi32.dll实现抓取屏幕功能实例

程序员文章站 2023-12-17 17:12:04
本文实例讲述了c#利用windows自带gdi32.dll实现抓取屏幕功能,是c#应用程序设计中一个非常实用的功能,现分享给大家供大家参考借鉴。 具体功能代码如下:...

本文实例讲述了c#利用windows自带gdi32.dll实现抓取屏幕功能,是c#应用程序设计中一个非常实用的功能,现分享给大家供大家参考借鉴。

具体功能代码如下:

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 //光栅的操作值
);

希望本文c#抓取屏幕实例对大家的c#程序设计有所帮助。

上一篇:

下一篇: