How can I record mouse clicks (left and right) with coordinates and time?
Show older comments
Hello,
I am trying to capture mouse movements outside of the GUI, on second display while users are using another program. So far, I manage to record the coordinates, every 0.1 seconds period, by using timer function. I need to add mouse clicks (left or right button down and ups). Does anyone know how can I do this? I try to Buttondownfnc but it only works with a figures not outside of the Matlab..or is there any workaround?
fileID = fopen('motion.txt','wt');
t = timer('ExecutionMode', 'fixedRate','Period', 0.1, 'TasksToExecute', 200, ...
'TimerFcn', @(~,~) fprintf(fileID,'(X, Y) = (%g, %g)\n', get(0, 'PointerLocation')));
start(t);
8 Comments
Adam Danz
on 5 Mar 2021
I'm not aware of a way to capture mouse clicks in Matlab outside of clicking on graphics objects produced by Matlab.
Doli Swey
on 5 Mar 2021
Adam Danz
on 5 Mar 2021
The buttondownfcn is a propery of the object it's assigned to and will only respond to interactions with that object.
Example (click inside and outside the figure)
fig = figure();
fig.ButtonDownFcn = @(~,~)disp('hit')
Doli Swey
on 5 Mar 2021
Adam Danz
on 5 Mar 2021
No to both questions 😕.
> can we assign a program as object?
That's what OOP is for (see Create a Simple Class). But ButtonDownFcn's are only properties of graphics objects.
> or else maybe create transparent object...
Axes can be transparent but figures cannot be transparent. You can't have an axis without a figure. Since you must click on the object for a buttondownfcn to respond, the object cannot be under something else.
If you add some concise details to explain the goal I might be able to think of some stuff to try but it doesn't sound like Matlab has anything that would work with what I imagine you're trying to do. There are definitely 3rd party mouse tracking software that records and stores mouse clicks.
Doli Swey
on 6 Mar 2021
Mario Malic
on 6 Mar 2021
Some of the Adobe programs support the Active X controls IIRC, maybe your software supports that, if it does, maybe there are methods that track mouse movement.
Doli Swey
on 6 Mar 2021
Answers (1)
You can emulate this with WindowsAPI. Setting the window completely invisble does not work, because with Alpha=0.0 the mouse events are not caught anymore. But with Alpha= 0.01 you cannot see the window anymore, but clicks are still caught:
FigH = figure;
FigH.ButtonDownFcn = @(FigH, Event) disp(Event);
drawnow;
% Set inner window covers complete screen on monitor m'th monitor:
m = 1;
WindowAPI(FigH, 'Position', 'full', m);
% Allmost transparent (I do not see anything, do you):
WindowAPI(FigH, 'Alpha', 0.01);
% Crop window border, such this does not cover the margins
% of other monitors:
WindowAPI(FigH, 'Clip', true);
% Set window to top or catch at least the focus:
WindowAPI(FigH, 'Top');
WindowAPI(FigH, 'SetFocus');
for k = 1:100
pause(0.1)
disp(get(groot, 'PointerLocation'))
end
delete(FigH); % Important: Otherwise the window steals all events!
5 Comments
Jan
on 6 Mar 2021
You can catch the mouse position and the clicks in the almost transparent Matlab window at first. Then you give the focus to the wanted Window and use jawa.awt.Robot to repeat the recorded clicks. Or maybe the WindowAPI can forward the clicks also.
I've tried to implement this based on : https://www.mathworks.com/matlabcentral/answers/408669-how-do-i-close-a-desktop-window-using-matlab-commands but was not successful yet to insert:
SendMessage(childWindow, WM_LBUTTONUP, new IntPtr(MK_LBUTTON), NULL);
Doli Swey
on 8 Mar 2021
Jan
on 8 Mar 2021
My suggestion would be to record the mouse clicks in the transparent window, move the Acrobat window to top an to emulate the formerly recorded mouse clicks.
For fast double clicks this might fail. With SendMessage there is no need for a time consuming movement of the Acrobat window to the top. But as said already, I did not get the Mex-function to work.
There are some mouse recording softwares, which track the mouse position and the clicks. Do you have a good reason to do this in Matlab?
Doli Swey
on 8 Mar 2021
Categories
Find more on Graphics Object Properties in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!