using System;
using System.Runtime.InteropServices;
using System.Drawing;
namespace SystemTools
...{
[StructLayout(LayoutKind.Sequential)]
public struct RECT
...{
public int left, top, right, bottom;
}

/**//// <summary>
/// 封装API的类
/// </summary>
public class APIs
...{
[DllImport("user32.dll")]
public static extern bool GetCursorPos(ref Point lpPoint);
[DllImport("user32.dll")]
public static extern int WindowFormPoint(Point lpPoint);
[DllImport("user32.dll")]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
public static extern int GetForegroundWindow();
[DllImport("user32.dll")]
public static extern int GetWindowRect(int hwnd, ref RECT rc);
[DllImport("user32.dll")]
public static extern int GetWindowDC(int hwnd);
[DllImport("Gdi32.dll")]
public 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 // 光栅的操作值
);
[DllImportAttribute("gdi32.dll")]
public static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
}
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace SystemTools
...{
/**//// <summary>
/// 封装各种抓屏操作的类
/// </summary>
public class CatchScreen
...{
/**//// <summary>
/// 获得屏幕指定区域
/// </summary>
/// <param name="left"></param>
/// <param name="top"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public Bitmap getScreen(int left, int top, int width, int height)
...{
IntPtr dc1 = APIs.CreateDC("DISPLAY", null, null, (IntPtr)null);
Graphics newGraphics = Graphics.FromHdc(dc1);
Bitmap img = new Bitmap(width, height, newGraphics);
Graphics thisGraphics = Graphics.FromImage(img);
IntPtr dc2 = thisGraphics.GetHdc();
IntPtr dc3 = newGraphics.GetHdc();
APIs.Bitblt(dc2, 0, 0, width, height, dc3, left, top, 13369376);
thisGraphics.ReleaseHdc(dc2);
newGraphics.ReleaseHdc(dc3);
return img;
}

/**//// <summary>
/// 获得全屏
/// </summary>
/// <returns></returns>
public Bitmap getFullScreen()
...{
return getScreen(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
}

/**//// <summary>
/// 抓取句柄所指窗口
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
public Bitmap getScreenFromHandle(int hwnd)
...{
RECT rc = new RECT();
APIs.GetWindowRect(hwnd, ref rc);
return getScreen(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);
}

/**//// <summary>
/// 抓取活动窗口
/// </summary>
/// <returns></returns>
public Bitmap getScreenFromActiveWindow()
...{
int handle = APIs.GetForegroundWindow();
return getScreenFromHandle(handle);
}
//保存成各种格式
public string savepic(Bitmap bmp)
...{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "位图文件 (*.bmp)|*.bmp|jpg文件 (*.jpg)|*.jpg|gif文件 (*.gif)|*.gif|tiff文件 (*.tiff)|*.tiff|"+
"emf文件 (*.emf)|*.emf|图标文件 (*.ico)|*.ico|wmf文件 (*.wmf)|*.wmf|png文件 (*.png)|*.png";
saveDialog.DefaultExt="*.bmp";
if(saveDialog.ShowDialog() == DialogResult.OK)
...{
string ext = saveDialog.FileName.Substring(saveDialog.FileName.Length-4,4);
switch( ext)
...{
case ".bmp":
bmp.Save(saveDialog.FileName,ImageFormat.Bmp);
break;
case ".gif":
bmp.Save(saveDialog.FileName,ImageFormat.Gif);
break;
case ".jpg":
bmp.Save(saveDialog.FileName,ImageFormat.Jpeg);
break;
case ".emf":
bmp.Save(saveDialog.FileName,ImageFormat.Emf);
break;
case ".ico":
bmp.Save(saveDialog.FileName,ImageFormat.Icon);
break;
case ".wmf":
bmp.Save(saveDialog.FileName,ImageFormat.Wmf);
break;
case ".png":
bmp.Save(saveDialog.FileName,ImageFormat.Png);
break;
case ".tiff":
bmp.Save(saveDialog.FileName,ImageFormat.Tiff);
break;
default :
return "";
}
return saveDialog.FileName;
}
return "";
}
}
}
1212



被折叠的 条评论
为什么被折叠?



