用途

在电脑(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模拟鼠标和键盘输入相关推荐

  1. java完成键盘动作_java实现鼠标和键盘动作后台监听

    有的时候需要我们对鼠标和键盘的动作(鼠标的移动,键盘的点击)进行监听,比如按键记录,鼠标坐标记录等. 我们使用JNA来实现以上的操作 tips:JNA类库使用一个很小的本地类库sub 动态的调用本地代 ...

  2. linux模拟手柄输入,linux下如何模拟按键输入和模拟鼠标

    查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices 设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键 ...

  3. 模拟linux设备按键工具,linux下如何模拟按键输入和模拟鼠标

    linux下如何模拟按键输入和模拟鼠标 发布时间:2008-08-19 21:11:54来源:红联作者:anopup 查看/dev/input/eventX是什么类型的事件, cat /proc/bu ...

  4. C++实现鼠标控制 封装常见的模拟鼠标、键盘的操作函数

    API 或 MFC 视窗程序 里 有 函数, 例如 API 函数 设位置: BOOL SetCursorPos( int x, int y); 参数是屏幕坐标x,y 头文件 Winuser.h 链接库 ...

  5. C# WPF 中用代码模拟鼠标和键盘的操作

    C# WPF 中用代码模拟鼠标和键盘的操作 原文:C# WPF 中用代码模拟鼠标和键盘的操作 原文地址 C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的.但是可惜的是, ...

  6. python 模拟鼠标键盘_python之模拟鼠标键盘动作

    上个月就打算开发个还算好玩的项目,但是一直没时间.这篇是此项目用到的一部分, 处理好此部分基本还差通信等方面的了.首先模拟鼠标键盘按下释放的动作,本人利用X11 这个库,所以要了解X11编程;其次,本 ...

  7. Android 使用 sendevent 模拟鼠标和键盘事件

    Android 使用 sendevent 模拟鼠标和键盘事件 模拟原理是对驱动发送消息,就是linux里面的input子系统. 命令格式: sendevent /dev/input/eventX [t ...

  8. 控制台模拟鼠标、键盘操作

    控制台模拟鼠标.键盘操作 模拟鼠标.键盘操作,能让命令行顿然强大,想想,制作批处理版屏幕键盘等都不在话下(已制作过,效果很不错).虽然这也跟CUI无关.本教程教会你如何让命令行模拟鼠标.键盘的操作. ...

  9. Python - Python 模拟鼠标和键盘进行基本操作

    文章目录 Python - Python 模拟鼠标和键盘进行基本操作 相关内容:Python 实用内容 1.安装模块pyautogui 2.基本操作 Python - Python 模拟鼠标和键盘进行 ...

最新文章

  1. 混合云部署MySQL集群_数据库混合云解决方案
  2. linux下collada-dom编译,COLLADA DOM Tutorial
  3. GPUImage API 文档之GPUImagePicture类
  4. PyTorch随笔-2
  5. python编写安全工具_Python3学习系列(四):编写属于自己的邮件伪造工具
  6. 复杂纹理复制及纹理叠加效果
  7. SpringCloud OpenFeign(二)
  8. javascript学习方法分享
  9. 解决vs code下powerline10k图形渲染异常
  10. php框架laravel手册,Laravel 5 框架入门(一)
  11. 高中数学学习方法的8个诀窍,高中生必看
  12. Vue之生命周期mounted、activated区别及实际运用例子解析
  13. 2个鸡蛋100层楼--动态规划
  14. APP爬虫之央视新闻
  15. 程序员必知1700英语单词
  16. 什么是IDC ,可以用来做什么
  17. 惊了!这才是真正的 Windows 摸鱼神器!!!
  18. CAP 理论及其解决方案
  19. ESlint-airbnb配置
  20. 给大家分享一下从卷烟-电子烟-口含烟的发展过程

热门文章

  1. java websphere mq_如何在java中使用WebSphere MQ
  2. 【3D视觉创新应用竞赛作品系列​】 基于点云的视觉引导系统
  3. 沈向洋谈科研纠错:做好学问要“深揭猛批”
  4. 用c语言编写计费程序,电信计费模拟实现(C语言)...docx
  5. 如何让日志打印更加优雅和实现数据链路追踪?
  6. 网站ftp上传工具,六款值得你去使用的网站ftp上传工具
  7. Wscript.Shell 对象详细介绍!!
  8. 打开360安全卫士时弹出错误:windows找不到文件 regedit.exe
  9. 张一鸣,究竟有多可怕?身家千亿,不爱豪车美女,就喜欢做产品!
  10. 一行代码教你伪装黑客