Comment faire pour déplacer la souris avec le c++
Je veux déplacer le curseur de la souris avec un c++ script. Je suis à l'aide de Visual C++ 2010 Express pour Windows 7 à l'intérieur de Parallels et j'ai créé une application console.
Je sais SetCursorPos méthode, mais c'est juste ne fonctionne pas (il ne fait rien).
J'ai réussi à simuler les clics avec SendInput mais il ne fait pas bouger la souris.
C'est mon 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));
}
Êtes-vous sûr que ce n'est pas le déplacer? Peut-être le logiciel de machine virtuelle immédiatement se déplace vers l'arrière. (Mouvement du curseur fonctions à l'intérieur de la machine virtuelle ne peut pas affecter le système hôte, bien sûr, afin que l'hôte pointeur de la souris est toujours au même endroit, c'était avant, au cours de la fenêtre de la machine virtuelle)
Montrer l'utilisation de votre code. Nous ne pouvons pas vous aider si nous ne voyons pas ce que vous avez déjà essayé.
Code ajouté dans la question
Comment êtes-vous essayer d'utiliser
SetCursorPos ne fonctionne pas pour moi. Comme pour SendInput, tous ces 3 événements sont fait en une seule commande (comme on le voit dans les exemples sur le net)
Montrer l'utilisation de votre code. Nous ne pouvons pas vous aider si nous ne voyons pas ce que vous avez déjà essayé.
Code ajouté dans la question
Comment êtes-vous essayer d'utiliser
SetCursorPos
? Comme pour SendInput
, vous devriez probablement avoir 3 événements: Déplacer, Bouton enfoncé, Bouton de.SetCursorPos ne fonctionne pas pour moi. Comme pour SendInput, tous ces 3 événements sont fait en une seule commande (comme on le voit dans les exemples sur le net)
OriginalL'auteur jerkan | 2012-06-30
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe dans Parallels en raison de SmartMouse est Sur ou sur Auto.
Pour qu'un programme dans Parallels VM pour le contrôle de la souris avec
SetCursorPos
vous avez besoin de cacher le curseur. Vous pouvez le faire avecShowCursor(0);
avant de vous faire tout le mouvement de la souris par exempleSetCursorPos
.Maintenant, vous serez en mesure de contrôler la souris tout en SmartMouse est réglé sur Auto ou Off.
OriginalL'auteur Ignas2526
J'ai trouvé le problème. Il s'avère Parallels a une fonctionnalité appelée Smart de la Souris qui vous permet de vous déplacer librement entre OSX et Windows. Une fois que j'ai désactivé, souris déplacée comme prévu.
OriginalL'auteur jerkan