SetCursorPos двигает мышь дважды?

Я делаю программу, которая позволяет пользователям настраивать горячие клавиши и заставлять их выполнять определенные функции.

Первая функция, которую я сделал, перемещает курсор к определенному набору координат в окне игры. Это делается путем нахождения клиентской области, затем добавления заданных координат и перемещения курсора туда. Однако, похоже, что каждый раз, когда вызывается SetCursorPos, он перемещается дважды: сначала в правильное место, в (0,0). Я не уверен, что вызвало это, и я часами гуглял и отлаживал безрезультатно. Все работает правильно, за исключением того, что оно движется дважды. Я использую Windows 8 и компилирую с Code :: Blocks.

Скрипт выводит координаты, по которым он должен двигаться, до того, как мышь начнет двигаться и после. Они должны быть одинаковыми. Он также выводит «клавишу вниз», когда горячая клавиша нажата, и «клавишу вверх», когда она отпущена.

Нажатие F1 заставит мышь двигаться.

#include <iostream>
#include <windows.h>
using namespace std;

class macro{
public:
int x, y, w, h;
HWND hWnd;

HWND get_hWnd(){
hWnd   =   FindWindow(NULL,"Untitled - Notepad");
return hWnd;
}

void get_Pos(){
RECT pos;
GetClientRect(hWnd,(LPRECT)&pos);
ClientToScreen(hWnd,(LPPOINT)&pos.left);
ClientToScreen(hWnd,(LPPOINT)&pos.right);
w   =   pos.right;
h   =   pos.bottom;
x   =   pos.left;
y   =   pos.top;
}
void activate(){
ShowWindow(hWnd, SW_SHOWMAXIMIZED);
}
void initialize(){
get_hWnd();
get_Pos();
}
void mousemove(int rx, int ry){
get_Pos();
cout << "Pre-move: " << rx+x << "," << ry+y << endl;
SetCursorPos(rx + x,ry + y);
cout << "Post-move: " << rx+x << "," << ry+y << endl;
}
}macro;

int main(){
macro.initialize();
bool loop   =   true;
bool action_complete    =   true;
int prev    =   0;
int curr    =   0;
bool key_state; // True if down, false if up.

while(loop){
if(GetAsyncKeyState(0x70)){
curr    =   1;
}
else{
curr    =   0;
}
if (prev != curr){
if(curr){
key_state   =   true;
macro.mousemove(100,100);
cout << "key down" << endl;
Sleep(100);
}
else{
key_state   =   false;
cout << "key up" << endl;
Sleep(100);
}
prev    =   curr;
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector