基于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判断是鼠标动作还是键盘动作,然后读取相关信息,对鼠标或键盘进行操作。
基于TCP和多线程实现无线鼠标键盘-Robot的更多相关文章
- 基于TCP和多线程实现无线鼠标键盘-GestureDetector
为了实现无线鼠标,需要识别出用户在手机屏幕上的滑动动作,这就需要用到GestureDetector类. 首先是activity_main.xml: <LinearLayout xmlns:and ...
- 基于TCP和多线程实现无线鼠标键盘-Socket(1)
把手机作为移动鼠标.键盘使用非常方便,本文将实现这一功能.该应用分为两部分:Windows服务端和Android客户端. 本文源代码的下载地址:http://download.csdn.net/det ...
- 基于TCP和多线程实现无线鼠标键盘-InputMethodManager
为了实现无线键盘的功能,使用了InputMethodManager弹出软键盘. // 弹出软键盘 public void pop_keyboard(){ imm = (InputMethodManag ...
- 基于TCP和多线程实现无线鼠标键盘-Socket(2)
在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据. Android客户端的发送线程SendThread.java代 ...
- 基于tcp和多线程的多人聊天室-C语言
之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...
- Java Socket实现基于TCP和UDP多线程通信
一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSo ...
- JAVA基础知识之网络编程——-基于TCP通信的简单聊天室
下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- Java Web 基础(一) 基于TCP的Socket网络编程
一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...
随机推荐
- jmx server 和jmx client
启动jmx server 和jmx client,通过jconsole进入jmx server 然后通过其中远程进程,进入jmx client: 发现,两者可用的tab页不同, MBean的数量类型也 ...
- Javascript隐式转换
乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...
- loglikelihood ratio 相似度
摘要: 在机器学习中常用到各种距离或者相似度,今天在看美团推荐系统重排序的文章时看到了loglikelihood ratio 相似度,特总结起来.以后有时间再把常用的相似度或者距离梳理到一篇文章. 背 ...
- js笔记——js里var与变量提升
var是否可以省略 一般情况下,是可以省略var的,但有两点值得注意: 1.var a=1 与 a=1 ,这两条语句一般情况下作用是一样的.但是前者不能用delete删除.不过,绝大多数情况下,这种差 ...
- Python - 001 - 类与实例间属性的理解
Python是个很灵活的语言,光看它的类和实例间属性的访问机制就可以看出这一点,不过这一点还真的不好理解,做了些测试之后我的理解是这样的: 实例在访问class属性时,先检索自己的names, 如果有 ...
- Java 线程 — ThreadLocal
ThreadLocal 先来看看ThreadLocal的注释: This class provides** thread-local variables**. These variables diff ...
- C#委托(delegate)
C#中委托(delegate)是一种安全地封装方法的类型,委托是面向对象的.类型安全的. 使用委托的步骤: 1.声明委托 public delegate void DelegateHandler(st ...
- 为什么很多网站的表单提交按钮都是用<a>标签
之 前看过一些文章,说是用a标签来代替submit按钮更好一些,因为submit按钮在IE6下会有一些兼容的问题,不好统一,而且input的行高在各 浏览器参差不齐,还不能用line-height控制 ...
- javascript运算符——逻辑运算符
× 目录 [1]逻辑非 [2]逻辑与 [3]逻辑或 前面的话 逻辑运算符对操作数进行布尔运算,经常和关系运算符一样配合使用.逻辑运算符将多个关系表达式组合起来组成一个更复杂的表达式.逻辑运算符分为逻辑 ...
- JSP网站开发基础总结《十三》
继上一篇为大家补充过滤器类后,本篇为大家简单介绍一下如何实现验证码效果.验证码的作用是什么呢?1.防止恶意注册2.防止恶意提交3.防止盗取账户等等,总的来说验证码的存在就是为了,防止非人为的操作,不过 ...