?
Solved

How do I move the mouse pointer?

Posted on 2000-04-11
12
Medium Priority
?
395 Views
Last Modified: 2013-11-20
In Win98 (using Microsoft C++) I want to move the sliders on another application by controlling the mouse pointer, like marco programs do.

For example:
  move to x=400, y=500, mouse buttons released
  press left mouse
  move to x=440, y=500, left mouse held down.

Ideally this should be by  API, but if that is not possible then C code would be acceptable.

Ideally I would like to use coordinates relative to a named window rather than absolute screen coordinates.

How do I do this?
 
0
Comment
Question by:PC_User321
  • 6
  • 2
  • 2
  • +1
12 Comments
 
LVL 5

Expert Comment

by:Wyn
ID: 2706214
You'd use mouse_event()...
Pay attention to the measure size of it ...
You can use ScreenToClient() to convert ...
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2706220
And you'd also use SetCursoPos() to move the mouse ...
That's the info I can give to you...

Regards
0
 
LVL 5

Author Comment

by:PC_User321
ID: 2706296
Thanks for your reply.

I am new to Windows programming, so please bear with me.

I looked up mouse_event in MSDN, and it appears to only tell you what the human is doing to the mouse, rather than allowing you to control the mouse.  For example, from MSDN:

MOUSEEVENTF_LEFTDOWN
Specifies that the left button is down.

I don't see any parameters like
  MOVE_MOUSE  or SIMULATE_BUTTON_PRESS

If it is possible to do things like that could you explain a bit more.


SetCursorPos looks as if it could be useful, but MSDN says

If the new coordinates are not within the screen rectangle set by the most recent ClipCursor function, Windows CE automatically adjusts the coordinates so the cursor stays within the rectangle.
.... and ...
A window should move the cursor only when the cursor is in its client area.

This makes me think that I may have difficulty moving the mouse anywhere on the screen, like macro programs do.

Any thoughts on this?


Thanks.
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
LVL 5

Author Comment

by:PC_User321
ID: 2706942
Sorry Wyn, but you haven't responded to my comments so I will unlock this question and allow others to comment.
0
 
LVL 31

Accepted Solution

by:
Zoppo earned 280 total points
ID: 2707091
Hi PC_User321,

this code for example moves the slider 10 pixels to the right when mouse is on the slider button.

POINT pt;
GetCursorPos( &pt );
int xMax = GetSystemMetrics( SM_CXSCREEN );
int yMax = GetSystemMetrics( SM_CYSCREEN );
int x = pt.x + 10; // new x-position in pixels
int y = pt.y; // new y-position in pixels
x = x * 65536 / xMax; // x-position in mickeys
y = y * 65536 / yMax; // x-position in mickeys
      
mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x, y, 0, 0 );

to move the mouse cursor onto the slider button you can either use mouse_event or SetCursorPos. If you use mouse_event you'll have to calculate the mickeys as above.

hope that helps,

ZOPPO
0
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 2707206
I am afraid Wyn is right - mouse_event is the function you want. It is the MS documentation that leaves a lot to be desired.

the dwFlags parameter is an [in] parameter and can therefore only be used to set data not retrieve it.

to move the mouse use the MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE and set the dx,dy values.

to do a mouse click you would have to send a MOUSEEVENTF_LEFTDOWN followed by a MOUSEEVENTF_LEFTUP
0
 
LVL 5

Author Comment

by:PC_User321
ID: 2707216
Thanks for your reply.

You are basically saying the same as Wyn, but with more description, which I like.

You set LEFTDOWN and LEFTUP active simultaneously.  Is that going to result in the right thing, that is
   Left down, then
   Move, then
   Left up, ready to be moved to the next place?

If so, then how would I specify
   Left up, then
   Move, then
   Left down?
(I just want to get an understanding of how it works.  MSDN is helpful there.)

Will SetCursorPos and mouse_event let me go anywhere on the screen?

Thanks.
0
 
LVL 5

Author Comment

by:PC_User321
ID: 2707229
My last comment was directed to Zoppo.

Shaun, I only saw your post after I sumbitted mine.  Thinking about it.
0
 
LVL 9

Expert Comment

by:ShaunWilde
ID: 2707240
I only saw zoppos after submitting mine :)
0
 
LVL 5

Author Comment

by:PC_User321
ID: 2707251
!! Bad mistake !!
I left out the 'un' in "MSDN is UNhelpful there"  :)

Shaun, you seem to be saying that I send separate mouse_events for
  move with button down
and
  release button.

Makes sense.
0
 
LVL 31

Expert Comment

by:Zoppo
ID: 2707255
Hi PC_User321,

Well, I've tested it here and it worked, but perhaps it would be better to split it to three calls like this:

mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );

Both SetCursorPos and mouse_event use screen coordinates (mouse_event uses 'mickeys', SetCursorPos uses pixels) and can be used to go anywhere on screen (or better anywhere on screen or if cursor clip rectangle is set with ClipCursor() anywhere in this cursor clip rectangle)

ZOPPO
0
 
LVL 5

Author Comment

by:PC_User321
ID: 2707287
I will accept Zoppo's answer and post conolation prizes for Wyn and Shaun in the MFC section.

Thanks to you all.
0

Featured Post

Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
Introduction: Displaying information on the statusbar.   Continuing from the third article about sudoku.   Open the project in visual studio. Status bar – let’s display the timestamp there.  We need to get the timestamp from the document s…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
The Relationships Diagram is a good way to get an overall view of what a database is keeping track of. It is also where relationships are defined. A relationship specifies how two tables connect to each other. As you build tables in Microsoft Ac…
Suggested Courses
Course of the Month6 days, 8 hours left to enroll

594 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question