mouse_event help needed

B

bowchow79

I have an application for which I'd like to simulate mouse clicks.
What I want to do is simulate a click at a specific location in the
application. I've tried PostMessage to no avail. I had a bit more
success with mouse_event, however even this doesn't seem to actually
send a click in this application. The code is roughly as
follows (targetHwnd is the hWnd of the target window I'd like to click
in, and targetX/targetY are the x/y coordinates on the screen I want to
click at):

<code>
ForceForegroundWindow(targetHwnd);
int x = targetX * 65536 / Screen.PrimaryScreen.Bounds.Width;
int y = targetY* 65536 / Screen.PrimaryScreen.Bounds.Height;
mouse_event(MOUSEEVENTF_MOUSEMOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
</code>

This code works fine simulating a mouse click in every other
application I've tried. However, the one I'm interested in does not
respond - the window is brought to the foreground and gains input
focus, the mouse moves to the desire location at which point the
application changes the cursor's icon, and nothing happens. This code
works in creating a mouse click for any other application I've tried.

One thing to note about this application in which I'm trying to
simulate the click is that it does not have any child windows. There
are no buttons or forms whose hWnds I can grab. It appears to render
all buttons, scrollbars and such itself, without using Windows. I have
no clue why it doesn't seem to receive clicks - is there anything
anyone can think of that would explain this behavior? Hopefully I'm
just missing something about emulating mouse clicks in Windows.
 
M

Mike Williams

This code works fine simulating a mouse click in every
other application I've tried. However, the one I'm
interested in does not respond - the window is brought
to the foreground and gains input focus, the mouse moves
to the desire location at which point the application changes
the cursor's icon, and nothing happens.

It may be hiding itself from this sort of stuff in all sorts of complicated
ways, or it may be doing something as simple as checking the time delay
between the "received focus" and the "click", or perhaps also between the
mousedown and the mouseup events in an attempt to discover whether the click
is likely to have been produced by a human operator. The delay between
mousedown and mouseup is typically in the region of 100 milliseconds or more
for a human operator, and perhaps a second or more between focus and
mousedown. Try introducing these delays in your code and see what happens.

Mike




This code
 
M

Mike Williams

.. . . and you might also need to introduce a delay of a hundred milliseconds
or so between the mouse arriving at the desired position and the mousedown.

Mike
 
J

J French

I have an application for which I'd like to simulate mouse clicks.
What I want to do is simulate a click at a specific location in the
application. I've tried PostMessage to no avail. I had a bit more
success with mouse_event, however even this doesn't seem to actually
send a click in this application. The code is roughly as
follows (targetHwnd is the hWnd of the target window I'd like to click
in, and targetX/targetY are the x/y coordinates on the screen I want to
click at):

Are you absolutely sure that you have the right HWND ?

I would check that using WindowFromPoint

You could also try using Mouse_Event

SetCapture problems also spring to mind
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top