本来想把这些都写在(2)里面的,想想还是写到(3)吧,这样比较容易看点

完成图片传送和显示,那么就开始控制,有了前面的基础,对于网络传输都有一定的了解了,那么我们再传其他东西也差不多道理.还不懂就得找本书看了..老实说,看书才是硬道理.

先看下面两个数据结构:


远程控制(3)struct MouseEvent
 Y
    
 Byte[] ToBytes()
    
}

一个是鼠标事件的结构体,一个鼠标事件类型枚举
我们这次发送和接收的包,当然,还可以有键盘事件的包,我偷懒,没做网络传输就不说了,和(1)(2)差不多,上面的结构体也定义得可以用了.
说说流程吧
鼠标的事件都是在panel上的事件,move,click,doubleclick,左键右键就自己判断了,由于panel大小是和受控方屏幕大小一样,所以获得坐标就等同于受控方屏幕的坐标,这样,一个MouseEvent的包就可以组成了,发送.
受控放接收,直接构造函数构造一个新的MouseEvent(Byte[] Content).就可以通过结构体的属性获得相应的内容,说明一下,图片和事件的侦听和发送端口不能一样.这样就可以进行控制了.

怎么控制呢?这里就要调用win32 API了,还有用到委托,因为委托是线程安全的.
首先看一下声明吧,我们要用到的API

远程控制(3)        [DllImport("user32")]
远程控制(3)        
public static extern void mouse_event(MouseEventFlag flags, int dx, int dy, int dwData, int dwExtraInfo);
远程控制(3)        [DllImport(
"user32")]
远程控制(3)        
public static extern bool SetCursorPos(int X, int Y);

   然后鼠标事件类型的枚举:

远程控制(3)public enum MouseEventFlag
}

声明委托与事件
远程控制(3)        public delegate void DoMouseButtons(MouseEventFlag flags, int dx, int dy, int dwData, int dwExtraInfo);
远程控制(3)        
public delegate bool DoMouseMove(int X, int Y);
远程控制(3)
远程控制(3)        
private event DoMouseMove MouseMove;
远程控制(3)        
private event DoMouseButtons MouseButton;

添加事件
远程控制(3)            MouseButton += new DoMouseButtons(mouse_event);
远程控制(3)            MouseMove 
+= new DoMouseMove(SetCursorPos);

到这里,我们就可以模拟鼠标的事件了
远程控制(3)switch (MEvent.Type)
);
            MouseButton(MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 
00);
远程控制(3)        MouseButton(MouseEventFlag.LeftUp, MEvent.X, MEvent.Y, 
00);
远程控制(3)        
break;
远程控制(3)}


鼠标双击的这个事件有点问题,有时候不行...

恩,完了,就这样,一个简单的远程控制就完成了,这个东西是我个人娱乐所作,虽然没有什么技术含量,但是通过这样,也可以学到很多东西,同时很多东西也加深了理解...

源码下载地址

今天是元旦佳节哦~

 祝大家猪年快乐!  年年进步!


友情提示:
如需转载本文,请遵守"本站协议"并加入下面声明 且注明原文链接。
作者:kevin wu
来源:kevin wu's corner


相关文章:

  • 2021-05-17
  • 2021-11-24
  • 2021-04-28
  • 2022-01-06
  • 2021-06-11
  • 2021-08-22
  • 2021-05-16
  • 2021-09-12
猜你喜欢
  • 2021-12-21
  • 2022-02-08
  • 2021-05-02
  • 2021-07-28
  • 2021-08-25
相关资源
相似解决方案