using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Runtime.InteropServices; using System.Text; using System.Drawing.Imaging; using System.IO; using System.Management; namespace agentray { /// <summary> /// computers 系统登录信息 /// </summary> public class computers { private Bitmap MyImage = null ; private System.Text.StringBuilder sysinfo; //声明API函数 //Bitmap [ 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 // 光栅的操作值 ); //显示器的DC [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll " ) ] private static extern IntPtr CreateDC ( string lpszDriver , // 驱动名称 string lpszDevice , // 设备名称 string lpszOutput , // 无用,可以设定位 "NULL " IntPtr lpInitData // 任意的打印机数据 ); [StructLayout(LayoutKind.Sequential, Pack=1)] internal struct TokPriv1Luid { public int Count; public long Luid; public int Attr; } //[DllImport( "advapi32.dll " ) ] //internal static extern bool GetUserName(LPTSTR a,LPDWORD b); [DllImport( "kernel32.dll ", ExactSpelling=true) ] internal static extern IntPtr GetCurrentProcess(); [DllImport( "advapi32.dll ", ExactSpelling=true, SetLastError=true) ] internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok ); [DllImport( "advapi32.dll ", SetLastError=true) ] internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid ); [DllImport( "advapi32.dll ", ExactSpelling=true, SetLastError=true) ] internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen ); public computers() { // // TODO: 在此处添加构造函数逻辑 // } private void capture () { try { IntPtr dc1 = CreateDC ( "DISPLAY " , null , null , ( IntPtr ) null ) ; //创建显示器的DC Graphics g1 = Graphics.FromHdc ( dc1 ) ;//由此Graphic对象产生此位图对象 //由一个指定设备的句柄创建一个新的Graphics对象 MyImage = new Bitmap ( Screen.PrimaryScreen.Bounds.Width , Screen.PrimaryScreen.Bounds.Height , g1 ); //用指定的大小和指定的 Graphics 对象的分辨率初始化 Bitmap 类的新实例。 //根据屏幕大小创建一个与之相同大小的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 ) ; //释放位图句柄 MyImage.Save( "../MyJpeg.jpg " ,ImageFormat.Jpeg) ; } catch(ExternalException ee) { MessageBox.Show(ee.ToString()); } } } } 这个是我调过的。调用capture ()