From 4cf9a3b8fe91cc0b43d0cbab51cf02c7b1f8d60d Mon Sep 17 00:00:00 2001 From: qwertfisch Date: Mon, 19 Nov 2012 21:25:24 +0000 Subject: KeyBuddy2: ein neuer Ansatz eines Layouttools, ähnlich zu NeoVars, aber in C++ geschrieben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.neo-layout.org@2431 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- windows/keybuddy2/src/mousecontrol.cpp | 107 +++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 windows/keybuddy2/src/mousecontrol.cpp (limited to 'windows/keybuddy2/src/mousecontrol.cpp') diff --git a/windows/keybuddy2/src/mousecontrol.cpp b/windows/keybuddy2/src/mousecontrol.cpp new file mode 100644 index 0000000..34b4b97 --- /dev/null +++ b/windows/keybuddy2/src/mousecontrol.cpp @@ -0,0 +1,107 @@ +#include "includes.h" + +int mouseController::vx=0; +int mouseController::vy=0; + +byte mouseController::mouseKeys[9]={0}; +bool mouseController::mouseButtonStates[3]={0}; + +wchar mouseController::mouseSymbols[9]={0x15CF,0x15CB,0x15CC,0x15CA,0x15E1,0x15DE,0x15DD,0x15E3,0x15E2}; + +// generate mouse event for the specified button +void mouseController::mouseEvent(DWORD vkCode, bool isReleased){ + + INPUT in; + memset(&in,0,sizeof(INPUT)); + in.type=INPUT_MOUSE; + + if(vkCode==mouseKeys[MOUSE_MOVE_L]){ + if(isReleased){ + vx=0; + return; + } + if(vx>0){vx=0;} + if(vx>-20){vx--;} + in.mi.dx=vx; + in.mi.dwFlags=MOUSEEVENTF_MOVE; + } + else if(vkCode==mouseKeys[MOUSE_MOVE_R]){ + if(isReleased){ + vx=0; + return; + } + if(vx<0){vx=0;} + if(vx<20){vx++;} + in.mi.dx=vx; + in.mi.dwFlags=MOUSEEVENTF_MOVE; + } + else if(vkCode==mouseKeys[MOUSE_MOVE_U]){ + if(isReleased){ + vy=0; + return; + } + if(vy>0){vy=0;} + if(vy>-20){vy--;} + in.mi.dy=vy; + in.mi.dwFlags=MOUSEEVENTF_MOVE; + } + else if(vkCode==mouseKeys[MOUSE_MOVE_D]){ + if(isReleased){ + vy=0; + return; + } + if(vy<0){vy=0;} + if(vy<20){vy++;} + in.mi.dy=vy; + in.mi.dwFlags=MOUSEEVENTF_MOVE; + } + else if(vkCode==mouseKeys[MOUSE_BUTTON_L]){ + if(!isReleased && mouseButtonStates[0]){return;} // dont resend clicks + if(!isReleased){ + in.mi.dwFlags=MOUSEEVENTF_LEFTDOWN; + mouseButtonStates[0]=true; + } + else{ + in.mi.dwFlags=MOUSEEVENTF_LEFTUP; + mouseButtonStates[0]=false; + } + } + else if(vkCode==mouseKeys[MOUSE_BUTTON_R]){ + if(!isReleased && mouseButtonStates[1]){return;} // dont resend clicks + if(!isReleased){ + in.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN; + mouseButtonStates[1]=true; + } + else{ + in.mi.dwFlags=MOUSEEVENTF_RIGHTUP; + mouseButtonStates[1]=false; + } + } + else if(vkCode==mouseKeys[MOUSE_BUTTON_M]){ + if(!isReleased && mouseButtonStates[2]){return;} // dont resend clicks + if(!isReleased){ + in.mi.dwFlags=MOUSEEVENTF_MIDDLEDOWN; + mouseButtonStates[2]=true; + } + else{ + in.mi.dwFlags=MOUSEEVENTF_MIDDLEUP; + mouseButtonStates[2]=false; + } + } + else if(vkCode==mouseKeys[MOUSE_SCROLL_U]){ + if(isReleased){return;} + in.mi.dwFlags=MOUSEEVENTF_WHEEL; + in.mi.mouseData=WHEEL_DELTA; + } + else if(vkCode==mouseKeys[MOUSE_SCROLL_D]){ + if(isReleased){return;} + in.mi.dwFlags=MOUSEEVENTF_WHEEL; + in.mi.mouseData=-WHEEL_DELTA; + } + else{ + return; // do not call sendinput + } + + // send mouse event + SendInput(1,&in,sizeof(INPUT)); +} -- cgit v1.2.3