如何使用Windos API实现远程屏幕信息获取 需要用的api,gdi32.dll网上有,搜索下就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加入ASP。NET C#群吧,群号是: 1873156 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 ()就可以了,你试试吧 还是WCF的配置文件 vc编写的dll,在c#下调用,在运行时出现的错误 Winform刷新Icon图标 gdi+发生一般性错误 继承与PictureBox的Button无法响应键盘事件的解决方法 请帮我看看以下的异常。 javascript调用c#后台函数 急!百分求助!ajax updatepanel的刷新问题!! 怎样使一个用户登录进去,然后浏览每个页面时最上面都会显示自己的用户名? .net c#无法断点调试??? 请问高手如何自动采集ERP系统中的数据? 请教下一般C#和ASP.NET面试的话大概问些什么? 关于用C#做的 自动文本摘要,急求
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 ()
就可以了,你试试吧