java robot键值_Java:使用Robot类模拟键盘, 以Alt码方式输出汉字

java.awt.Robot类

Java提供java.awt.Robot类来模拟操作键盘和鼠标, 下面是一个简单的demo

public static void keyPressByInt(Robot r,int key, int time){

r.keyPress(key);

r.keyRelease(key);

if (time > 0) {

r.delay(time);

}

}

public static void main(String[] args) throws AWTException, CharacterCodingException {

Robot robot = new Robot();

keyPressByInt(robot, KeyEvent.VK_H, 5);

keyPressByInt(robot, KeyEvent.VK_E, 5);

keyPressByInt(robot, KeyEvent.VK_L, 5);

keyPressByInt(robot, KeyEvent.VK_L, 5);

keyPressByInt(robot, KeyEvent.VK_O, 5);

}

执行以上逻辑就会输出字符串 hello, 当然Robot功能不止这些, 示例极其简单, 因为该篇文章目的不是为了说 java.awt.Robot 类的使用

使用Alt码输出汉字

尝试 Alt + 数字 输出汉字

Alt码(Alt code)即在IBM兼容个人电脑上,许多字符没有直接对应的按键,此时就可通过Alt-数字键盘输入法(Alt码)输入,方法是按住Alt键再通过数字键区输入字符代码。DOS、Microsoft Windows等许多操作系统也有类似或增强的功能。

启动你的 windows, 打开 记事本, 之后按住 Alt 不放, 同时依次点击 数字键盘 中的 1、2、3、4、5、6, 再松开 Alt, 看下能不能打印出汉字 釦 来.

注意事项:

Alt + 数字 是 windows 中的方法, 不知道其它系统支不支持, 有兴趣的话可以试一下.

最好是记事本, 当然也可以是其它简单的编辑器, 甚至任何能够输出字符的文本框, 但是不能是vscode等集成编译器, 因为这些编译器, 会将 Alt + 数字 映射成其它功能, 例如在vscode中, alt + ? 是光标移至尾行, alt + 4 是切换到左边的标签页.

一定要是 数字键盘 上面的 数字按键, 别搞错了.

如果记事本上成功输出了 釦 说明你的电脑是支持 Alt + 数字 形式的输入方法的.

Alt 后面数字代表的意思

首先先说明我们中国大多数电脑默认编码都是GBK, 底层区位码使用的大多都是《国家标准信息交换用的字符编码GB2312-80》(以下简称国标区位码).

注意: 网上很多文章说 Alt+【Unicode编码】对应的十进制数字即可打出该【Unicode编码】对应的字符, 事实上这个是机内码, 不是 Unicode编码

Alt 后面的数字如果在(0-255), 则输出的是数字对应的 ASCII 代码表中对应的字符.

Alt 后面的数字如果大于(255), 则查询的是国标区位码里的字符了,包括我们常用的个汉字也在里面.

如果 Alt 后面的数字 >= 65536, 则会先将数字除以65536, 得到余数, 打印出余数数字对应的国标区位码中的字符.

Alt + 123456 输出汉字 釦 的执行过程:

将 123456 转为16进制 1E240, 取后四位E240到国标区位码中查到汉字 釦输出.

用人话来说就是, 首先因为 123456 >= 65536, 那么对 123456➗65536=1……57920, 取得 57920 后到国标区位码中查到汉字 釦输出.

alt + 188992(2E240H), alt + 57920(E240H), 同样能输出汉字釦

使用java获取一个符号的区位码

java 中的字符默认是Unicode标准中utf-16编码, 标准的utf-16占用二或四个字节, java中的一个char占2个字节, 因此java中一个utf-16字占1或2个char, (例如大多数汉字, 字符都是一个char, 像😀等utf-16中排序较后的占两个char)

想要获取符号的国标区位码, 首先这个符号得先有国标区位码才行, 类似于😀🆒等符号使用两个char表示的符号, 就别想有国标区位码了.

例如一个😀, 在java中就是用两个char表示的, 这两个char单独一个无法表示一个字符, 它们是Unicode中的补充字符单元, java 中判断一个符号是否是补充字符单元的方法是

public final class Character implements java.io.Serializable, Comparable {

public static boolean isSurrogate(char ch) {

return ch >= MIN_SURROGATE && ch < (MAX_SURROGATE + 1);

}

}

假如一个符号有国标区位码, 那么在java里你需要先把编码由 utf-16 转换成 GB2312-80 才行.

我们直接转换成GBK就行了, 直接使用 String.getByte(string str, "GBK")

转换之后的两个byte就是符号的国标区位码了, 但要想转成10进制, 还需要小小的转换.

Byte.toUnsignedInt(array[0]) << 8 | Byte.toUnsignedInt(array[1])

使用java Robot利用键盘输出String的完整代码如下

public class MainTest {

/**

* 使用 Robot 利用键盘 alt 码输出字符

* @param r Robot 对象

* @param gbkCode 待打印的字符的国标区位码

* @param time 每个字符等待的时间

*/

public static void keyPressWithAltCode(Robot r, int gbkCode, int time){

r.keyPress(KeyEvent.VK_ALT);

String s = Integer.toString(gbkCode);

for (char c : s.toCharArray()) {

// 由 ASCII 码 0(48) 转为 VK_NUMPAD0(0x60)

int k = c + 48;

r.keyPress(k);

r.keyRelease(k);

}

r.keyRelease(KeyEvent.VK_ALT);

if (time > 0) {

r.delay(time);

}

}

/**

* 使用 Robot 利用键盘 alt 码输出字符

* @param r Robot 对象

* @param string 待打印的字符

* @param time 每个字符等待的时间

*/

public static void keyPressWithAltCode(Robot r, String string, int time) throws CharacterCodingException {

CharsetEncoder ce = Charset.forName("GBK").newEncoder();

for (char c : string.toCharArray()) {

if (Character.isSurrogate(c)) {

// 跳过补充字符

continue;

}

if (c >>> 8 == 0) {

keyPressWithAltCode(r, c, time);

continue;

}

CharBuffer cb = CharBuffer.wrap(new char[]{c});

final byte[] array = ce.encode(cb).array();

assert array.length == 2;

int code = Byte.toUnsignedInt(array[0]) << 8 | Byte.toUnsignedInt(array[1]);

keyPressWithAltCode(r, code, time);

}

}

public static void main(String[] args) throws AWTException, CharacterCodingException {

// 每隔5毫秒输出一个字符

keyPressWithAltCode(new Robot(), "1a键舣ß→_😀🆒", 5);

}

}

运行上面的代码就能利用键盘输出 1a键舣ß→_.

math?formula=%5Cbf%5Ccolor%7Bred%7D%7B%E5%85%B3%E4%BA%8E%E7%AC%A6%E5%8F%B7%F0%9F%98%80%2C%20%E6%9A%82%E6%97%B6%E6%B2%A1%E6%9C%89%E6%83%B3%E5%88%B0%E6%AF%94%E8%BE%83%E5%A5%BD%E7%9A%84%E6%A8%A1%E6%8B%9F%E9%94%AE%E7%9B%98%E8%BE%93%E5%87%BA%E6%96%B9%E5%BC%8F%7D

math?formula=%5Cbf%5Ccolor%7Bred%7D%7B%E5%A6%82%E6%9E%9C%E6%9C%89%E5%A4%A7%E7%A5%9E%E6%83%B3%E5%88%B0%E6%AF%94%E8%BE%83%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%2C%20%E6%95%AC%E8%AF%B7%E7%95%99%E8%A8%80(%E6%B3%A8%E6%84%8F%E4%B8%8D%E8%83%BD%E7%94%A8%E7%B2%98%E8%B4%B4%E6%9D%BF%E6%96%B9%E5%BC%8F).%7D

math?formula=%5Cbf%5Ccolor%7Bred%7D%7B%E8%AF%A5%E7%AF%87%E6%96%87%E7%AB%A0%E5%A6%82%E6%9E%9C%E6%9C%89%E4%BB%80%E4%B9%88%E9%97%AE%E9%A2%98%2C%20%E4%B9%9F%E6%AC%A2%E8%BF%8E%E7%95%99%E8%A8%80%E6%8C%87%E6%AD%A3.%7D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java调用 火眼臻睛,火眼臻睛车牌识别SDK评测

【CPS中安网 cps.com.cn】CPS LAB总评:用专业角度解读产品--CPS评测中心对火眼臻睛车牌识别SDK进行了全面评测,火眼臻睛车牌识别SDK在综合识别率、车牌定位成功率、大角度下的识别率、夜间环境下的识别率、极端环境下的识别率、支持的最小车牌像素宽度等测试表现,都位于行业前列…

java各层级限流对比,面试官说:来谈谈限流-从概念到实现,一问你就懵逼了?...

后端服务的接口都是有访问上限的&#xff0c;如果外部qps或并发量超过了访问上限会导致应用瘫痪。所以一般都会对接口调用加上限流保护&#xff0c;防止超出预期的请求导致系统故障。从限流类型来说一般来说分为两种:并发数限流和qps限流&#xff0c;并发数限流就是限制同一时刻…

mysql and 和where,关于mysql:连接sql查询中where和and子句的区别

本问题已经有最佳答案&#xff0c;请猛点这里访问。下面两个SQL查询有什么区别和号根据以下两个测试结果速度更快(237比460)。据我所知&#xff0c;这是一个标准。。氧化镁不&#xff0c;有细微的差别&#xff0c;你不能说没有差别除了语法之外没有别的区别。虽然只有一个简短的…

matlab里输出恒压的逆变器,基于IGBT逆变器的异步电机变频调速系统的MATLAB仿真...

异步电机变频调速系统电路仿真模型如图(4)所示。直流电压不621V&#xff0c;逆变器为IGBT 的三相半桥逆变器&#xff0c;电机为异步电机模块&#xff0c;其主电路由直流电压源、逆变器和电机依次相连。图(4)变频调速系统控制部分&#xff0c;利用“Step”模块设定频率指令f1*&a…

php 获取京东交易账号,PHP爬虫爬取京东列表

这里使用到了一个php插件下面是源码simple_html_dom.phpdefined(IN_ECS);define(HDOM_TYPE_ELEMENT, 1);define(HDOM_TYPE_COMMENT, 2);define(HDOM_TYPE_TEXT, 3);define(HDOM_TYPE_ENDTAG, 4);define(HDOM_TYPE_ROOT, 5);define(HDOM_TYPE_UNKNOWN, 6);define(HDOM_QUOTE_DOU…

php dns刷新,Windows DNS缓存自动刷新

Windows DNS缓存自动刷新admin • 2018 年 09 月 04 日DNS(域名服务器)DNS(Domain Name Server)是进行域名和与之相对应的ip地址转换的服务器。DNS中保存了一张域名和与之相应的ip地址的表&#xff0c;以解析消息的域名。DNS轮训在统一主机添加多条A记录&#xff0c;这就是DNS轮…

jq上传file到php,jQuery文件上传

插件描述&#xff1a;这是一个文件上传的展示&#xff0c;看很多插件&#xff0c;并不满意就自己写了一个&#xff0c;可能兼容性不是很好&#xff0c;没有准确进行测试过&#xff0c;还请各位不吝赐教更新时间&#xff1a;2019/3/25 下午8:53:17更新说明&#xff1a;修复上传成…

linux误删表空间文件,UNDO表空间下的数据文件被误删除后的处理方法

UNDO表空间下的数据文件被误删除后的处理方法&#xff1a;操作前备份数据库&#xff0c;以避免更大的损失。思路&#xff1a;1、把误删除的数据文件offline2、正常打开数据库后创建新的UNDO表空间及数据文件3、修改相应参数指向新的UNDO表空间4、重新启动数据库验证5、删除旧的…

linux内核有ebpf吗,聊聊很重要的内核技术eBPF

在2018年的 Linux Plumber 大会上&#xff0c;eBPF成了亮点&#xff0c;有24个议题提到了 eBPF&#xff0c;可以预计eBPF会成为一大技术热点。eBPF(Extended Berkeley Packet Filter) 的核心是驻留在 kernel 的高效虚拟机。最初的目的是高效网络过滤框架&#xff0c;前身是 BPF…

oom linux 导致ssh,Linux OOM

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;某个机器看到一条日志:Out of Memory: Kill process xxx (xxx) score 707 or sacrifice child并且syslog, ssh等进程都被kill掉了.简单了解了下OOM(Out of Memory)…

c语言bfs程序讲解,面试算法--二叉树DFS/BFS实现(C语言)

深度优先搜索算法(Depth First Search)DFS是搜索算法的一种。它沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。当节点v的所有边都己被探寻过&#xff0c;搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还…

c语言 子进程,子Shell和子进程

Shell 中有很多方法产生子进程&#xff0c;比如以新进程的方式运行 Shell 脚本&#xff0c;使用组命令、管道、命令替换等&#xff0c;但是这些子进程是有区别的。子进程的概念是由父进程的概念引申而来的。在 Linux 系统中&#xff0c;系统运行的应用程序几乎都是从 init(pid为…

学C语言办公本和游戏本,为什么不建议买游戏本?入手前须知,别只看中游戏...

原标题&#xff1a;为什么不建议买游戏本&#xff1f;入手前须知&#xff0c;别只看中游戏作为一名游戏本用户&#xff0c;我自己在用的游戏本已经用了四五年的时间了&#xff0c;从最初的大学生到毕业工作2年时间&#xff0c;这一游戏本给我带来了不少麻烦。最大的麻烦就是“笨…

Android ui 单元测试 覆盖率,Android单元测试—UI测试(Espresso)

前言我们先回顾一下&#xff0c;在上一篇博客中&#xff0c;主要分享了Android单元测试的逻辑测试部分。接下来&#xff0c;我们重点讲解Android单元测试的UI测试部分&#xff01;何为UI测试呢&#xff1f;就是对用户界面的交互元素进行测试&#xff0c;如TextView、ImageView&…

android shape 圆角百分比,Android shape显示圆角问题

当需要定义一个圆角效果,当在ADT中预览,没有有效果时,只要运行就可以了&#xff01;xmlns:Android"http://schemas.android.com/apk/res/android">android:state_pressed"true">android:startColor"#ff8c00"android:endColor"#FFFFFF…

android 删除垃圾文件夹,别再用手机管家清理垃圾了!删除这些文件夹,内存瞬间释放几个G...

随着手机使用时间的增加&#xff0c;手机中缓存的东西越来越多&#xff0c;这时候手机内存空间就会告急&#xff0c;从而影响手机的流畅性。那么在这种时候不要乱清理&#xff0c;我们只需要删除这几个文件夹&#xff0c;就可以帮手机轻松释放好几个G的内存。下面我们就一起来看…

计算机的应用技术课程的看法,统计教学与计算机应用的几点看法论文

统计教学与计算机应用的几点看法论文一、传统教学方法的局限性和弊端统计学是一门关于搜集、整理、汇总、描述和分析数据资料&#xff0c;并在此基础上进行推断和决策的方法论科学&#xff0c;具有很强的应用性、实践性。统计学课程是中等职业学校、财经类专业的基础核心课程。…

jupyter可以打开HTML文件吗,Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)...

前面用了很久Notebook来交互式编程了&#xff0c;此次说说几个其余的选项&#xff1a;htmlNotebook Markdown此次选Markdown模式(关于Markdown基础能够看以前写的Markdown Base)python和代码同样&#xff0c;Shift回车就能够预览了&#xff0c;怎么样是否是很酷的感受&#xff…

计算机网络技术基础教学内容,计算机网络技术基础

无计算机网络技术基础》课程教案一 计算机网络技术基础》课题&#xff1a; 课题&#xff1a;计算机网络概述(一) ) 教学顺序&#xff1a; 教学顺序&#xff1a;1 教学时数&#xff1a; 教学时数&#xff1a; 2 学时 教学目的&#xff1a;了解计算机网络产生的背景&#xff0c;掌…

计算机表格收入水平怎么算,怎么用excel计算工资所得税

利用Excel表格计算工资所得税?单位工资发放大多采用计算机管理,对一些小企业没有采用工资软件的,一般用Excel表来计算工资。下面小编就教你怎么用excel计算工资所得税。excel计算工资所得税的步骤&#xff1a;1、假设工资的所得税起征点为3500&#xff0c;具体阶段如下表。2、…