如何使用Windos API实现远程屏幕信息获取
设计一个Windows环境下的远程屏幕信息获取程序.首先考虑服务器如何获取屏幕信息,其次考虑如何将这些信息传给客户端,最后考虑如何在客户端重现这一屏幕信息.进一步考虑远程鼠标位置的获取问题.希望高手帮忙分析下怎么用Windows API实现啊?
在线等待!!
--------------------编程问答-------------------- 不知道该用哪些API,帮顶
不过听说冰河最近开源了 lz可以去看看一些远程监控的源代码 --------------------编程问答-------------------- 哪位大虾知道啊?? --------------------编程问答-------------------- 没有人知道吗?5555555! --------------------编程问答-------------------- 帮顶啊,怎么没人知道哇
?? --------------------编程问答-------------------- 你可以是用序列化来实现 --------------------编程问答-------------------- 需要用的api,gdi32.dll
网上有,搜索下就可以了 --------------------编程问答-------------------- 加入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 ()
就可以了,你试试吧
补充:.NET技术 , C#