From 02d86f6ce7bf551765285a805c0d21b6215a1427 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Fri, 26 Dec 2025 12:07:37 +0100 Subject: [PATCH] Improve: Add more system hot key to forward --- server/2015Remote/2015Remote.rc | Bin 108860 -> 108860 bytes server/2015Remote/2015RemoteDlg.cpp | 45 +++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 1d583407d2bb36d22c1aefd819eede21958e7e1e..9dbaff883859b2dcb5e81219d042ad147ff6496f 100644 GIT binary patch delta 36 ucmV+<0Nek((gwWJ27t5yltc*oeBXZUa4waXfFl7gm!L)g2)EQk0cd1Bmk+-H delta 36 scmdmUiEYm%wuUW?Q(QR089W*M81$x2Z%}45n7+V`kz@N67siYf0QU|Id;kCd diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index d536d35..19d1db3 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -4218,7 +4218,45 @@ LRESULT CALLBACK CMy2015RemoteDlg::LowLevelKeyboardProc(int nCode, WPARAM wParam do { static CDialogBase* operateWnd = nullptr; KBDLLHOOKSTRUCT* pKey = (KBDLLHOOKSTRUCT*)lParam; - if (g_2015RemoteDlg->m_bHookWIN && (pKey->vkCode == VK_LWIN || pKey->vkCode == VK_RWIN)) { + // 先判断是否需要处理的热键 + bool bNeedCheck = false; + + // Win 键 (开始菜单、Win+D/E/R/L 等) + if (pKey->vkCode == VK_LWIN || pKey->vkCode == VK_RWIN) { + bNeedCheck = true; + } + // Alt+Tab (切换窗口) + else if (pKey->vkCode == VK_TAB && (pKey->flags & LLKHF_ALTDOWN)) { + bNeedCheck = true; + } + // Alt+Esc (循环切换窗口) + else if (pKey->vkCode == VK_ESCAPE && (pKey->flags & LLKHF_ALTDOWN)) { + bNeedCheck = true; + } + // Ctrl+Shift+Esc (任务管理器) + else if (pKey->vkCode == VK_ESCAPE && + (GetAsyncKeyState(VK_CONTROL) & 0x8000) && + (GetAsyncKeyState(VK_SHIFT) & 0x8000)) { + bNeedCheck = true; + } + // Ctrl+Esc (开始菜单) + else if (pKey->vkCode == VK_ESCAPE && (GetAsyncKeyState(VK_CONTROL) & 0x8000)) { + bNeedCheck = true; + } + // F12 (调试器热键) + else if (pKey->vkCode == VK_F12) { + bNeedCheck = true; + } + // Print Screen (截图) + else if (pKey->vkCode == VK_SNAPSHOT) { + bNeedCheck = true; + } + // Win+Tab (任务视图) + else if (pKey->vkCode == VK_TAB && + (GetAsyncKeyState(VK_LWIN) & 0x8000 || GetAsyncKeyState(VK_RWIN) & 0x8000)) { + bNeedCheck = true; + } + if (bNeedCheck && g_2015RemoteDlg->m_bHookWIN) { HWND hFore = ::GetForegroundWindow(); auto screen = (CScreenSpyDlg*)g_2015RemoteDlg->GetRemoteWindow(hFore); if (screen && screen->m_bIsCtrl) { @@ -4572,6 +4610,8 @@ void CMy2015RemoteDlg::OnProxyPort() void CMy2015RemoteDlg::OnHookWin() { m_bHookWIN = !m_bHookWIN; + MessageBoxA(CString("远程控制时,") + (m_bHookWIN ? "" : "不") + CString("转发系统热键到远程桌面。"), + "提示", MB_ICONINFORMATION); THIS_CFG.SetInt("settings", "HookWIN", m_bHookWIN); CMenu* SubMenu = m_MainMenu.GetSubMenu(2); SubMenu->CheckMenuItem(ID_HOOK_WIN, m_bHookWIN ? MF_CHECKED : MF_UNCHECKED); @@ -4581,6 +4621,9 @@ void CMy2015RemoteDlg::OnHookWin() void CMy2015RemoteDlg::OnRunasService() { m_runNormal = !m_runNormal; + MessageBoxA(m_runNormal ? CString("以传统方式启动主控程序,没有守护进程。") : + CString("以“服务+代理”形式启动主控程序,会开机自启及被守护。"), + "提示", MB_ICONINFORMATION); THIS_CFG.SetInt("settings", "RunNormal", m_runNormal); CMenu* SubMenu = m_MainMenu.GetSubMenu(2); SubMenu->CheckMenuItem(ID_RUNAS_SERVICE, !m_runNormal ? MF_CHECKED : MF_UNCHECKED);