now looking up SendEvent() using GetProcAddress() so win95
systems can run the synergy client.
This commit is contained in:
parent
7f21588e9b
commit
ecb2fbb342
|
@ -338,6 +338,10 @@ CMSWindowsSecondaryScreen::hideWindow()
|
||||||
void
|
void
|
||||||
CMSWindowsSecondaryScreen::warpCursor(SInt32 x, SInt32 y)
|
CMSWindowsSecondaryScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
{
|
{
|
||||||
|
typedef UINT (WINAPI *SendInput_t)(UINT, LPINPUT, int);
|
||||||
|
static bool gotSendInput = false;
|
||||||
|
static SendInput_t SendInput = NULL;
|
||||||
|
|
||||||
// move the mouse directly to target position on NT family or if
|
// move the mouse directly to target position on NT family or if
|
||||||
// not using multiple monitors.
|
// not using multiple monitors.
|
||||||
if (m_screen->isMultimon() || !m_is95Family) {
|
if (m_screen->isMultimon() || !m_is95Family) {
|
||||||
|
@ -362,7 +366,9 @@ CMSWindowsSecondaryScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
// clicking the mouse or pressing a key between the absolute and
|
// clicking the mouse or pressing a key between the absolute and
|
||||||
// relative move) we'll use SendInput() which guarantees that the
|
// relative move) we'll use SendInput() which guarantees that the
|
||||||
// events are delivered uninterrupted. we cannot prevent changes
|
// events are delivered uninterrupted. we cannot prevent changes
|
||||||
// to the mouse acceleration at inopportune times, though.
|
// to the mouse acceleration at inopportune times, though. if
|
||||||
|
// SendInput() is unavailable then use mouse_event(); SendInput()
|
||||||
|
// is not available on Windows 95 and NT 4.0 prior to SP3.
|
||||||
//
|
//
|
||||||
// point-to-activate (x-mouse) doesn't seem to be bothered by the
|
// point-to-activate (x-mouse) doesn't seem to be bothered by the
|
||||||
// absolute/relative combination. a window over the absolute
|
// absolute/relative combination. a window over the absolute
|
||||||
|
@ -371,6 +377,17 @@ CMSWindowsSecondaryScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
// app under the final mouse position does *not* get deactivated
|
// app under the final mouse position does *not* get deactivated
|
||||||
// by the absolute move to 0,0.
|
// by the absolute move to 0,0.
|
||||||
else {
|
else {
|
||||||
|
// lookup SendInput() function
|
||||||
|
if (!gotSendInput) {
|
||||||
|
gotSendInput = true;
|
||||||
|
HINSTANCE user32 = LoadLibrary("user32.dll");
|
||||||
|
if (user32 != NULL) {
|
||||||
|
SendInput = reinterpret_cast<SendInput_t>(
|
||||||
|
GetProcAddress(user32, "SendInput"));
|
||||||
|
FreeLibrary(user32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// save mouse speed & acceleration
|
// save mouse speed & acceleration
|
||||||
int oldSpeed[4];
|
int oldSpeed[4];
|
||||||
bool accelChanged =
|
bool accelChanged =
|
||||||
|
@ -401,8 +418,22 @@ CMSWindowsSecondaryScreen::warpCursor(SInt32 x, SInt32 y)
|
||||||
events[1].mi.dwFlags = MOUSEEVENTF_MOVE;
|
events[1].mi.dwFlags = MOUSEEVENTF_MOVE;
|
||||||
events[1].mi.time = events[0].mi.time;
|
events[1].mi.time = events[0].mi.time;
|
||||||
events[1].mi.dwExtraInfo = 0;
|
events[1].mi.dwExtraInfo = 0;
|
||||||
SendInput(sizeof(events) / sizeof(events[0]),
|
if (SendInput != NULL) {
|
||||||
|
SendInput(sizeof(events) / sizeof(events[0]),
|
||||||
events, sizeof(events[0]));
|
events, sizeof(events[0]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mouse_event(events[0].mi.dwFlags,
|
||||||
|
events[0].mi.dx,
|
||||||
|
events[0].mi.dy,
|
||||||
|
events[0].mi.mouseData,
|
||||||
|
events[0].mi.dwExtraInfo);
|
||||||
|
mouse_event(events[1].mi.dwFlags,
|
||||||
|
events[1].mi.dx,
|
||||||
|
events[1].mi.dy,
|
||||||
|
events[1].mi.mouseData,
|
||||||
|
events[1].mi.dwExtraInfo);
|
||||||
|
}
|
||||||
|
|
||||||
// restore mouse speed & acceleration
|
// restore mouse speed & acceleration
|
||||||
if (accelChanged) {
|
if (accelChanged) {
|
||||||
|
|
Loading…
Reference in New Issue