基于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 ...
随机推荐
- nginx1
简介: Nginx全程是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. 安装 配 ...
- java初学者应掌握的30个基本概念
核心提示:OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why. 基本概念 ...
- Mysql 事件(定时任务)
mysql 创建任务(事件) 1.检查数据库事件是否开启,如果 event_scheduler 等于 NO表示开启 SELECT @@event_scheduler; SHOW VARIABLES L ...
- 异步委托(APM)使用Func异步操作,处理耗时操作
使用委托进行异步操作,处理一些耗时操作,防止主线程阻塞 使用例子: using System; using System.Collections.Generic; using System.Linq; ...
- linux-redis
1.下载 6.启动 ./redis-server ../conf/redis.conf 7.测试 ./redis-cli -p 7030 set str "hello" ./red ...
- 深入理解line-height与vertical-align
前面的话 line-height.font-size.vertical-align是设置行内元素布局的关键属性.这三个属性是相互依赖的关系,改变行间距离.设置垂直对齐等都需要它们的通力合作.在CSS字 ...
- QQ左侧滑动显示之按钮切换
上一篇为大家介绍了关于自定义属性设置方法,本篇我将为大家介绍一下如何通过按钮来控制Menu的显示和隐藏,为了达到这个效果我们需要在SlidingMenu中添加三个方法,用来达到实现上述效果的目的. 我 ...
- Android基于mAppWidget实现手绘地图(十三)–如何显示/隐藏任意类型的地图对象
这个很简单,想要显示或隐藏任意类型的地图对象,首先要对地图对象进行分类.不同类型的地图对象放置到不同的地图图层上,然后控制地图图层的显示/隐藏即可. 实例: Layer sportsLayer = m ...
- Robot Framework自动化测试(七)--- jybot模式
虽然,很久不用关于Robot Framework框架了,但我这里应该是除了@齐涛-道长之外分享Robot Framework 相关资料比较多的地方了.所以,常常被问到一些关于该框架的问题. 虽然,我一 ...
- web前端学习笔记(CSS变化宽度布局)
一.“1-2-1”单列变宽布局: 对于变宽度的布局,首先要使内容的整体宽度随浏览器窗口宽度的变化而变化.因此中间的container容器中的左右两列的总宽度也会变化,这样就会产生不同的情况.这两列是按 ...