需要用的api,gdi32.dll
网上有,搜索下就可以了

解决方案 »

  1.   

    加入ASP。NET C#群吧,群号是:  1873156
      

  2.   

    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 ()
    就可以了,你试试吧