diff options
Diffstat (limited to 'win/rfb_win32/SInput.cxx')
-rw-r--r-- | win/rfb_win32/SInput.cxx | 66 |
1 files changed, 12 insertions, 54 deletions
diff --git a/win/rfb_win32/SInput.cxx b/win/rfb_win32/SInput.cxx index 111a4d90..0923118a 100644 --- a/win/rfb_win32/SInput.cxx +++ b/win/rfb_win32/SInput.cxx @@ -30,27 +30,14 @@ #include <rfb_win32/SInput.h> #include <rfb_win32/MonitorInfo.h> #include <rfb_win32/Service.h> -#include <rfb_win32/OSVersion.h> -#include <rfb_win32/DynamicFn.h> #include <rfb_win32/keymap.h> #include <rdr/Exception.h> #include <rfb/LogWriter.h> -#if(defined(INPUT_MOUSE) && defined(RFB_HAVE_MONITORINFO) && defined(MOUSEEVENTF_VIRTUALDESK)) -#define RFB_HAVE_SENDINPUT -#else -#pragma message(" NOTE: Not building SendInput support.") -#endif - using namespace rfb; static LogWriter vlog("SInput"); -#ifdef RFB_HAVE_SENDINPUT -typedef UINT (WINAPI *_SendInput_proto)(UINT, LPINPUT, int); -static win32::DynamicFn<_SendInput_proto> _SendInput(_T("user32.dll"), "SendInput"); -#endif - // // -=- Pointer implementation for Win32 // @@ -125,44 +112,18 @@ win32::SPointer::pointerEvent(const Point& pos, int buttonmask) // The event lies outside the primary monitor. Under Win2K, we can just use // SendInput, which allows us to provide coordinates scaled to the virtual desktop. // SendInput is available on all multi-monitor-aware platforms. -#ifdef RFB_HAVE_SENDINPUT - if (osVersion.isPlatformNT) { - if (!_SendInput.isValid()) - throw rdr::Exception("SendInput not available"); - INPUT evt; - evt.type = INPUT_MOUSE; - Point vPos(pos.x-GetSystemMetrics(SM_XVIRTUALSCREEN), - pos.y-GetSystemMetrics(SM_YVIRTUALSCREEN)); - evt.mi.dx = (vPos.x * 65535) / (GetSystemMetrics(SM_CXVIRTUALSCREEN)-1); - evt.mi.dy = (vPos.y * 65535) / (GetSystemMetrics(SM_CYVIRTUALSCREEN)-1); - evt.mi.dwFlags = flags | MOUSEEVENTF_VIRTUALDESK; - evt.mi.dwExtraInfo = 0; - evt.mi.mouseData = data; - evt.mi.time = 0; - if ((*_SendInput)(1, &evt, sizeof(evt)) != 1) - throw rdr::SystemException("SendInput", GetLastError()); - } else { - // Under Win9x, this is not addressable by either mouse_event or SendInput - // *** STUPID KLUDGY HACK *** - POINT cursorPos; GetCursorPos(&cursorPos); - ULONG oldSpeed, newSpeed = 10; - ULONG mouseInfo[3]; - if (flags & MOUSEEVENTF_MOVE) { - flags &= ~MOUSEEVENTF_ABSOLUTE; - SystemParametersInfo(SPI_GETMOUSE, 0, &mouseInfo, 0); - SystemParametersInfo(SPI_GETMOUSESPEED, 0, &oldSpeed, 0); - vlog.debug("SPI_GETMOUSE %lu, %lu, %lu, speed %lu", mouseInfo[0], mouseInfo[1], mouseInfo[2], oldSpeed); - ULONG idealMouseInfo[] = {10, 0, 0}; - SystemParametersInfo(SPI_SETMOUSESPEED, 0, &newSpeed, 0); - SystemParametersInfo(SPI_SETMOUSE, 0, &idealMouseInfo, 0); - } - ::mouse_event(flags, pos.x-cursorPos.x, pos.y-cursorPos.y, data, 0); - if (flags & MOUSEEVENTF_MOVE) { - SystemParametersInfo(SPI_SETMOUSE, 0, &mouseInfo, 0); - SystemParametersInfo(SPI_SETMOUSESPEED, 0, &oldSpeed, 0); - } - } -#endif + INPUT evt; + evt.type = INPUT_MOUSE; + Point vPos(pos.x-GetSystemMetrics(SM_XVIRTUALSCREEN), + pos.y-GetSystemMetrics(SM_YVIRTUALSCREEN)); + evt.mi.dx = (vPos.x * 65535) / (GetSystemMetrics(SM_CXVIRTUALSCREEN)-1); + evt.mi.dy = (vPos.y * 65535) / (GetSystemMetrics(SM_CYVIRTUALSCREEN)-1); + evt.mi.dwFlags = flags | MOUSEEVENTF_VIRTUALDESK; + evt.mi.dwExtraInfo = 0; + evt.mi.mouseData = data; + evt.mi.time = 0; + if (SendInput(1, &evt, sizeof(evt)) != 1) + throw rdr::SystemException("SendInput", GetLastError()); } } @@ -174,8 +135,6 @@ BoolParameter rfb::win32::SKeyboard::deadKeyAware("DeadKeyAware", "Whether to assume the viewer has already interpreted dead key sequences " "into latin-1 characters", true); -static bool oneShift; - // The keysymToAscii table transforms a couple of awkward keysyms into their // ASCII equivalents. struct keysymToAscii_t { @@ -332,7 +291,6 @@ void doKeyEventWithModifiers(BYTE vkCode, BYTE modifierState, bool down) win32::SKeyboard::SKeyboard() { - oneShift = rfb::win32::osVersion.isPlatformWindows; for (unsigned int i = 0; i < sizeof(keymap) / sizeof(keymap_t); i++) { vkMap[keymap[i].keysym] = keymap[i].vk; extendedMap[keymap[i].keysym] = keymap[i].extended; |