Code covered by the BSD License  

Highlights from
jMouseEmu: Mouse Emulator (v2.2)

Be the first to rate this file! 16 Downloads (last 30 days) File Size: 5.47 KB File ID: #28357

jMouseEmu: Mouse Emulator (v2.2)

by Kesh Ikuma

 

02 Aug 2010 (Updated 31 Aug 2010)

A Java-based function to control mouse programmatically

| Watch this File

File Information
Description

JMOOUSEEMU emulates the mouse cursor positioning and clicking. It supports either single- or multiple-command modes.

----
UPDATE (8/31/2010):
INPUTEMU utility (linked below) supersedes this function (without HG handle support). If your program does not use the HG handle (i.e., H=0), consider using INPUTEMU instead.
----

The function utilizes the java.Robot class to control mouse.

Single-Command Mode:

JMOUSEEMU(H,POS,CLICK) mouse cursor to POS = [X,Y] (in pixels) with respect to (the lower left hand corner of) the graphics object H. Mouse click option is one of 'none' | 'normal' | 'extend' | 'alternate' | 'open', according to Figure's SelectionType property. If only mouse click without cursor movement is desired, set H = 0 and leave POS empty.

The arguments H and CLICK may be omitted. See the help text for more details.

Example. Martin Weber's setfocus(H) function can be implemented using this function:

   mpos = get(0,'PointerLocation');
   jmouseemu(H,'normal');
   jmouseemu(0,mpos);

Multiple-Command Mode (new in v.2.0):

JMOUSEEMU(CMDS,T) performs the sequence of mouse commands using a MATLAB timer with interval T seconds. CMDS is an N-by-3 cell array specifying N mouse commands. The n-th row consists of {H_n, POS_n, CLICK_n} to define the mouse command at nT-th second. Alternatively, each interval between successive commands can be specified with size-N vector T.

In addition to the CLICK options for Single-Command Mode, two additional CLICK options are introduced to support mouse dragging: 'drag_on' and 'drag_off'. Also, there are 2 not-so-CLICK options: 'delay' and 'wheel'. The 'delay' option causes a momentary pause (duration in POS in seconds) and the 'wheel' option turns the mouse wheel (notches to turn in POS: positive-towards, negative-away).

IMPORTANT USAGE NOTE:
If jMouseEmu is used to trigger multiple mouse callbacks within MATLAB, call jMouseEmu for each callback trigger. Moreover, set the last jMouseEmu command to trigger the callback. Not following this may cause undesirable behavior (i.e., delayed callback execution and erroneous figure's SelectionType property value during the callback).

Example. Circular mouse movement:

   Ts = 0.01; % update interval
   T = 2; % emulation duration

   % plot a circle
   t = (0:Ts:T)';
   mpos = [100*sin(2*pi*t/T)+pos(3)/2 100*cos(2*pi*t/T)+pos(4)/2];
   plot(mpos(:,1),mpos(:,2));

   % show button down activity
   set(gcf,'WindowButtonDownFcn',@(hObj,event)disp(get(hObj,'SelectionType')));

   % adjust axis so its data = pixels
   pos = get(gcf,'Position');
   set(gca,'Units','pixels','Position',[0 0 pos([3 4])],'XLim',[0 pos(3)],'YLim',[0 pos(4)]);

   % generate commands to follow the cirle & make it to drag
   N = size(mpos,1);
   cmds = [cell(N,1) mat2cell(mpos,ones(N,1),2) cell(N,1)];
   cmds{1,3} = 'drag_on';
   cmds{N,3} = 'drag_off';

   % emulate!
   jmouseemu(cmds,Ts)

Acknowledgements

The author wishes to acknowledge the following in the creation of this submission:
setfocus, ScreenCapture - get a screen-capture of a figure frame or component, inputEmu: Keyboard & Mouse Emulator (v1.0.1)
This submission has inspired the following:
inputEmu: Keyboard & Mouse Emulator (v1.0.1)

MATLAB release MATLAB 7.10 (2010a)
Other requirements Java.awt support
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (3)
05 Sep 2010 Coney Woodcock

Hi
I am trying to use this code to just click without interfering with the mouse position (to measure speed of mouse movement). Is it possible with this code?
What do you mean by leave POS as empty? I have tried only entering 2 inputs, h = 0, and click = 'normal', as well as heaps of combinations similar, and it gives me errors, especially line 122 column 5.

05 Sep 2010 Kesh Ikuma

@Coney - Not sure what your exact syntax is, but either

jmouseemu(0,[],'normal'); % or
jmouseemu({0,[],'normal'});

should do what you want it to do. FYI, the second input parameter is the POS argument.

If you need further assistance, please post (or email me) your code. I'm curious to know how the error you described occurred.

20 Sep 2010 Y Mehta

inputemu('alternate',[1000 1000]);

??? Undefined variable "KeyEvent" or class "KeyEvent.VK_CONTROL".

Error in ==> inputemu>convertToLowLevelActions at 347
params{I} = KeyEvent.VK_CONTROL;

Error in ==> inputemu at 119
[actions,params,dt,msg] = convertToLowLevelActions(cmds,deltaT,idx_mouse,oemChars);

------

I get similar error with extend option. Open and normal options work fine.

Please login to add a comment or rating.
Updates
12 Aug 2010

v.2.0 - added multiple-command mode - added more click options

14 Aug 2010

(v2.1)
* Fixed figure auto-focus bug
* Allowing T = 0
* Allowing no input argument

28 Aug 2010

(v2.2)
* Using robot.delay() to queue interval-command instead of MATLAB timer
* Added 'delay' & 'wheel' CLICK options
* Added option to specify individual interval durations

31 Aug 2010

Info update

Tag Activity for this File
Tag Applied By Date/Time
mouse Kesh Ikuma 02 Aug 2010 11:52:15
gui Kesh Ikuma 02 Aug 2010 11:52:15
set focus Kesh Ikuma 02 Aug 2010 11:52:15
utilities Kesh Ikuma 02 Aug 2010 11:52:15
java Kesh Ikuma 12 Aug 2010 10:39:15
macro Kesh Ikuma 12 Aug 2010 10:39:16
demo Kesh Ikuma 12 Aug 2010 10:39:17
automation Kesh Ikuma 30 Aug 2010 12:26:24
automation chirag modi 19 Mar 2011 08:34:37
demo chirag modi 19 Mar 2011 08:34:40
set focus Guilherme Melo 23 Oct 2011 16:28:29
mouse mathieu 06 Dec 2011 03:52:58

Contact us at files@mathworks.com