Matlab探尋(一):控制鼠標和模擬鍵盤(java.awt.Robot)

  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章