基于TCP和多线程实现无线鼠标键盘-Robot

Windows端收到Android端传递来的键盘或鼠标操作信息以后,需要根据这些信息操作鼠标或键盘,这就需要用到java.awt.Robot类,该类用于控制鼠标或键盘。

在Java主窗体中定义:

public static Robot rbt;

在主窗体的构造函数中初始化Robot:

		// 初始化Robot
		try{			
			rbt = new Robot();			
		}
		catch(Exception e){		
			l_status.setText("错误:" + e);			
		}

再定义一个静态方法:

	// Robot
	public static void rbt_act(String str_mk){
		
		String[] tmps;	
		tmps = str_mk.split("/");
		
		// 移动鼠标
		if (is_numeric(tmps[0])){			
			mouse_point = MouseInfo.getPointerInfo().getLocation();
			rbt.mouseMove(mouse_point.x+Integer.parseInt(tmps[0]), 
					mouse_point.y+Integer.parseInt(tmps[1]));			
		}
		// 鼠标按键
		else if (tmps[0].equals("b")){			
			if (tmps[1].equals("l")){
				rbt.mousePress(InputEvent.BUTTON1_MASK);
				rbt.mouseRelease(InputEvent.BUTTON1_MASK);
			}
			if (tmps[1].equals("r")){
				rbt.mousePress(InputEvent.BUTTON3_MASK);
				rbt.mouseRelease(InputEvent.BUTTON3_MASK);
			}			
		}
		// 点击键盘
		else if (tmps[0].equals("k")){
			switch (tmps[1])
			{
				case "a":
					rbt.keyPress(KeyEvent.VK_A);
					rbt.keyRelease(KeyEvent.VK_A);
					break;
				case "b":
					rbt.keyPress(KeyEvent.VK_B);
					rbt.keyRelease(KeyEvent.VK_B);
					break;
				case "c":
					rbt.keyPress(KeyEvent.VK_C);
					rbt.keyRelease(KeyEvent.VK_C);
					break;
				case "d":
					rbt.keyPress(KeyEvent.VK_D);
					rbt.keyRelease(KeyEvent.VK_D);
					break;
				case "e":
					rbt.keyPress(KeyEvent.VK_E);
					rbt.keyRelease(KeyEvent.VK_E);
					break;
				case "f":
					rbt.keyPress(KeyEvent.VK_F);
					rbt.keyRelease(KeyEvent.VK_F);
					break;
				case "g":
					rbt.keyPress(KeyEvent.VK_G);
					rbt.keyRelease(KeyEvent.VK_G);
					break;
				case "h":
					rbt.keyPress(KeyEvent.VK_H);
					rbt.keyRelease(KeyEvent.VK_H);
					break;
				case "i":
					rbt.keyPress(KeyEvent.VK_I);
					rbt.keyRelease(KeyEvent.VK_I);
					break;
				case "j":
					rbt.keyPress(KeyEvent.VK_J);
					rbt.keyRelease(KeyEvent.VK_J);
					break;
				case "k":
					rbt.keyPress(KeyEvent.VK_K);
					rbt.keyRelease(KeyEvent.VK_K);
					break;
				case "l":
					rbt.keyPress(KeyEvent.VK_L);
					rbt.keyRelease(KeyEvent.VK_L);
					break;
				case "m":
					rbt.keyPress(KeyEvent.VK_M);
					rbt.keyRelease(KeyEvent.VK_M);
					break;
				case "n":
					rbt.keyPress(KeyEvent.VK_N);
					rbt.keyRelease(KeyEvent.VK_N);
					break;
				case "o":
					rbt.keyPress(KeyEvent.VK_O);
					rbt.keyRelease(KeyEvent.VK_O);
					break;
				case "p":
					rbt.keyPress(KeyEvent.VK_P);
					rbt.keyRelease(KeyEvent.VK_P);
					break;
				case "q":
					rbt.keyPress(KeyEvent.VK_Q);
					rbt.keyRelease(KeyEvent.VK_Q);
					break;
				case "r":
					rbt.keyPress(KeyEvent.VK_R);
					rbt.keyRelease(KeyEvent.VK_R);
					break;
				case "s":
					rbt.keyPress(KeyEvent.VK_S);
					rbt.keyRelease(KeyEvent.VK_S);
					break;
				case "t":
					rbt.keyPress(KeyEvent.VK_T);
					rbt.keyRelease(KeyEvent.VK_T);
					break;
				case "u":
					rbt.keyPress(KeyEvent.VK_U);
					rbt.keyRelease(KeyEvent.VK_U);
					break;
				case "v":
					rbt.keyPress(KeyEvent.VK_V);
					rbt.keyRelease(KeyEvent.VK_V);
					break;
				case "w":
					rbt.keyPress(KeyEvent.VK_W);
					rbt.keyRelease(KeyEvent.VK_W);
					break;
				case "x":
					rbt.keyPress(KeyEvent.VK_X);
					rbt.keyRelease(KeyEvent.VK_X);
					break;
				case "y":
					rbt.keyPress(KeyEvent.VK_Y);
					rbt.keyRelease(KeyEvent.VK_Y);
					break;
				case "z":
					rbt.keyPress(KeyEvent.VK_Z);
					rbt.keyRelease(KeyEvent.VK_Z);
					break;
				case " ":
					rbt.keyPress(KeyEvent.VK_SPACE);
					rbt.keyRelease(KeyEvent.VK_SPACE);
					break;
			}
		}
		
	}

该静态方法根据str_mk判断是鼠标动作还是键盘动作,然后读取相关信息,对鼠标或键盘进行操作。

原文地址:https://www.cnblogs.com/mstk/p/3451384.html