From 92bdacddca091a032d9a0e3d1d302272449bcf99 Mon Sep 17 00:00:00 2001 From: Dustin Bensing Date: Tue, 16 Jul 2013 13:43:44 +0200 Subject: [PATCH] added win support for mouse like linux and mac --- XInputSimulator/main.cpp | 37 +++++---- XInputSimulator/xinputsimularotimplwin.cpp | 85 ++++++++++++++++++-- XInputSimulator/xinputsimularotimplwin.h | 4 + XInputSimulator/xinputsimulatorimplmacos.cpp | 8 -- 4 files changed, 99 insertions(+), 35 deletions(-) diff --git a/XInputSimulator/main.cpp b/XInputSimulator/main.cpp index e04b008..629db27 100644 --- a/XInputSimulator/main.cpp +++ b/XInputSimulator/main.cpp @@ -33,26 +33,25 @@ int main() XInputSimulator &sim = XInputSimulator::getInstance(); waitABit(); - waitABit(); sim.mouseMoveTo(500,400); -// waitABit(); -// sim.mouseMoveRelative(400, -100); -// waitABit(); -// sim.mouseDown(1); -// waitABit(); -// sim.mouseMoveRelative(0, 300); -// waitABit(); -// sim.mouseUp(1); -// waitABit(); -// //scroll down and up -// sim.mouseScrollY(10); -// waitABit(); -// sim.mouseScrollY(-10); -// //scroll left and right -// waitABit(); -// sim.mouseScrollX(10); -// waitABit(); -// sim.mouseScrollX(-10); + waitABit(); + sim.mouseMoveRelative(400, -100); + waitABit(); + sim.mouseDown(1); + waitABit(); + sim.mouseMoveRelative(0, 300); + waitABit(); + sim.mouseUp(1); + waitABit(); + //scroll down and up + sim.mouseScrollY(10); + waitABit(); + sim.mouseScrollY(-10); + //scroll left and right + waitABit(); + sim.mouseScrollX(10); + waitABit(); + sim.mouseScrollX(-10); waitABit(); diff --git a/XInputSimulator/xinputsimularotimplwin.cpp b/XInputSimulator/xinputsimularotimplwin.cpp index 4a39790..bd0cd14 100644 --- a/XInputSimulator/xinputsimularotimplwin.cpp +++ b/XInputSimulator/xinputsimularotimplwin.cpp @@ -22,35 +22,68 @@ #include "notimplementedexception.h" #include +#include + +#define MOUSEEVENTF_HWHEEL 0x01000 + XInputSimularotImplWin::XInputSimularotImplWin() { + this->initCurrentMousePosition(); +} + +void XInputSimularotImplWin::initCurrentMousePosition() +{ + POINT p; + if (GetCursorPos(&p)) + { + this->currentX = p.x; + this->currentY = p.y; + } } void XInputSimularotImplWin::mouseMoveTo(int x, int y) { - std::cout << "move the mouse!\n"; + SetCursorPos(x, y); + + this->currentX = x; + this->currentY = y; } void XInputSimularotImplWin::mouseMoveRelative(int x, int y) { - throw NotImplementedException(); + int newX = this->currentX + x; + int newY = this->currentY + y; + + SetCursorPos(newX, newY); + + this->currentX = newX; + this->currentY = newY; } +//TODO use the button from parameter list void XInputSimularotImplWin::mouseDown(int button) { - throw NotImplementedException(); + INPUT in={0}; + in.type = INPUT_MOUSE; + in.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; + SendInput(1,&in,sizeof(INPUT)); + ZeroMemory(&in,sizeof(INPUT)); } +//TODO use the button from parameter list void XInputSimularotImplWin::mouseUp(int button) { - throw NotImplementedException(); - + INPUT in={0}; + in.type = INPUT_MOUSE; + in.mi.dwFlags = MOUSEEVENTF_LEFTUP; + SendInput(1,&in,sizeof(INPUT)); + ZeroMemory(&in,sizeof(INPUT)); } +//TODO use the button from parameter list void XInputSimularotImplWin::mouseClick(int button) { - throw NotImplementedException(); this->mouseDown(button); //std::this_thread::sleep_for(std::chrono::milliseconds(1000)); this->mouseUp(button); @@ -58,12 +91,48 @@ void XInputSimularotImplWin::mouseClick(int button) //kajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjf void XInputSimularotImplWin::mouseScrollX(int length) { - throw NotImplementedException(); + int scrollDirection = 1 * 50; // 1 left -1 right + + if(length < 0){ + length *= -1; + scrollDirection *= -1; + } + + for(int cnt = 0; cnt < length; cnt++) + { + INPUT in; + in.type = INPUT_MOUSE; + in.mi.dx = 0; + in.mi.dy = 0; + in.mi.dwFlags = MOUSEEVENTF_HWHEEL; + in.mi.time = 0; + in.mi.dwExtraInfo = 0; + in.mi.mouseData = scrollDirection;// WHEEL_DELTA; + SendInput(1,&in,sizeof(in)); + } } void XInputSimularotImplWin::mouseScrollY(int length) { - throw NotImplementedException(); + int scrollDirection = -1 * 50; // 1 up -1 down + + if(length < 0){ + length *= -1; + scrollDirection *= -1; + } + + for(int cnt = 0; cnt < length; cnt++) + { + INPUT in; + in.type = INPUT_MOUSE; + in.mi.dx = 0; + in.mi.dy = 0; + in.mi.dwFlags = MOUSEEVENTF_WHEEL; + in.mi.time = 0; + in.mi.dwExtraInfo = 0; + in.mi.mouseData = scrollDirection;// WHEEL_DELTA; + SendInput(1,&in,sizeof(in)); + } } void XInputSimularotImplWin::keyDown(int key) diff --git a/XInputSimulator/xinputsimularotimplwin.h b/XInputSimulator/xinputsimularotimplwin.h index 32a1ce3..6c710e3 100644 --- a/XInputSimulator/xinputsimularotimplwin.h +++ b/XInputSimulator/xinputsimularotimplwin.h @@ -25,6 +25,10 @@ class XInputSimularotImplWin: public XInputSimulatorImpl { private: + int currentX; + int currentY; + + void initCurrentMousePosition(); public: XInputSimularotImplWin(); diff --git a/XInputSimulator/xinputsimulatorimplmacos.cpp b/XInputSimulator/xinputsimulatorimplmacos.cpp index 281abc7..a959f60 100644 --- a/XInputSimulator/xinputsimulatorimplmacos.cpp +++ b/XInputSimulator/xinputsimulatorimplmacos.cpp @@ -91,8 +91,6 @@ void XInputSimulatorImplMacOs::mouseMoveRelative(int x, int y) //TODO use the button from parameter list void XInputSimulatorImplMacOs::mouseDown(int button) { - //throw NotImplementedException(); - CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseDown, CGPointMake(this->currentX, this->currentY), @@ -107,8 +105,6 @@ void XInputSimulatorImplMacOs::mouseDown(int button) //TODO use the button from parameter list void XInputSimulatorImplMacOs::mouseUp(int button) { - //throw NotImplementedException(); - CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, CGPointMake(this->currentX, this->currentY), @@ -128,8 +124,6 @@ void XInputSimulatorImplMacOs::mouseClick(int button) //kajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjf void XInputSimulatorImplMacOs::mouseScrollX(int length) { - //throw NotImplementedException(); - int scrollDirection = -1; // 1 left -1 right if(length < 0){ @@ -158,8 +152,6 @@ void XInputSimulatorImplMacOs::mouseScrollX(int length) void XInputSimulatorImplMacOs::mouseScrollY(int length) { - //throw NotImplementedException(); - int scrollDirection = -1; // 1 down -1 up if(length < 0){