Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How do I move the mouse pointer?

Posted on 2000-04-11
12
Medium Priority
?
389 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Moving data to the cloud? Find out if you’re ready

Before moving to the cloud, it is important to carefully define your db needs, plan for the migration & understand prod. environment. This wp explains how to define what you need from a cloud provider, plan for the migration & what putting a cloud solution into practice entails.

 
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

Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

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…
In this post we will learn different types of Android Layout and some basics of an Android App.
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.
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…

715 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