??Mtalab真的是很强大,不过它自身不能实现鼠标单击和按下键盘等事件的模拟。本文通过调用java.awt.Robot类来实现以上功能
添加引用 【Matlab探寻(一)(控制鼠标和模拟键盘(java.awt.Robot))】??首先在Matlab中添加以下代码,引用java.awt.Robot类,并实例化
import java.awt.Robot;
import java.awt.event.*;
robot = java.awt.Robot;
控制鼠标 ??设置鼠标光标位置,我们可以使用以下方法 , 其中(x, y)为鼠标光标相对于屏幕左上角的坐标 。这样我们就可以灵活控制鼠标移动到屏幕的任何位置。
robot.mouseMove(X, Y)
??控制鼠标单击,可以使用以下方法,其中为了成功单击,figure必须具有焦点,鼠标必须放置在figure上,所以添加了figure(gcf); drawnow;
figure(gcf);
drawnow;
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mouseRelease(java.awt.event.InputEvent.BUTTON1_MASK);
??控制鼠标双击,同样的道理,把mousePress和mouseRelease重新调用一遍:
figure(gcf);
drawnow;
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mouseRelease(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mouseRelease(java.awt.event.InputEvent.BUTTON1_MASK);
??当然如果没有使用figure,而是在Matlab里使用其他程序的界面(比如WPF),figure(gcf); drawnow; 可以删掉,但是必须保证你的界面获取了焦点。
??当然还可以控制鼠标其他键,方法如下 :
java.awt.event.InputEvent.BUTTON1_MASK// left mouse button
java.awt.event.InputEvent.BUTTON2_MASK// middle mouse button
java.awt.event.InputEvent.BUTTON3_MASK// right mouse button
模拟键盘 ??和控制鼠标的原理类似,模拟键盘只需要调用不同的方法。模拟按下键盘的“V”,可以这样写:
robot.keyPress(java.awt.event.KeyEvent.VK_V);
robot.keyRelease(java.awt.event.KeyEvent.VK_V);
??java中常用的(电脑)键盘常量如下:
键盘常量 | 键名 | 键盘常量 | 键盘常量 |
---|---|---|---|
VK_CONTROL | 控制键 | VK_UP | 上箭头 |
VK_SHIFT | shift键 | VK_DOWN | 下箭头 |
VK_BACK_SPACE | 退格键 | VK_LEFT | 左箭头 |
VK_ENTER | 回车键 | VK_RIGHT | 右箭头 |
VK_SPACE | 空格键 | VK_ESCAPE | Esc键 |
VK_F1- -VK_F12 | F1- -F12 | VK_TAB | Tab键 |
VK_0 - -VK_9 | 0- -9 | VK_PGUP | page up键 |
VK_A - -VK_Z | A- -Z | VK_PGDN | page down键 |
VK_SEMICOLON | 分号 “; ” | VK_PERIOD | 句点 “.” |
K_UNDERSCORE | 下划线 “_” | VK_COMMA | 逗号 “,” |
总结 ??Matlab的界面不够美观,由于项目数据处理离不开Matlab,最终我不得不使用了WPF界面(至少可以调调Alpha通道吧)和Matlab界面结合的方法。所以就牵扯到用Matlab控制WPF界面切换,于是才想到控制鼠标和模拟键盘。是以为记。
??更多内容可以参考:GUI automation using a Robot
推荐阅读
- 最优化问题|改进交叉算子的自适应人工蜂群黏菌算法
- matlab|嵌入均衡池的黏菌优化算法
- 最优化问题|加入领导者的黏菌优化算法
- MATLAB图形界面|基于Matlab的汽车出入库计时计费系统
- Matlab旅程|MATLAB的结构化程序设计
- matlab 内存管理 清理内存
- matlab中使用colormap没有效果
- Matlab|圆柱绕流
- MATLAB|Splart-Allmaras湍流模型及MATLAB编程~
- regionprops统计被标记的区域的面积分布,显示区域总数。