使用Windos API实现远程屏幕信息获取

来源:互联网 发布:淘宝上能搜到闲鱼 编辑:程序博客网 时间:2024/06/08 02:20
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   ()
原创粉丝点击