Files
SimpleRemoter/server/2015Remote/stdafx.h
T
yuanyuanxiangandClaude Sonnet 4.6 23c9a4f242 Feature: add client log dialog with auto-refresh, icon and menu bitmap
- CClientLogManager: push thread sends incremental logs every 3s; join() instead of detach() prevents use-after-free on shutdown
- CClientLog::OnReceiveComplete: handles TOKEN_REPORT_LOG on IOCP thread via PostMessage, fixing incremental packets being silently dropped
- Dialog icon (ClientLog.ico) and menu bitmap (ClientLog.bmp) added; OnInitDialog loads icon; IDR_MENU_LIST_ONLINE "运行日志" item gets the bitmap

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 19:02:25 +02:00

150 lines
6.5 KiB
C

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#define USING_ZSTD 1
// 是否使用 Opus 音频压缩 (需要 opus 库)
// 设为 1 启用 Opus 解码,设为 0 仅支持 PCM
#define USING_OPUS 1
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
// 移除对话框中MFC控件的支持,减小静态编译程序的大小
#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS
#ifdef _DEBUG
// 检测内存泄漏,需安装VLD;否则请注释此行
// 如果安装了VLD, 请将安装路径添加到环境变量: 名称为"VLDPATH", 路径为"D:\Program Files (x86)\Visual Leak Detector"
// 请根据实际安装目录填写VLDPATH. 或者手动编辑每个项目文件的头文件目录和库目录. 有关下载VLD库的信息请参考下面链接.
// VS2017以前版本的VLD: https://kinddragon.github.io/vld
// VS2019使用的VLD(支持以往的VS版本, 推荐): https://github.com/oneiric/vld/releases/tag/v2.7.0
// 如果要将受控端程序放到其他机器上面运行, 请使用Release模式生成的程序, 以解除对VLD的依赖; 否则你需要将VLD相关文件一同拷贝.
// 对于VLD提示内容泄露,但是追踪不了函数调用堆栈的情况,请启用使用符号服务器自动下载。这可能引起调试程序的时候变慢。
// 确保你的调试工具(如 Visual Studio 或 WinDbg)配置了符号服务器。
// 符号服务器会自动下载缺失的符号文件,包括 dbghelp.pdb,并将其缓存到本地符号路径。
// 配置符号服务器(以 Visual Studio 为例):在 Visual Studio 中,打开 调试 > 选项 > 符号。
// 勾选 Microsoft Symbol Servers. 指定符号缓存目录,例如 "C:\Symbols"。
// 调试时,缺失的符号(如 dbghelp.pdb)会自动下载到缓存目录。
#include "vld.h"
#ifndef VLD_RPTHOOK_REMOVE
#error 检测内存泄漏,需安装VLD;否则请注释#include "vld.h",或使用Release编译
#endif
#else
#define VLDGlobalDisable()
#define VLDGlobalEnable()
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
#define WM_USERTOONLINELIST WM_USER + 3000
#define WM_OPENSCREENSPYDIALOG WM_USER + 3001
#define WM_OPENFILEMANAGERDIALOG WM_USER + 3002
#define WM_OPENTALKDIALOG WM_USER+3003
#define WM_OPENSHELLDIALOG WM_USER+3004
#define WM_OPENSYSTEMDIALOG WM_USER+3005
#define WM_OPENAUDIODIALOG WM_USER+3006
#define WM_OPENSERVICESDIALOG WM_USER+3007
#define WM_OPENREGISTERDIALOG WM_USER+3008
#define WM_OPENWEBCAMDIALOG WM_USER+3009
#define WM_USEROFFLINEMSG WM_USER+3010
#define WM_HANDLEMESSAGE WM_USER+3011
#define WM_OPENKEYBOARDDIALOG WM_USER+3012
#define WM_UPXTASKRESULT WM_USER+3013
#define WM_OPENPROXYDIALOG WM_USER+3014
#define WM_OPENHIDESCREENDLG WM_USER+3015
#define WM_OPENMACHINEMGRDLG WM_USER+3016
#define WM_OPENCHATDIALOG WM_USER+3017
#define WM_OPENDECRYPTDIALOG WM_USER+3018
#define WM_OPENFILEMGRDIALOG WM_USER+3019
#define WM_OPENDRAWINGBOARD WM_USER+3020
#define WM_PASSWORDCHECK WM_USER+3021
#define WM_SHOWMESSAGE WM_USER+3022
#define WM_SHOWERRORMSG WM_USER+3023
#define WM_SESSION_ACTIVATED WM_USER+3024
#define WM_INJECT_SHELLCODE WM_USER+3025
#define WM_SHARE_CLIENT WM_USER+3026
#define WM_ASSIGN_CLIENT WM_USER+3027
#define WM_ASSIGN_ALLCLIENT WM_USER+3028
#define WM_ANTI_BLACKSCREEN WM_USER+3029
#define WM_UPDATE_ACTIVEWND WM_USER+3030
#define WM_SHOWNOTIFY WM_USER+3031
#define WM_DISCONNECT WM_USER+3032
#define WM_OPENTERMINALDIALOG WM_USER+3033
#define WM_PREVIEW_RESPONSE WM_USER+3034
#define WM_PREVIEW_LOOP_CLOSED WM_USER+3035
#define WM_TRIAL_RTT_ABUSE WM_USER+3036 // 试用版 RTT 反代理:服务端检测到滥用,通知主窗口弹框
#define WM_TRIAL_WAN_IP_ABUSE WM_USER+3037 // 试用版 IP 段检测:OnAccept 发现入站为公网 IP,通知主窗口弹框
#define WM_ACTIVE_LICENSE_NUM WM_USER+3038
#define WM_ONLINE_HOSTNUM WM_USER+3039
#define WM_SPLITTER_MOVED WM_USER+3040
#define WM_SPLITTER_RELEASED WM_USER+3041
#define WM_OPEN_WINDOW_SCREEN WM_USER+3042 // 窗口管理→打开指定窗口远程画面
#define WM_OPENCLIENTLOGDIALOG WM_USER+3043 // 打开客户端日志对话框
#define WM_REPORT_CLIENT_LOG WM_USER+3044 // 追加日志到已打开的对话框
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
#include <assert.h>
#include <MMSystem.h>
#pragma comment(lib, "winmm.lib")
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) if(NULL !=(p)){ delete (p);(p) = NULL;}
#endif
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) if(NULL !=(p)){ delete[] (p);(p) = NULL;}
#endif
#ifndef SAFE_DELETE_AR
#define SAFE_DELETE_AR(p) if(NULL !=(p)){ delete[] (p);(p) = NULL;}
#endif
#include "common/locker.h"
#include "common/logger.h"
#include "common/commands.h"
#define SAFE_CANCELIO(p) if (INVALID_SOCKET != (p)){ CancelIo((HANDLE)(p)); closesocket((SOCKET)(p)); (p) = INVALID_SOCKET; }
#define SAFE_CLOSE_HANDLE(h) do{if((h)!=NULL&&(h)!=INVALID_HANDLE_VALUE){CloseHandle(h);(h)=NULL;}}while(0)