Mtalab真的是很強大,不過它自身不能實現鼠標單擊和按下鍵盤等事件的模擬。本文通過調用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 | 逗號 “,” |
實際以java API的定義爲準:
總結
Matlab的界面不夠美觀,由於項目數據處理離不開Matlab,最終我不得不使用了WPF界面(至少可以調調Alpha通道吧)和Matlab界面結合的方法。所以就牽扯到用Matlab控制WPF界面切換,於是纔想到控制鼠標和模擬鍵盤。是以爲記。
更多內容可以參考:GUI automation using a Robot