How to move mouse with c++
Solution 1
This happens in Parallels because of SmartMouse is On or on Auto.
In order for a program in Parallels VM to control the mouse with SetCursorPos
you need to hide cursor first. You can do that with ShowCursor(0);
before you do any mouse movement e.g. SetCursorPos
.
Now you will be able to control the mouse while SmartMouse is set to Auto or Off.
Solution 2
I found the problem. It turns out Parallels has a feature called Smart Mouse that allows you move freely between OSX and Windows. Once I deactivated it, mouse moved as expected.
jerkan
I am senior backend developer with 15+ years of experience working with PHP.
Updated on July 09, 2022Comments
-
jerkan almost 2 years
I want to move the mouse cursor with a c++ script. I am using Visual C++ 2010 Express in a Windows 7 inside Parallels and I created a console application.
I know SetCursorPos method but it is just not working (it does nothing).
I managed to simulate clicks with SendInput but it does not actually move the mouse.
This is my code:
#include <Windows.h> #include <Tlhelp32.h> #include <stdio.h> #include <string> #include <iostream> #include <fstream> #include <sstream> #include <time.h> void mouseLeftClick(const int x, const int y); // window HWND hWindow; int main() { // find window hWindow = FindWindow(NULL, "Calculadora"); if (NULL == hWindow) { OutputDebugStringA("Couldn't find application."); }else{ if (!SetForegroundWindow(hWindow)) { OutputDebugStringA("Couldn't set application to foreground."); }else{ // click on 1 mouseLeftClick(20 265)); Sleep(500); // click on 2 mouseLeftClick(60, 265); Sleep(500); } } return 0; } void mouseLeftClick(const int x, const int y) { // get the window position RECT rect; GetWindowRect(hWindow, &rect); // calculate scale factor const double XSCALEFACTOR = 65535 / (GetSystemMetrics(SM_CXSCREEN) - 1); const double YSCALEFACTOR = 65535 / (GetSystemMetrics(SM_CYSCREEN) - 1); // get current position POINT cursorPos; GetCursorPos(&cursorPos); double cx = cursorPos.x * XSCALEFACTOR; double cy = cursorPos.y * YSCALEFACTOR; // calculate target position relative to application double nx = (x + rect.left) * XSCALEFACTOR; double ny = (y + rect.top) * YSCALEFACTOR; INPUT Input={0}; Input.type = INPUT_MOUSE; Input.mi.dx = (LONG)nx; Input.mi.dy = (LONG)ny; // set move cursor directly and left click Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; SendInput(1,&Input,sizeof(INPUT)); }