当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Java实现远程控制技术完整源代码分享(3)

    栏目:Linux/apache问题 时间:2019-10-09 17:12

     以上就完成了控制端。

    接下来我们将构建被控制端:
    被控制端需要使用robot来截图并发送,而且需要写一个方法来对接收到的InputEvent进行反应
    首先是截图和发送:

     public static void CapturePic() throws AWTException, IOException{
     robot= new Robot();
     Message msg = null;
     Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
     java.awt.Dimension dm =tk.getScreenSize();
     java.awt.Robot robot = new java.awt.Robot();
      for (int i = 0; i < 50; i++) {
      //截取指定大小的屏幕区域
      Rectangle rec = new Rectangle(0, 0, (int) dm.getWidth(), (int) dm
       .getHeight());
      BufferedImage bimage = robot.createScreenCapture(rec);
      //将图片保存到文件中
      String filePath = "D:\\OUT\\screenshot"+i+".jpeg";
      FileOutputStream fops =new FileOutputStream(filePath);
      javax.imageio.ImageIO.write(bimage, "jpeg", fops);
      fops.flush();
      fops.close();
      msg =new Message(filePath);
    
      System.out.println(msg.getFileName());
      System.out.println("send");
      OOS.writeObject(msg);
      OOS.flush();
    
      }
     }
    
    

    注意到这段代码中使用了D:\OUT\目录作为临时文件的存放地方,读者使用这个代码的时候需要自己设置临时文档的存放

    然后实现robot对于接收到的InputEvent指令进行操作:

     public void action() throws AWTException, ClassNotFoundException, IOException{
     Robot robot= new Robot();
     while(true){
    
     InputEvent e =(InputEvent)OIS.readObject();
      if(e!=null){
     handleEvents(robot,e);}
     }
    
     }
    
     public static void handleEvents(Robot action,InputEvent event){
     MouseEvent mevent = null ; //鼠标事件
     MouseWheelEvent mwevent = null ;//鼠标滚动事件
     KeyEvent kevent = null ; //键盘事件
     int mousebuttonmask = -100; //鼠标按键
    
     switch (event.getID()){
     case MouseEvent.MOUSE_MOVED :   //鼠标移动
      mevent = ( MouseEvent )event ;
      action.mouseMove( mevent.getX() , mevent.getY() );
      break ;
     case MouseEvent.MOUSE_PRESSED :   //鼠标键按下
      mevent = ( MouseEvent ) event;
      action.mouseMove( mevent.getX() , mevent.getY() );
      mousebuttonmask = getMouseClick(mevent.getButton() );
      if(mousebuttonmask != -100)
      action.mousePress(mousebuttonmask);
      break;
      case MouseEvent.MOUSE_RELEASED :  //鼠标键松开
      mevent = ( MouseEvent ) event;
      action.mouseMove( mevent.getX() , mevent.getY() );
      mousebuttonmask = getMouseClick( mevent.getButton() );//取得鼠标按键
      if(mousebuttonmask != -100)
      action.mouseRelease( mousebuttonmask );
      break ;
     case MouseEvent.MOUSE_WHEEL :   //鼠标滚动
      mwevent = ( MouseWheelEvent ) event ;
      action.mouseWheel(mwevent.getWheelRotation());
      break ;
      case MouseEvent.MOUSE_DRAGGED :   //鼠标拖拽
      mevent = ( MouseEvent ) event ;
      action.mouseMove( mevent.getX(), mevent.getY() );
      break ;
      case KeyEvent.KEY_PRESSED :   //按键
      kevent = ( KeyEvent ) event;
      action.keyPress( kevent.getKeyCode() );
      break ;
      case KeyEvent.KEY_RELEASED :   //松键
      kevent= ( KeyEvent ) event ;
      action.keyRelease( kevent.getKeyCode() );
      break ;
     default: break ;
    
    
     }
    
    
     }
    
     private static int getMouseClick(int button) { //取得鼠标按键
     if (button == MouseEvent.BUTTON1) //左键 ,中间键为BUTTON2
      return InputEvent.BUTTON1_MASK;
     if (button == MouseEvent.BUTTON3) //右键
      return InputEvent.BUTTON3_MASK;
     return -100;
     }