之前有个需求获取屏幕生成图片提交给服务器(其实就是服务端有个按钮,让客户端截图)。公司前辈写的代码是采用.net框架的API。获取屏幕的长宽来生成图片。但是后来由于业务需要,针对拼接屏幕的截屏处理失效。所以我和后来换了方案:
模拟键盘的PrintScreen按键。之后从剪贴板获取数据生成图片。非常方便,而且无关驱动,不管多屏幕设置的是复制还是扩展都可以很好的支持。


ScreenPrint.printScreen();
IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
//Metafile metafile = MetafileHelper.GetEnhMetafileOnClipboard(IntPtr.Zero); //从粘贴板获取数据
Image bm = (Image)(data.GetData(typeof(System.Drawing.Bitmap)));
using (Graphics g = Graphics.FromImage(bm))
{
    //g.Clear(Color.White);
    g.DrawImage(bm, 0, 0, bm.Width, bm.Height);
}
bm.Save(String.Format("{0}\\{1}{2}{3}.jpg", @imagePath, DateTime.Now.Month.ToString(), DateTime.Now.Day.ToString(), DateTime.Now.Hour.ToString()), System.Drawing.Imaging.ImageFormat.Jpeg);
bm.Dispose();
Clipboard.Clear();