c#屏幕截圖的問題 高级屏幕截图程序(酷)ivanx 著于2007-8-14 9:58:17屏幕截图应用程序允许用户方便快捷地截取静态屏幕图片,保存到事先定义好的一个目录。功能:可以通过点击鼠标,截获窗口、控件或桌面图像,能够设定一个窗口透明度,捕获图像,能够捕获菜单的图像。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.Collections.Generic;using System.Text;using System.Drawing;using System.Windows.Forms;namespace CopySreen{ public class SreenCopy { [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 // 光栅的操作值 ); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定位"NULL" IntPtr lpInitData // 任意的打印机数据 ); public static Bitmap GetSreem() { IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null); //创建显示器的DC Graphics g1 = Graphics.FromHdc(dc1); //由一个指定设备的句柄创建一个新的Graphics对象 Bitmap MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1); //根据屏幕大小创建一个与之相同大小的Bitmap对象 Graphics g2 = Graphics.FromImage(MyImage); //获得屏幕的句柄 IntPtr dc3 = g1.GetHdc(); //获得位图的句柄 IntPtr dc2 = g2.GetHdc(); //把当前屏幕捕获到位图对象中 BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376); //把当前屏幕拷贝到位图中 g1.ReleaseHdc(dc3); //释放屏幕句柄 g2.ReleaseHdc(dc2); return MyImage; } [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); }} SerialPort.ReadExisting相关问题 根据窗口的句柄怎么遍历子句柄? 替换word中字符,并将字符加上下划线。 DataGridView 里面单元格被双击的时候里面呈现可编辑状态.先不想让之成为可编辑状态.该怎么做? 如何控制OpenFileDialog控件只查看图片文件? C# 高手进 多重接口问题 如何让form没有标题栏但是有边框?? 进来看一下,解决此问题,100分!!! VS2008 C#编译的类库DLL,只能在本机使用,不能再其他机器上调用 套接字本机地址 求解。vs2005+sql2000数据库搜索引擎
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;namespace CopySreen
{
public class SreenCopy
{
[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 // 光栅的操作值
); [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
); public static Bitmap GetSreem()
{
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//创建显示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一个指定设备的句柄创建一个新的Graphics对象
Bitmap MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根据屏幕大小创建一个与之相同大小的Bitmap对象
Graphics g2 = Graphics.FromImage(MyImage);
//获得屏幕的句柄
IntPtr dc3 = g1.GetHdc();
//获得位图的句柄
IntPtr dc2 = g2.GetHdc();
//把当前屏幕捕获到位图对象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
//把当前屏幕拷贝到位图中
g1.ReleaseHdc(dc3);
//释放屏幕句柄
g2.ReleaseHdc(dc2);
return MyImage;
} [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
}
}