I want to move the mouse cursor using a C ++ script. I am using Visual C ++ 2010 Express on Windows 7 inside Parallels, and I created a console application.
I know the SetCursorPos method, but it just doesn't work (it does nothing).
I managed to simulate clicks using SendInput, but it actually does not 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)); }
source share