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判断是鼠标动作还是键盘动作,然后读取相关信息,对鼠标或键盘进行操作。

基于TCP和多线程实现无线鼠标键盘-Robot的更多相关文章

  1. 基于TCP和多线程实现无线鼠标键盘-GestureDetector

    为了实现无线鼠标,需要识别出用户在手机屏幕上的滑动动作,这就需要用到GestureDetector类. 首先是activity_main.xml: <LinearLayout xmlns:and ...

  2. 基于TCP和多线程实现无线鼠标键盘-Socket(1)

    把手机作为移动鼠标.键盘使用非常方便,本文将实现这一功能.该应用分为两部分:Windows服务端和Android客户端. 本文源代码的下载地址:http://download.csdn.net/det ...

  3. 基于TCP和多线程实现无线鼠标键盘-InputMethodManager

    为了实现无线键盘的功能,使用了InputMethodManager弹出软键盘. // 弹出软键盘 public void pop_keyboard(){ imm = (InputMethodManag ...

  4. 基于TCP和多线程实现无线鼠标键盘-Socket(2)

    在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据. Android客户端的发送线程SendThread.java代 ...

  5. 基于tcp和多线程的多人聊天室-C语言

    之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...

  6. Java Socket实现基于TCP和UDP多线程通信

    一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSo ...

  7. JAVA基础知识之网络编程——-基于TCP通信的简单聊天室

    下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...

  8. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  9. Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

随机推荐

  1. 在同一台服务器上配置多个Tomcat

    如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...

  2. cmd 下通过NTML代理访问Maven 库

    公司用web代理,NTLM验证的,这样在普通CMD下无法使用mvn命令访问网上的maven库,使用CNTLM工具解决. 下载CNTLM工具,安装,修改安装路径下的cntlm.ini,改成实际的ntlm ...

  3. 知方可补不足~SqlServer连接的复用MultipleActiveResultSets

    回到目录 MultipleActiveResultSets可以使数据库连接复用,但当你上了moebius这种集群工具后,这个选项不能开启(默认是false),当你使用EF等ORM工具时,这个选项会默认 ...

  4. Atitti 数据库事务处理 attilax总结

    Atitti 数据库事务处理 attilax总结 1.1. 为什么要传递Connection?1 1.2. 两种事务处理方式,一种是编程式事务处理;一种是声明...2 1.3. 事务隔离级别 2 1. ...

  5. css 弹出层-透明层

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Eclipse中java向数据库中添加数据,更新数据,删除数据

    前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...

  7. Sublime Text2 Jsformat自定义使用之代码折叠方式修改

    将代码括号的折叠方式从 function abc(){ } 变成 function abc() { } 打开 Setting-user,把setting-default里的文本全部复制过来. 然后 将 ...

  8. java中得到classpath和当前类的绝对路径的一些方法(路径中的%20"进行替换空格)

    原网址:http://blog.csdn.net/shendl/article/details/1427475 (注意:利用下面方式得到路径,如果路径中有空格字符, 那么会有"%20&quo ...

  9. Netbeans 中创建数据连接池和数据源步骤(及解决无法ping通问题)

    1.启动glassfish服务器, 在浏览器的地址栏中输入 http://localhost:4848 2.首先建立JDBC Connection Pools: 3.new 一个Connectio P ...

  10. Android notification的使用

    notification出现在通知栏中的提示,特别是在4.0以后改进了不少,这里讲得都是基于4.0及4.1以后的. 分类: 1.普通Notification 2.大布局Notification 图1 ...