mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 15:03:09 +08:00
Feature: Add FPS control menu for remote desktop
This commit is contained in:
@@ -341,7 +341,7 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
||||
ULONG ulNextSendLength = 0;
|
||||
const char* szBuffer = This->GetNextScreen(ulNextSendLength);
|
||||
if (szBuffer) {
|
||||
s0 = max(s0, 50); // 最快每秒20帧
|
||||
s0 = max(s0, 1000./This->m_nMaxFPS); // 最快每秒20帧
|
||||
s0 = min(s0, 1000);
|
||||
int span = s0-(clock() - last);
|
||||
Sleep(span > 0 ? span : 1);
|
||||
@@ -361,7 +361,7 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
||||
s0 = (s0 >= sleep/4) ? s0/alpha : s0;
|
||||
c2 = 0;
|
||||
#if _DEBUG
|
||||
if (1000./s0<20.0)
|
||||
if (1000./s0<This->m_nMaxFPS)
|
||||
Mprintf("[-]SendScreen Span= %dms, s0= %f, fps= %f\n", span, s0, 1000./s0);
|
||||
#endif
|
||||
}
|
||||
@@ -478,6 +478,11 @@ VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||
m_ClientObject->SetMultiThreadCompress(threadNum);
|
||||
break;
|
||||
}
|
||||
case CMD_FPS: {
|
||||
m_nMaxFPS = min(255, unsigned(szBuffer[1]));
|
||||
m_nMaxFPS = max(m_nMaxFPS, 1);
|
||||
break;
|
||||
}
|
||||
case COMMAND_NEXT: {
|
||||
m_DlgID = ulLength >= 9 ? *((uint64_t*)(szBuffer + 1)) : 0;
|
||||
NotifyDialogIsOpen();
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
virtual BOOL OnReconnect();
|
||||
uint64_t m_DlgID = 0;
|
||||
BOOL m_SendFirst = FALSE;
|
||||
int m_nMaxFPS = 20;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BOOL m_virtual;
|
||||
POINT m_point;
|
||||
|
||||
@@ -197,6 +197,7 @@ enum {
|
||||
COMMAND_SEND_FILE = 68, // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
COMMAND_SWITCH_SCREEN = 69,
|
||||
CMD_MULTITHREAD_COMPRESS = 70,
|
||||
CMD_FPS = 71,
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD>ı<EFBFBD>ʶ
|
||||
TOKEN_AUTH = 100, // Ҫ<><D2AA><EFBFBD><EFBFBD>֤
|
||||
|
||||
@@ -29,6 +29,12 @@ enum {
|
||||
IDM_SAVEAVI_H264,
|
||||
IDM_SWITCHSCREEN,
|
||||
IDM_MULTITHREAD_COMPRESS,
|
||||
IDM_FPS_10,
|
||||
IDM_FPS_15,
|
||||
IDM_FPS_20,
|
||||
IDM_FPS_25,
|
||||
IDM_FPS_30,
|
||||
IDM_FPS_UNLIMITED,
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
|
||||
@@ -246,6 +252,12 @@ BOOL CScreenSpyDlg::OnInitDialog()
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_SET_CLIPBOARD, "设置剪贴板(&L)");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_SWITCHSCREEN, "切换显示器(&1)");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_MULTITHREAD_COMPRESS, "多线程压缩(&2)");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_10, "最大帧率FPS:10");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_15, "最大帧率FPS:15");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_20, "最大帧率FPS:20");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_25, "最大帧率FPS:25");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_30, "最大帧率FPS:30");
|
||||
SysMenu->AppendMenu(MF_STRING, IDM_FPS_UNLIMITED, "最大帧率无限制");
|
||||
SysMenu->AppendMenu(MF_SEPARATOR);
|
||||
|
||||
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen");
|
||||
@@ -657,6 +669,14 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
break;
|
||||
}
|
||||
|
||||
case IDM_FPS_10: case IDM_FPS_15: case IDM_FPS_20:
|
||||
case IDM_FPS_25: case IDM_FPS_30: case IDM_FPS_UNLIMITED: {
|
||||
int fps = 10 + (nID - IDM_FPS_10) * 5;
|
||||
BYTE bToken[2] = { CMD_FPS, nID == IDM_FPS_UNLIMITED ? 255 : fps };
|
||||
m_ContextObject->Send2Client(bToken, sizeof(bToken));
|
||||
break;
|
||||
}
|
||||
|
||||
case IDM_TRACE_CURSOR: { // 跟踪被控端鼠标
|
||||
m_bIsTraceCursor = !m_bIsTraceCursor; //这里在改变数据
|
||||
SysMenu->CheckMenuItem(IDM_TRACE_CURSOR, m_bIsTraceCursor ? MF_CHECKED : MF_UNCHECKED);//在菜单打钩不打钩
|
||||
|
||||
Reference in New Issue
Block a user