java模拟器键盘输入_Java模拟鼠标和键盘输入
用途
在电脑(Windows/Mac)上模拟鼠标和键盘输入
Mac运行需要打开相关权限,详见文末说明.
效果图
代码
import java.awt.*;
import java.awt.event.KeyEvent;
class RobotDemo {
private Robot robot = null;
public RobotDemo() {
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
}
/**
* 模拟键盘输入abc
*/
public void keyBoardDemo() {
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_B);
robot.keyRelease(KeyEvent.VK_B);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
}
/**
* 移动鼠标位置
*/
public void mouseDemo() {
robot.mouseMove(200, 200);
robot.mousePress(KeyEvent.BUTTON1_MASK);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
robot.mouseRelease(KeyEvent.BUTTON1_MASK);
}
public void delay(int milliseconds) {
robot.delay(milliseconds);
}
public static void main(String[] args) {
RobotDemo demo = new RobotDemo();
// demo.delay(2000);
demo.mouseDemo();
demo.keyBoardDemo();
}
}
Mac运行说明
Mac对程序模拟操作做了权限限制,需要先打开相关权限,操作步骤如下:
到“系统偏好设置”中打开“安全性与隐私”;
选中“隐私”页签,左侧选中“辅助功能”;
先解锁后勾选待运行本程序的应用;
更高级的代码
支持模拟输入键盘上大部分的键(Kotlin代码).
import java.awt.Robot
import java.awt.event.KeyEvent
fun main() {
val keyboard = Keyboard()
keyboard.delay(2000)
keyboard.type(
"hahaha\n"
)
}
class Keyboard {
private val robot: Robot = Robot()
fun delay(milliSeconds: Int) {
robot.delay(milliSeconds)
}
fun type(characters: CharSequence) {
val length = characters.length
for (i in 0 until length) {
val character = characters[i]
type(character)
}
}
private fun type(char: Char) {
when (char) {
'a' -> doType(KeyEvent.VK_A)
'b' -> doType(KeyEvent.VK_B)
'c' -> doType(KeyEvent.VK_C)
'd' -> doType(KeyEvent.VK_D)
'e' -> doType(KeyEvent.VK_E)
'f' -> doType(KeyEvent.VK_F)
'g' -> doType(KeyEvent.VK_G)
'h' -> doType(KeyEvent.VK_H)
'i' -> doType(KeyEvent.VK_I)
'j' -> doType(KeyEvent.VK_J)
'k' -> doType(KeyEvent.VK_K)
'l' -> doType(KeyEvent.VK_L)
'm' -> doType(KeyEvent.VK_M)
'n' -> doType(KeyEvent.VK_N)
'o' -> doType(KeyEvent.VK_O)
'p' -> doType(KeyEvent.VK_P)
'q' -> doType(KeyEvent.VK_Q)
'r' -> doType(KeyEvent.VK_R)
's' -> doType(KeyEvent.VK_S)
't' -> doType(KeyEvent.VK_T)
'u' -> doType(KeyEvent.VK_U)
'v' -> doType(KeyEvent.VK_V)
'w' -> doType(KeyEvent.VK_W)
'x' -> doType(KeyEvent.VK_X)
'y' -> doType(KeyEvent.VK_Y)
'z' -> doType(KeyEvent.VK_Z)
'A' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_A)
'B' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_B)
'C' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_C)
'D' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_D)
'E' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_E)
'F' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_F)
'G' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_G)
'H' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_H)
'I' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_I)
'J' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_J)
'K' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_K)
'L' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_L)
'M' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_M)
'N' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_N)
'O' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_O)
'P' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_P)
'Q' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_Q)
'R' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_R)
'S' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_S)
'T' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_T)
'U' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_U)
'V' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_V)
'W' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_W)
'X' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_X)
'Y' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_Y)
'Z' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_Z)
'`' -> doType(KeyEvent.VK_BACK_QUOTE)
'0' -> doType(KeyEvent.VK_0)
'1' -> doType(KeyEvent.VK_1)
'2' -> doType(KeyEvent.VK_2)
'3' -> doType(KeyEvent.VK_3)
'4' -> doType(KeyEvent.VK_4)
'5' -> doType(KeyEvent.VK_5)
'6' -> doType(KeyEvent.VK_6)
'7' -> doType(KeyEvent.VK_7)
'8' -> doType(KeyEvent.VK_8)
'9' -> doType(KeyEvent.VK_9)
'-' -> doType(KeyEvent.VK_MINUS)
'=' -> doType(KeyEvent.VK_EQUALS)
'~' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_QUOTE)
'!' -> doType(KeyEvent.VK_EXCLAMATION_MARK)
'@' -> doType(KeyEvent.VK_AT)
'#' -> doType(KeyEvent.VK_NUMBER_SIGN)
'$' -> doType(KeyEvent.VK_DOLLAR)
'%' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_5)
'^' -> doType(KeyEvent.VK_CIRCUMFLEX)
'&' -> doType(KeyEvent.VK_AMPERSAND)
'*' -> doType(KeyEvent.VK_ASTERISK)
// '(' -> doType(KeyEvent.VK_LEFT_PARENTHESIS)
'(' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_9)
// ')' -> doType(KeyEvent.VK_RIGHT_PARENTHESIS)
')' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_0)
'_' -> doType(KeyEvent.VK_UNDERSCORE)
'+' -> doType(KeyEvent.VK_PLUS)
'\t' -> doType(KeyEvent.VK_TAB)
'\n' -> doType(KeyEvent.VK_ENTER)
'[' -> doType(KeyEvent.VK_OPEN_BRACKET)
']' -> doType(KeyEvent.VK_CLOSE_BRACKET)
'\\' -> doType(KeyEvent.VK_BACK_SLASH)
'{' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_OPEN_BRACKET)
'}' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_CLOSE_BRACKET)
'|' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_SLASH)
';' -> doType(KeyEvent.VK_SEMICOLON)
// ':' -> doType(KeyEvent.VK_COLON)
':' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_SEMICOLON)
'\'' -> doType(KeyEvent.VK_QUOTE)
// '"' -> doType(KeyEvent.VK_QUOTEDBL)
'"' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_QUOTE)
',' -> doType(KeyEvent.VK_COMMA)
' doType(KeyEvent.VK_SHIFT, KeyEvent.VK_COMMA)
'.' -> doType(KeyEvent.VK_PERIOD)
'>' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_PERIOD)
'/' -> doType(KeyEvent.VK_SLASH)
'?' -> doType(KeyEvent.VK_SHIFT, KeyEvent.VK_SLASH)
' ' -> doType(KeyEvent.VK_SPACE)
else -> throw IllegalArgumentException("Cannot type character $char")
}
}
private fun doType(vararg keyCodes: Int) {
doType(keyCodes, 0, keyCodes.size)
}
private fun doType(keyCodes: IntArray, offset: Int, length: Int) {
if (length == 0) {
return
}
robot.keyPress(keyCodes[offset])
doType(keyCodes, offset + 1, length - 1)
robot.keyRelease(keyCodes[offset])
}
}
java模拟器键盘输入_Java模拟鼠标和键盘输入相关推荐
- java完成键盘动作_java实现鼠标和键盘动作后台监听
有的时候需要我们对鼠标和键盘的动作(鼠标的移动,键盘的点击)进行监听,比如按键记录,鼠标坐标记录等. 我们使用JNA来实现以上的操作 tips:JNA类库使用一个很小的本地类库sub 动态的调用本地代 ...
- linux模拟手柄输入,linux下如何模拟按键输入和模拟鼠标
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices 设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键 ...
- 模拟linux设备按键工具,linux下如何模拟按键输入和模拟鼠标
linux下如何模拟按键输入和模拟鼠标 发布时间:2008-08-19 21:11:54来源:红联作者:anopup 查看/dev/input/eventX是什么类型的事件, cat /proc/bu ...
- C++实现鼠标控制 封装常见的模拟鼠标、键盘的操作函数
API 或 MFC 视窗程序 里 有 函数, 例如 API 函数 设位置: BOOL SetCursorPos( int x, int y); 参数是屏幕坐标x,y 头文件 Winuser.h 链接库 ...
- C# WPF 中用代码模拟鼠标和键盘的操作
C# WPF 中用代码模拟鼠标和键盘的操作 原文:C# WPF 中用代码模拟鼠标和键盘的操作 原文地址 C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的.但是可惜的是, ...
- python 模拟鼠标键盘_python之模拟鼠标键盘动作
上个月就打算开发个还算好玩的项目,但是一直没时间.这篇是此项目用到的一部分, 处理好此部分基本还差通信等方面的了.首先模拟鼠标键盘按下释放的动作,本人利用X11 这个库,所以要了解X11编程;其次,本 ...
- Android 使用 sendevent 模拟鼠标和键盘事件
Android 使用 sendevent 模拟鼠标和键盘事件 模拟原理是对驱动发送消息,就是linux里面的input子系统. 命令格式: sendevent /dev/input/eventX [t ...
- 控制台模拟鼠标、键盘操作
控制台模拟鼠标.键盘操作 模拟鼠标.键盘操作,能让命令行顿然强大,想想,制作批处理版屏幕键盘等都不在话下(已制作过,效果很不错).虽然这也跟CUI无关.本教程教会你如何让命令行模拟鼠标.键盘的操作. ...
- Python - Python 模拟鼠标和键盘进行基本操作
文章目录 Python - Python 模拟鼠标和键盘进行基本操作 相关内容:Python 实用内容 1.安装模块pyautogui 2.基本操作 Python - Python 模拟鼠标和键盘进行 ...
最新文章
- 混合云部署MySQL集群_数据库混合云解决方案
- linux下collada-dom编译,COLLADA DOM Tutorial
- GPUImage API 文档之GPUImagePicture类
- PyTorch随笔-2
- python编写安全工具_Python3学习系列(四):编写属于自己的邮件伪造工具
- 复杂纹理复制及纹理叠加效果
- SpringCloud OpenFeign(二)
- javascript学习方法分享
- 解决vs code下powerline10k图形渲染异常
- php框架laravel手册,Laravel 5 框架入门(一)
- 高中数学学习方法的8个诀窍,高中生必看
- Vue之生命周期mounted、activated区别及实际运用例子解析
- 2个鸡蛋100层楼--动态规划
- APP爬虫之央视新闻
- 程序员必知1700英语单词
- 什么是IDC ,可以用来做什么
- 惊了!这才是真正的 Windows 摸鱼神器!!!
- CAP 理论及其解决方案
- ESlint-airbnb配置
- 给大家分享一下从卷烟-电子烟-口含烟的发展过程
热门文章
- java websphere mq_如何在java中使用WebSphere MQ
- 【3D视觉创新应用竞赛作品系列​】 基于点云的视觉引导系统
- 沈向洋谈科研纠错:做好学问要“深揭猛批”
- 用c语言编写计费程序,电信计费模拟实现(C语言)...docx
- 如何让日志打印更加优雅和实现数据链路追踪?
- 网站ftp上传工具,六款值得你去使用的网站ftp上传工具
- Wscript.Shell 对象详细介绍!!
- 打开360安全卫士时弹出错误:windows找不到文件 regedit.exe
- 张一鸣,究竟有多可怕?身家千亿,不爱豪车美女,就喜欢做产品!
- 一行代码教你伪装黑客