我打开软件后可以获得这个局域网内所有的机器` 可是随便的选择监控哪台机器` 不是抓图 而在我看他的机器的时候不能被他查觉到` 也可以这样` 只要机器上装上这个软件了`就可以监控 做到能穿墙不被他们发现` 像老师讲课用的那种一样`~只不过是反过来了` 不是别人看我是我看别人`~ 希望大家给点意件`~给点思路` 谢谢了
解决方案 »
- 深思4加密狗问题,懂的朋友麻烦帮帮忙,分少。。。谢谢
- 发个基础问题,关于C# 位运算的
- 200分求教:用VS2003连接Solaris下的Sybase数据库的疑问!
- richtextbox的问题
- 求 实现IE 收藏夹 和 历史记录
- 用c#窗体设计器设计的界面,保存后,再打开,就乱掉了,代码丢失
- 求助!itextsharp中的生成表格问题
- 急求用C#制作快捷方式,在线等!!!!!
- 我在安装.net的时候只装了c#.net,可是在编辑的时候连system.windows.forms都不支持,难道还有安装其他的东东吗?
- 如何在多个窗体中使用Ado.net
- 菜鸟请教关于对两个或多个dataset中的值联合查询的问题。。急,请高手指点
- sql 语句中文出现乱码
我是在写一个软件`~ 假如这个局域网内机器都装上了我这个软件了` 我就可以做到了吧 现在我可以从别人的机器上截图 就是说把它当前屏幕的图片给弄下来传到我的机子上`~ 如果要实现监控的话要不停的读然后把这些图片放到picturebox里面` 有新的了就换掉`这样就例似监控了吧`现在的问题是` 我如何让它连接起来啊 每次我看完一个人的机器后都会保留下一张图来`~有点郁闷`还有就是我如何获得这个局域网内有哪些机子呢 他们都装上了这个软件后我又怎么选择去监控哪一个呢 期待高手出现
:[email protected]
2. 至于图片不如做成上传到服务器(如果用DotNet的Remoting还可以上传一个对象,然后具体的图片在你的服务端生成.这样你连删除上次的图片都省下了.)的某一位置,然后你服务器的图片处理程序就监视该文件夹/或者文件,只要发生了变化就马上触发你想要运行的函数
是不是想做成这样?
要不你在前台操作,人家怎么不会发现?除非他关了显示器....
如果你现在是老板,需要给员工一部分的空间,如果一直在被监视的状态下工作,能有好的效率吗
你如果真要实现可以现了解一下socket,看你现在的状态是对server、client不太了解。
我主要关注你这个想法的实用性
public void getRemote()
{
IPAddress ip = IPAddress.Parse("192.168.1.3");
tcp = new TcpListener(ip,9420);
tcp.Start();
socket = tcp.AcceptSocket();
ns = new NetworkStream(socket);
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
if (socket.Connected)
{ try
{
while (true)
{
byte[] b = new byte[1024*256]; //设置接收的大小
int i = this.socket.Receive(b);//接收
//把byte[]转化成内存流,在把内存流转化成Image,
System.Drawing.Image myimage = System.Drawing.Image.FromStream(new MemoryStream(b));
showScreen.Image = myimage; //显示
}
}
catch (Exception ex)
{
this.tcp.Stop();
MessageBox.Show("捕捉屏幕出错!server"+ex.Message);
}
}
}
//在加载事件中启动线程
tcpThread = new Thread(new ThreadStart(getRemote));
tcpThread.Start(); 服务端:
//using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.IO;
namespace THClient
{
public partial class Form1 : Form
{
// private Socket socket = null;
private NetworkStream ns = null;
private StreamReader sr = null;
private StreamWriter sw = null;
private Thread tcpThread = null;
private TcpClient tcpclient = null;
MemoryStream ms = null;
bool isCon = false;
bool isError = false;
public Form1()
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
[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 // 光栅的操作值
);
public void capture()
{
//this.Visible = false;
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//创建显示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一个指定设备的句柄创建一个新的Graphics对象
System.Drawing.Image MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根据屏幕大小创建一个与之相同大小的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);
//释放位图句柄
ms = new MemoryStream();
MyImage.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] b =ms.GetBuffer();
ns.Write(b, 0, b.Length);
ms.Flush();
// this.pictureBox1.Image = Image.FromStream(ms);
//this.Visible = true;
}
private void Form1_Load(object sender, EventArgs e)
{
this.label1.Text = "程序启动中....\r\n";
timer1.Enabled = true;
}
public void connect()
{
try
{
while (true)
{
capture();
}
}
catch(Exception ex)
{
// MessageBox.Show(ex.Message);
// MessageBox.Show("错误!===\\\\"+ex.Message );
sw.Dispose();
sr.Dispose();
ns.Dispose();
isCon = false;
isError = false;
timer1.Enabled = true;
this.label1.Text += "远程主机被断开~!";
}
}
//关闭所有流
private void Form1_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
if (!isCon)
{
con();
if (!isError)
{
timer1.Enabled = false;
tcpThread = new Thread(new ThreadStart(connect));
tcpThread.Start();
}
isError = false;
}
}
public void con()
{
try
{
this.label1.Text += "连接中.....\r\n";
tcpclient = new TcpClient();
tcpclient.Connect("192.168.1.3", 9420);
if (tcpclient.Connected)
{
ns = tcpclient.GetStream();
sr = new StreamReader(ns);
sw = new StreamWriter(ns);
isCon = true;
this.label1.Text += "连接成功\r\n";
}
//isError = true;
}
catch
{
isError= true;
this.label1.Text += "连接失败!\r\n";
}
} }