[
  {
    "path": "CLAUDE.md",
    "content": "# CLAUDE.md\r\n\r\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\r\n\r\n## Project Overview\r\n\r\n**WeChatRobot** is a PC WeChat automation tool consisting of two components:\r\n\r\n1. **WeChatRobot.exe** - MFC-based GUI client application that provides the user interface\r\n2. **WeChatHelper.dll** - DLL injected into WeChat process to hook WeChat functions and perform operations\r\n\r\nThe project uses **WM_COPYDATA** for inter-process communication between the client and the injected DLL.\r\n\r\n⚠️ **Important Notice**: This project is a legacy WeChat hooking tool and has not been maintained for a long time. It is provided for learning purposes only and targets a specific old version of WeChat (2.6.8.52).\r\n\r\n## Build System\r\n\r\n### Requirements\r\n\r\n- **Visual Studio 2017** (VS 141 toolset) with C++ desktop development workload\r\n- Windows SDK version 10.0.17763.0\r\n- MFC (statically linked in Win32, dynamically linked in x64)\r\n- OpenSSL 1.0.2l-win32-msvc100 (for WeChatRobot Debug Win32 build)\r\n\r\n### Build Configurations\r\n\r\nThe solution supports two platforms and two configurations:\r\n\r\n**Platforms:**\r\n- Win32 (x86)\r\n- x64\r\n\r\n**Configurations:**\r\n- Debug\r\n- Release\r\n\r\n### Build Commands\r\n\r\nOpen `WeChatRobot.sln` in Visual Studio 2017 and build using:\r\n\r\n```bash\r\n# Build entire solution\r\nmsbuild WeChatRobot.sln /p:Configuration=Release /p:Platform=x64\r\n\r\n# Build specific project\r\nmsbuild WeChatRobot\\WeChatRobot.vcxproj /p:Configuration=Release /p:Platform=x64\r\nmsbuild WeChatHelper\\WeChatHelper.vcxproj /p:Configuration=Release /p:Platform=x64\r\n\r\n# Clean build\r\nmsbuild WeChatRobot.sln /t:Clean /p:Configuration=Release\r\n```\r\n\r\n**Build Outputs:**\r\n- `WeChatRobot.exe` → Release/\r\n- `WeChatHelper.dll` → Release/\r\n\r\n## Architecture\r\n\r\n### Project Structure\r\n\r\n```\r\nWeChatRobot/\r\n├── WeChatRobot/              # MFC GUI Client Application\r\n│   ├── *.cpp/*.h            # Dialog implementations for each feature\r\n│   ├── data.h               # Client-side data structures\r\n│   ├── message.h            # Message definitions\r\n│   ├── WeChatRobot.vcxproj  # Client project file\r\n│   └── WeChatRobot.rc       # MFC resource file\r\n│\r\n├── WeChatHelper/            # DLL Injected into WeChat\r\n│   ├── *.cpp/*.h            # Hook implementations\r\n│   ├── data.h               # Server-side data structures\r\n│   ├── offset.h             # WeChat function offsets/addresses\r\n│   ├── message.h            # Message structures\r\n│   └── WeChatHelper.vcxproj # DLL project file\r\n│\r\n├── assets/                  # Documentation images\r\n├── Release/                 # Build outputs\r\n└── WeChatRobot.sln          # Visual Studio solution\r\n```\r\n\r\n### Component Communication\r\n\r\n**WeChatRobot (Client):**\r\n- MFC dialog-based application\r\n- Provides GUI for all operations\r\n- Sends commands to WeChatHelper via WM_COPYDATA\r\n- Receives data back from WeChatHelper\r\n- Handles user interactions and displays results\r\n\r\n**WeChatHelper (Server/DLL):**\r\n- Injected into WeChat process via `CInjectTools`\r\n- Hooks WeChat functions using addresses defined in `offset.h`\r\n- Intercepts messages, handles, and operations\r\n- Communicates back to WeChatRobot via WM_COPYDATA\r\n\r\n### Key Data Structures\r\n\r\n**Communication Structures** (defined in both `data.h` files):\r\n- `MessageStruct` - Generic communication messages\r\n- `ChatMessageData` - Chat message data (type, source, sender, content)\r\n- `PersonalInformation` - WeChat user profile information\r\n- `UserInfo` / `UserInfoDetail` - Friend/group member information\r\n- `XmlCardMessage` - WeChat card messages\r\n- `AtMsg` - @ message in groups\r\n- `SendXmlArticleStruct` - XML article messages\r\n\r\n**Message Types** are handled via the message structures in `message.h`.\r\n\r\n### Core Offset Addresses\r\n\r\nThe `WeChatHelper/offset.h` file contains hardcoded offsets for WeChat 2.6.8.52:\r\n\r\n- Function hooks: `WxSendMessage`, `WxReciveMessage`, `WxFriendList`, etc.\r\n- Data offsets: `MsgContentOffset`, `MsgSourceOffset`, `WxidOffset`, etc.\r\n- Self info base: `WxSelfInfoBase` with various member offsets\r\n\r\n⚠️ These offsets are version-specific and will not work with newer WeChat versions.\r\n\r\n## Development Workflow\r\n\r\n### Adding New Features\r\n\r\n1. **In WeChatRobot (Client):**\r\n   - Create new dialog class (e.g., `CNewFeature.cpp/h`)\r\n   - Add to resource file (`WeChatRobot.rc`)\r\n   - Implement UI and command handling\r\n   - Send WM_COPYDATA messages to WeChatHelper\r\n\r\n2. **In WeChatHelper (Server):**\r\n   - Implement hook/operation logic\r\n   - Handle WM_COPYDATA messages\r\n   - Use offsets from `offset.h` for hooking\r\n\r\n### Inter-Process Communication\r\n\r\n**Sending from WeChatRobot:**\r\n```cpp\r\nCOPYDATASTRUCT cds;\r\ncds.dwData = COMMAND_TYPE;\r\ncds.cbData = sizeof(DataStruct);\r\ncds.lpData = &dataStruct;\r\n\r\n// Send to WeChatHelper window\r\n::SendMessage(helperWindowHWND, WM_COPYDATA, (WPARAM)this->m_hWnd, (LPARAM)&cds);\r\n```\r\n\r\n**Receiving in WeChatHelper:**\r\n```cpp\r\nBOOL CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\r\n{\r\n    if (msg == WM_COPYDATA)\r\n    {\r\n        COPYDATASTRUCT* pCopyData = (COPYDATASTRUCT*)lParam;\r\n        // Process command based on pCopyData->dwData\r\n    }\r\n}\r\n```\r\n\r\n### Testing\r\n\r\n1. Start WeChat (version 2.6.8.52)\r\n2. Copy `WeChatRobot.exe` and `WeChatHelper.dll` to same directory\r\n3. Run `WeChatRobot.exe`\r\n4. Click \"注入\" to inject DLL into WeChat process\r\n5. Test features through the GUI\r\n\r\n## Technical Notes\r\n\r\n### Dependency Injection\r\n\r\nThe `CInjectTools` class handles DLL injection into WeChat process. It locates the WeChat window and uses Windows API to inject `WeChatHelper.dll`.\r\n\r\n### Hooking Mechanism\r\n\r\nWeChatHelper uses function hooking to intercept WeChat operations:\r\n- Calculates actual function addresses using base address + offset\r\n- Hooks functions by replacing prologue with jump instructions\r\n- Intercepts messages before they're processed by WeChat\r\n\r\n### Message Handling\r\n\r\nAll chat messages are intercepted and parsed. The system extracts:\r\n- Message type (text, image, file, etc.)\r\n- Sender information\r\n- Message content\r\n- Source (group or individual chat)\r\n\r\n### Known Limitations\r\n\r\n- **Version锁定**: Only works with WeChat 2.6.8.52\r\n- **Architecture依赖**: Uses hardcoded offsets that change between versions\r\n- **稳定性**: 多年未维护，可能存在兼容性问题\r\n- **仅供学习**: 不应用于生产环境或商业用途\r\n\r\n## Security Considerations\r\n\r\n⚠️ **Warning**: This project involves:\r\n- DLL injection into another process\r\n- Function hooking and code interception\r\n- Reverse engineering of proprietary software\r\n\r\nUse only for educational purposes in controlled environments. Do not use for:\r\n- Violating WeChat's terms of service\r\n- Unauthorized automation or spam\r\n- Commercial applications\r\n- Any illegal activities\r\n\r\n## Documentation and Resources\r\n\r\n- **README.md** - Project overview and feature list with screenshots\r\n- **assets/** - Screenshots and documentation images\r\n- **CSDN Blog Posts** (referenced in README):\r\n  - PC微信逆向：HOOK拦截二维码\r\n  - PC微信逆向：发送与接收消息分析\r\n  - PC微信逆向：数据库文件解密\r\n\r\n## Common Tasks\r\n\r\n### Building for Production\r\n\r\nUse Release configuration with static MFC linking for standalone executables:\r\n- Win32 Release: Static MFC linking\r\n- x64 Release: Dynamic MFC linking with Whole Program Optimization\r\n\r\n### Debugging\r\n\r\nUse Debug configuration to troubleshoot issues:\r\n- Debug information enabled\r\n- Runtime checks enabled\r\n- Multi-threaded debug runtime library\r\n\r\n### Adding New Message Types\r\n\r\n1. Define struct in both `WeChatRobot/data.h` and `WeChatHelper/data.h`\r\n2. Add to `MessageUnion` in WeChatHelper's data.h\r\n3. Implement handler in both projects\r\n4. Update WM_COPYDATA command types\r\n\r\n### Modifying Offsets\r\n\r\nWhen WeChat updates, new offsets must be found using:\r\n- Debugger (x64dbg/OllyDbg)\r\n- Disassembler (IDA Pro)\r\n- Memory scanning tools\r\n\r\nProcess:\r\n1. Attach debugger to WeChat\r\n2. Locate target function\r\n3. Find data structure offsets\r\n4. Update `offset.h`\r\n5. Rebuild and test\r\n\r\n## Legal and Ethical Use\r\n\r\n**This project is provided \"as is\" for educational purposes only.**\r\n\r\n- Use only on your own systems\r\n- Do not violate WeChat's terms of service\r\n- Respect user privacy and data protection laws\r\n- Do not use for spam, harassment, or illegal activities\r\n- Authors disclaim all liability for misuse\r\n\r\nThe author explicitly states this project is not maintained and should be used for learning about Windows programming, MFC, and reverse engineering techniques only.\r\n"
  },
  {
    "path": "README.md",
    "content": "# WeChatRobot\r\n\r\n> ⚠️ **本项目已停止维护，仅供学习参考**\r\n\r\n📖 **完整项目文档请查看：[README_DETAILS.md](README_DETAILS.md)**\r\n\r\n---\r\n\r\n## 个人动态\r\n\r\n微信相关的项目已经不在维护\r\n\r\n最近**全职在做海外SaaS产品**，目前已经实现**月入千刀**，正在向**月入万刀**的目标前进！\r\n\r\n**如果你也对此有兴趣，欢迎关注我的社媒**\r\n\r\n**如果你也在做同样的事情，欢迎在推特私信和我交流**\r\n\r\n\r\n## 推特 @guishou_56\r\n\r\n![推特](assets/推特.png)\r\n\r\n### 公众号 Niko的出海记录\r\n\r\n![公众号](assets/公众号.png)\r\n\r\n## 即刻 Niko_\r\n\r\n![即刻](assets/即刻.jpg)\r\n\r\n\r\n\r\n---\r\n\r\n## 鬼手社交小课堂\r\n\r\n技术大哥们，加我之前请务必学习一下我的什么叫有效社交和无效社交\r\n\r\n### 无效社交\r\n\r\n![无效社交](assets/339745f975e9ea32d43a623e2fbaae7f.jpg)\r\n\r\n上来直接躺尸，不懂商业互吹，不懂提供价值=无效社交；”看看有没有合作机会“，中译中，“看看有没有白嫖的机会”\r\n\r\n\r\n从github加过来的，我没见过一个会主动夸人的；加之前想清楚能给我提供什么价值，提供不了请不要加好友，我还得删，挺累的\r\n\r\n我本来不想说的这么直接，但是没办法，搞技术的情商实在太低了，搞的我烦不胜烦，不直接不行！\r\n\r\n## 有效社交\r\n\r\n![有效社交](assets/fsfdsfds.jpg)\r\n\r\n有效社交=上来肯定对方+商业互吹+自我介绍+提供价值\r\n\r\n"
  },
  {
    "path": "README_DETAILS.md",
    "content": "# 项目详细信息\r\n\r\n## 实现功能\r\n\r\n![WeChatHelper](assets/WeChatHelper.png)\r\n\r\n## 项目介绍\r\n\r\n编译环境为VS2017 只支持微信2.6.8.52版本。附上2.6.8.52微信版本的安装包\r\n\r\n链接：https://pan.baidu.com/s/1kZTBDPHNSSbyC1tVP-Lj8g\r\n提取码：d9oj\r\n\r\n![1563679851680](assets/1563679851680.png)\r\n\r\n![1563679859287](assets/1563679859287.png)\r\n\r\n项目分为两个端，WeChatRobot和WeChatHelper。WeChatRobot作为客户端负责和服务端进行通信，将服务端传回的数据显示到界面。WeChatHelper作为服务端，注入到微信进程，进行取数据和HOOK的相关操作，并且将取回的数据发回给客户端。\r\n\r\n客户端和服务端之间采用WM_COPYDATA的方式进行进程通讯，互相传输数据\r\n\r\n## 效果演示\r\n\r\n下面演示部分效果\r\n\r\n### 初始化\r\n\r\n将WeChatRobot.exe和WeChatHelper.dll放在同一个目录下，先打开微信，再打开exe\r\n\r\n![1563680573456](assets/1563680573456.png)\r\n\r\n### 截取二维码\r\n\r\n![1563680585192](assets/1563680585192.png)\r\n\r\n点击显示二维码 微信会自动跳转并截取二维码显示到客户端，再次点击可以刷新二维码\r\n\r\n### 检测微信登陆状态&显示所有联系人\r\n\r\n![显示联系人](assets/显示联系人.gif)\r\n\r\n这里由于WM_COPYDATA通信状态下是阻塞的原因 所以联系人多的话可能会有些卡顿\r\n\r\n### 发送文本 图片 和文件消息\r\n\r\n![发送文本 图片 文件消息](assets/发送文本 图片 文件消息.gif)\r\n\r\n### 添加&删除好友\r\n\r\n![添加和删除好友](assets/添加和删除好友.gif)\r\n\r\n### 接收并显示所有类型消息\r\n\r\n![1563686929418](assets/1563686929418.png)\r\n\r\n### 无限多开\r\n\r\n![1563687391099](assets/1563687391099.png)\r\n\r\n### 解密数据库\r\n\r\n![解密数据库](assets/解密数据库.gif)\r\n\r\n### 自动聊天\r\n\r\n![自动聊天](assets/自动聊天.gif)\r\n\r\n### 自动收款\r\n\r\n![自动收款](assets/自动收款.gif)\r\n\r\n### 自动提取微信表情\r\n\r\n微信的表情加密存放在下面的目录\r\n\r\n``C:\\Users\\GuiShou\\Documents\\WeChat Files\\crt873217126\\FileStorage\\CustomEmotion``\r\n\r\n![1563686532775](assets/1563686532775.png)\r\n\r\n这个功能会将所有的未加密的表情存放到Temp目录下的WeChatExpressions文件夹里\r\n\r\n还有很多效果，就不一一录制演示Gif了\r\n\r\n## 技术细节\r\n\r\nPCXX逆向：使用HOOK拦截二维码：https://blog.csdn.net/qq_38474570/article/details/92798577\r\n\r\nPCXX逆向：发送与接收消息的分析与代码实现：https://blog.csdn.net/qq_38474570/article/details/93339861\r\n\r\nPC微信逆向：两种姿势教你解密数据库文件：https://blog.csdn.net/qq_38474570/article/details/96606530\r\n\r\n## 声明\r\n\r\n**本项目仅供技术研究，请勿用于任何商业用途，请勿用于非法用途，如有任何人凭此做何非法事情，均于作者无关，特此声明。**\r\n"
  },
  {
    "path": "WeChat 3.2.1.154安装包下载.txt",
    "content": "链接：https://pan.baidu.com/s/1Eqmwo3vt-RRh4rVxCM5v8g \r\n提取码：1x09 \r\n--来自百度网盘超级会员V6的分享"
  },
  {
    "path": "WeChatHelper/CAutoFunction.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"CAutoFunction.h\"\r\n#include \"Function.h\"\r\n#include <atlconv.h>\r\n#include <direct.h> //_mkdirͷļ\r\n#include <io.h>     //_accessͷļ\r\n#include <iostream>\r\n#include <cstdio>\r\n#include <ctime>\r\n#include \"ChatRecord.h\"\r\n#include <Shlobj.h>\r\n#include <Shlwapi.h>\r\n#include <atlconv.h>\r\n#include <wininet.h>\r\n#pragma comment(lib,\"Shlwapi.lib\")\r\n#pragma comment(lib,\"Wininet.lib\")\r\n\r\n\r\n//------------------------------------------------------------------------------------------------\r\nBYTE bjmpcode[5] = { 0 };\r\nDWORD dwReternAddress = (DWORD)GetModuleHandle(L\"WeChatWin.dll\") + WxGetExpressionsAddr + 5;\t//صַ\r\nDWORD dwCallAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\") + WxGetExpressionsCallAddr;\r\n\r\n\r\n//************************************************************\r\n// : AgreeUserRequest\r\n// ˵: ͬ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/17\r\n//     : v1 v2\r\n//   ֵ: void\r\n//************************************************************\r\nvoid AgreeUserRequest(wchar_t* v1, wchar_t* v2)\r\n{\r\n\tDWORD base = GetWeChatWinBase();\r\n\tDWORD callAdd1 = base + WxAgreeUserRequestCall1;\r\n\tDWORD callAdd2 = base + WxAgreeUserRequestCall2;\r\n\tDWORD callAdd3 = base + WxAgreeUserRequestCall3;\r\n\tDWORD callAdd4 = base + WxAgreeUserRequestCall4;\r\n\tDWORD params = base + WxAgreeUserRequestParam;\r\n\r\n\tDWORD* asmP = (DWORD*)params;\r\n\r\n\tv1Info userInfoV1 = { 0 };\r\n\tv2Info userInfoV2 = { 0 };\r\n\tuserInfoV1.v2 = (DWORD)&userInfoV2.fill;\r\n\tuserInfoV1.v1 = v1;\r\n\tuserInfoV1.v1Len = wcslen(v1);\r\n\tuserInfoV1.maxV1Len = wcslen(v1) * 2;\r\n\tuserInfoV2.v2 = v2;\r\n\tuserInfoV2.v2Len = wcslen(v2);\r\n\tuserInfoV2.maxV2Len = wcslen(v2) * 2;\r\n\r\n\tchar* asmUser = (char*)&userInfoV1.fill;\r\n\tchar buff[0x14] = { 0 };\r\n\tchar buff2[0x48] = { 0 };\r\n\tchar* asmBuff = buff2;\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov ecx, asmUser;\r\n\t\tpush 0x11;\r\n\t\tsub esp, 0x14;\r\n\t\tpush esp;\r\n\t\tcall callAdd1;\r\n\t\tmov ecx, asmUser;\r\n\t\tlea eax, buff;\r\n\t\tpush eax;\r\n\t\tcall callAdd2;\r\n\t\tmov esi, eax;\r\n\t\tsub esp, 0x8;\r\n\t\tmov ecx, asmP;\r\n\t\tcall callAdd3;\r\n\t\tmov ecx, asmBuff;\r\n\t\tmov edx, ecx;\r\n\t\tpush edx;\r\n\t\tpush eax;\r\n\t\tpush esi;\r\n\t\tcall callAdd4;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : AutoAgreeUserRequest\r\n// ˵: Զͬ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/17\r\n//     : msg Ϣ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid AutoAgreeUserRequest(wstring msg)\r\n{\r\n\tint v1strat = msg.find(L\"v3_\");\r\n\tint v1end = msg.find(L\"@stranger\");\r\n\twstring v1;\r\n\tv1 = msg.substr(v1strat, v1end - v1strat + 9);\r\n\t//ҵv2\r\n\tint v2strat = msg.find(L\"v4_\");\r\n\tint v2end = msg.rfind(L\"@stranger\");\r\n\twstring v2;\r\n\tv2 = msg.substr(v2strat, v2end - v2strat + 9);\r\n\r\n\t//ͬcall\r\n\tAgreeUserRequest((wchar_t*)v1.c_str(), (wchar_t*)v2.c_str());\r\n}\r\n\r\n\r\n//************************************************************\r\n// : CllectMoney\r\n// ˵: տ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/15\r\n//     : transferid תID wxid ΢ID\r\n//   ֵ: void \r\n//************************************************************\r\nvoid CllectMoney(wchar_t* transferid, wchar_t* wxid)\r\n{\r\n\tCllectMoneyStruct cllect;\r\n\tcllect.ptransferid = transferid;\r\n\tcllect.transferidLen = wcslen(transferid) + 1;\r\n\tcllect.transferidMaxLen = (wcslen(transferid) + 1) * 2;\r\n\tcllect.pwxid = wxid;\r\n\tcllect.wxidLen = wcslen(wxid) + 1;\r\n\tcllect.wxidMaxLen = (wcslen(wxid) + 1) * 2;\r\n\r\n\tchar* asmBuff = (char*)&cllect.ptransferid;\r\n\r\n\tDWORD dwWeChatWinAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\tDWORD dwCall1 = dwWeChatWinAddr + WxCllectMoneyCall1;\r\n\tDWORD dwCall2 = dwWeChatWinAddr + WxCllectMoneyCall2;\r\n\r\n\t__asm\r\n\t{\r\n\t\tsub esp, 0x30;\r\n\t\tmov ecx, esp;\r\n\t\tmov eax, asmBuff;\r\n\t\tpush eax;\r\n\t\tcall dwCall1;\r\n\t\tcall dwCall2;\r\n\t\tadd esp, 0x30;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : AutoCllectMoney\r\n// ˵: Զտ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/17\r\n//     : msg Ϣ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid AutoCllectMoney(wstring msg,wchar_t* wxid)\r\n{\r\n\t// ҵ<transferid>ַλ\r\n\tint pos1 = msg.find(L\"<transferid>\");\r\n\t//ҵ]]></transferid>ַλ\r\n\tint pos2 = msg.find(L\"]]></transferid>\");\r\n\t//ȡַ\r\n\twstring noneed = L\"<transferid><![CDATA[\";\r\n\tint noneedLen = noneed.length();\r\n\t//ȡתID\r\n\twstring transferid;\r\n\ttransferid = msg.substr(pos1 + noneedLen, (pos2 - pos1) - noneedLen);\r\n\r\n\t//տcall ʵԶտ\r\n\tCllectMoney((wchar_t*)transferid.c_str(), wxid);\r\n}\r\n\r\n\r\n//************************************************************\r\n// : AddCardUser\r\n// ˵: Ƭ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/18\r\n//     : v1 msg Ϣ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid AddCardUser(wchar_t* v1, wchar_t* msg)\r\n{\r\n\tDWORD dwWeChatWinAddr = GetWeChatWinBase();\r\n\tDWORD dwParam1 = dwWeChatWinAddr + WxAddWxUserParam1;\r\n\tDWORD dwCall1 = dwWeChatWinAddr + WxAddWxUserCall1;\r\n\tDWORD dwCall2 = dwWeChatWinAddr + WxAddWxUserCall2;\r\n\tDWORD dwCall3 = dwWeChatWinAddr + WxAddWxUserCall3;\r\n\tDWORD dwCall4 = dwWeChatWinAddr + WxAddWxUserCall4;\r\n\tDWORD dwCall5 = dwWeChatWinAddr + WxAddWxUserCall5;\r\n\r\n\tGeneralStruct pV1(v1);\r\n\tchar* asmV1 = (char*)&pV1.pstr;\r\n\tchar buff3[0x100] = { 0 };\r\n\tchar* buff = buff3;\r\n\t__asm\r\n\t{\r\n\t\tsub esp, 0x18;\r\n\t\tmov ecx, esp;\r\n\t\tpush  dwParam1;\r\n\t\tcall dwCall1;\r\n\t\tsub esp, 0x18;\r\n\t\tmov eax, buff;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall2;\r\n\t\tpush 0x11;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tpush - 0x1;\r\n\t\tmov edi, msg;\r\n\t\tpush edi;\r\n\t\tcall dwCall3;\r\n\t\tpush 0x2;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tmov ebx, asmV1;\r\n\t\tpush ebx;\r\n\t\tcall dwCall4;\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall5;\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : AutoAddCardUser\r\n// ˵: ԶƬ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/18\r\n//     : msg Ϣ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid AutoAddCardUser(wstring msg)\r\n{\r\n\t//õV1\r\n\tint v1strat = msg.find(L\"v1_\");\r\n\tint v1end = msg.find(L\"@stranger\");\r\n\twstring v1;\r\n\tv1 = msg.substr(v1strat, v1end - v1strat + 9);\r\n\r\n\t//ƬѺ\r\n\tAddCardUser((wchar_t*)v1.c_str(), (wchar_t*)L\"ͨ~ͨ~ \");\r\n}\r\n\r\n\r\n//************************************************************\r\n// : HookExtractExpression\r\n// ˵: HOOKȡCall\r\n//     : GuiShou\r\n// ʱ    : 2019/7/21\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nvoid HookExtractExpression()\r\n{\r\n\tHookAnyAddress(GetWeChatWinBase() + WxGetExpressionsAddr, ExtractExpression);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : ExtractExpression\r\n// ˵: ȡ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/21\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nvoid  __declspec(naked) ExtractExpression()\r\n{\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tpush eax;\r\n\t\tcall OutputExpression;\r\n\t\tpopad;\r\n\t\t//ָǵĴ\r\n\t\tcall dwCallAddr;\r\n\t\t//طصַ\r\n\t\tjmp dwReternAddress;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : OutputExpression\r\n// ˵: \r\n//     : GuiShou\r\n// ʱ    : 2019/7/21\r\n//     : dwExpressionAddr ַ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid __stdcall OutputExpression(DWORD dwExpressionAddr)\r\n{\r\n\t//ȡͼƬ\r\n\tDWORD dwImageLen = *((DWORD*)(dwExpressionAddr + 4));\r\n\t//ȡͼƬ\r\n\tDWORD dwImage = *((DWORD*)(dwExpressionAddr));\r\n\tunsigned char magic_head[4] = { 0 };\r\n\tchar postfix[5] = { 0 };\r\n\tmemcpy(magic_head, (void*)dwImage, 3);\r\n\t//MAGICͷжϺ׺\r\n\tif (magic_head[0] == 137 && magic_head[1] == 80 && magic_head[2] == 78)\r\n\t{\r\n\t\tstrcpy_s(postfix, 5, \".png\");\r\n\t}\r\n\telse if (magic_head[0] == 71 && magic_head[1] == 73 && magic_head[2] == 70)\r\n\t{\r\n\t\tstrcpy_s(postfix, 5, \".gif\");\r\n\t}\r\n\telse if (magic_head[0] == 255 && magic_head[1] == 216 && magic_head[2] == 255)\r\n\t{\r\n\t\tstrcpy_s(postfix, 5, \".jpg\");\r\n\t}\r\n\r\n\t//ȡʱļĿ¼\r\n\tchar temppath[MAX_PATH] = { 0 };\r\n\tGetTempPathA(MAX_PATH, temppath);\r\n\tchar imagedir[25] = { \"WeChatRecordExpressions\" };\r\n\r\n\t//ƴӴ΢űĿ¼\r\n\tchar WeChatExpressionsPath[MAX_PATH] = { 0 };\r\n\tsprintf_s(WeChatExpressionsPath, \"%s%s\\\\\", temppath, imagedir);\r\n\t//Ŀ¼ͼƬ\r\n\tCreateDir(WeChatExpressionsPath);\r\n\r\n\t//ͼƬ\r\n\tCreateFileWithCurrentTime(WeChatExpressionsPath, postfix, dwImage, dwImageLen);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// : CreateFileWithCurrentTime\r\n// ˵: ݵǰʱ䴴ļ\r\n//     : GuiShou\r\n// ʱ    : 2019/9/24\r\n//     : filedir ļĿ¼ filepostfixļ׺ filedata ļʼַ filedatalenļ \r\n//   ֵ: void \r\n//************************************************************\r\nvoid CreateFileWithCurrentTime(char* filedir, char* filepostfix, DWORD filedata, DWORD filedatalen)\r\n{\r\n\t//ȡǰʱΪļ\r\n\ttime_t rawtime;\r\n\tstruct tm *ptminfo = new struct tm;\r\n\ttime(&rawtime);\r\n\tlocaltime_s(ptminfo, &rawtime);\r\n\tchar currenttime[30] = { 0 };\r\n\tsprintf_s(currenttime, \"%02d%02d%02d%02d%02d%02d\", ptminfo->tm_year + 1900,\r\n\t\tptminfo->tm_mon + 1, ptminfo->tm_mday, ptminfo->tm_hour, ptminfo->tm_min, ptminfo->tm_sec);\r\n\r\n\t//ƴ·\r\n\tchar filepath[MAX_PATH] = { 0 };\r\n\tsprintf_s(filepath, \"%s%s%s\", filedir, currenttime, filepostfix);\r\n\t//ļ\r\n\tHANDLE hFile = CreateFileA(filepath, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\r\n\tif (hFile == INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"ļʧ\", \"\", 0);\r\n\t\treturn;\r\n\t}\r\n\t//дļ\r\n\tDWORD dwWrite = 0;\r\n\tWriteFile(hFile, (LPCVOID)filedata, filedatalen, &dwWrite, 0);\r\n\t//رվ\r\n\tCloseHandle(hFile);\r\n}\r\n\r\n\r\n//************************************************************\r\n// : CreateDir\r\n// ˵: Ŀ¼\r\n//     : GuiShou\r\n// ʱ    : 2019/7/21\r\n//     : dir Ŀ¼\r\n//   ֵ: void\r\n//************************************************************\r\nvoid CreateDir(const char *dir)\r\n{\r\n\tint m = 0, n;\r\n\tstring str1, str2;\r\n\r\n\tstr1 = dir;\r\n\tstr2 = str1.substr(0, 2);\r\n\tstr1 = str1.substr(3, str1.size());\r\n\r\n\twhile (m >= 0)\r\n\t{\r\n\t\tm = str1.find('\\\\');\r\n\t\tstr2 += '\\\\' + str1.substr(0, m);\r\n\t\tn = _access(str2.c_str(), 0); //жϸĿ¼Ƿ\r\n\t\tif (n == -1)\r\n\t\t{\r\n\t\t\t_mkdir(str2.c_str());     //Ŀ¼\r\n\t\t}\r\n\t\tstr1 = str1.substr(m + 1, str1.size());\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : GetXmlContent\r\n// ˵: ȡҪXML\r\n//     : GuiShou\r\n// ʱ    : 2019/11/15\r\n//     : fullxmlcontent XML  str1 ҪȡXMLߵַ str2 ҪȡXMLұߵַ\r\n//   ֵ: wstring ҪȡXML\r\n//************************************************************\r\nwstring GetXmlContent(wstring fullxmlcontent, wstring str1, wstring str2)\r\n{\r\n\twstring targetstring;\r\n\t// ҵ<title>ַλ\r\n\tint pos1 = fullxmlcontent.find(str1);\r\n\t//ҵ</title>ַλ\r\n\tint pos2 = fullxmlcontent.find(str2);\r\n\r\n\tif (pos1==wstring::npos|| pos2== wstring::npos)\r\n\t{\r\n\t\treturn L\"NULL\";\r\n\t}\r\n\r\n\t//ȡַ\r\n\twstring noneedString1 = str1;\r\n\tint noneedLen1 = noneedString1.length();\r\n\ttargetstring = fullxmlcontent.substr(pos1 + noneedLen1, pos2 - pos1 - noneedLen1);\r\n\r\n\treturn targetstring;\r\n}\r\n"
  },
  {
    "path": "WeChatHelper/CAutoFunction.h",
    "content": "#pragma once\r\n#include <atlstr.h>\r\n\r\nvoid AgreeUserRequest(wchar_t* v1, wchar_t* v2);\t//ͬ\r\nvoid AutoAgreeUserRequest(wstring msg);\t//Զͬ\r\nvoid CllectMoney(wchar_t* transferid, wchar_t* wxid);\t//տ\r\nvoid AutoCllectMoney(wstring msg, wchar_t* wxid);\t//Զտ\r\nvoid AddCardUser(wchar_t* v1, wchar_t* msg);\t//Ƭ\r\nvoid AutoAddCardUser(wstring msg);\t\t\t//ԶƬ\r\nvoid CreateDir(const char *dir);\t\t//Ŀ¼\r\nvoid ExtractExpression();\t\t\t\t//ȡ\r\nvoid HookExtractExpression();//HOOKȡ\r\nvoid __stdcall OutputExpression(DWORD dwExpressionAddr);\t//\r\nvoid CreateFileWithCurrentTime(char* filedir, char* filepostfix, DWORD filedata, DWORD filedatalen);\t//õǰʱ䴴ļ\r\nwstring GetXmlContent(wstring fullxmlcontent, wstring str1, wstring str2);\t//ȡҪXML\r\n"
  },
  {
    "path": "WeChatHelper/CPublic.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"CPublic.h\"\r\n\r\n\r\n//************************************************************\r\n// : HookAnyAddress\r\n// ˵: Hookַ\r\n//     : GuiShou\r\n// ʱ    : 2019/11/13\r\n//     : dwHookAddr ҪHOOKĵַ dwJmpAddressתĵַ dwBackAddress صĵַ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid HookAnyAddress(DWORD dwHookAddr, LPVOID dwJmpAddress)\r\n{\r\n\t//װת\r\n\tBYTE jmpCode[5] = { 0 };\r\n\tjmpCode[0] = 0xE9;\r\n\r\n\t//ƫ\r\n\t*(DWORD*)& jmpCode[1] = (DWORD)dwJmpAddress - dwHookAddr - 5;\r\n\r\n\t// ǰڻԭ\r\n\tDWORD OldProtext = 0;\r\n\r\n\t// ΪҪдݣΪǲдģҪ޸\r\n\tVirtualProtect((LPVOID)dwHookAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtext);\r\n\r\n\t//дԼĴ\r\n\tmemcpy((void*)dwHookAddr, jmpCode, 5);\r\n\r\n\t// ִ˲֮Ҫлԭ\r\n\tVirtualProtect((LPVOID)dwHookAddr, 5, OldProtext, &OldProtext);\r\n}\r\n\r\n\r\n//************************************************************\r\n// : GetWeChatWinBase\r\n// ˵: ȡWeChatWinַ\r\n//     : GuiShou\r\n// ʱ    : 2019/11/13\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nDWORD GetWeChatWinBase()\r\n{\r\n\treturn (DWORD)GetModuleHandle(TEXT(\"WeChatWin.dll\"));\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : UTF8ToUnicode\r\n// ˵: UTF8תΪUnicode(΢ĬϱΪUTF8)\r\n//     : GuiShou\r\n// ʱ    : 2019/7/7\r\n//     : str Ҫתַ\r\n//   ֵ: wchar_t صַ \r\n//************************************************************\r\nwchar_t * UTF8ToUnicode(const char* str)\r\n{\r\n\tint    textlen = 0;\r\n\twchar_t * result;\r\n\ttextlen = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);\r\n\tresult = (wchar_t *)malloc((textlen + 1) * sizeof(wchar_t));\r\n\tmemset(result, 0, (textlen + 1) * sizeof(wchar_t));\r\n\tMultiByteToWideChar(CP_UTF8, 0, str, -1, (LPWSTR)result, textlen);\r\n\treturn    result;\r\n}\r\n\r\n\r\n\r\n\r\nwstring UTF8ToUnicode2(const char* str)\r\n{\r\n\tint textlen = 0;\r\n\twchar_t* result;\r\n\ttextlen = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);\r\n\tresult = (wchar_t *)malloc((textlen + 1) * sizeof(wchar_t));\r\n\tmemset(result, 0, (textlen + 1) * sizeof(wchar_t));\r\n\tMultiByteToWideChar(CP_UTF8, 0, str, -1, (LPWSTR)result, textlen);\r\n\r\n\twstring tempstr(result);\r\n\tfree(result);\r\n\tresult = NULL;\r\n\treturn tempstr;\r\n}\r\n\r\n\r\nvoid DebugCode(LPVOID pAddress)\r\n{\r\n\tchar buff[40] = { 0 };\r\n\tsprintf_s(buff, \"%p\", pAddress);\r\n\tMessageBoxA(0, buff, \"ַ\", 0);\r\n}"
  },
  {
    "path": "WeChatHelper/CPublic.h",
    "content": "#pragma once\r\n#include <string>\r\nusing namespace std;\r\n\r\n\r\nvoid HookAnyAddress(DWORD dwHookAddr, LPVOID dwJmpAddress);\t\t//HOOKַ\r\n\r\nDWORD GetWeChatWinBase();\t\t//ȡWeChatWinַ\r\n\r\nwchar_t * UTF8ToUnicode(const char* str);\r\n\r\nwstring UTF8ToUnicode2(const char* str);\r\n\r\n\r\nvoid DebugCode(LPVOID pAddress);"
  },
  {
    "path": "WeChatHelper/ChatRecord.cpp",
    "content": "\r\n#include \"stdafx.h\"\r\n#include <string>\r\n#include <Shlwapi.h>\r\n#pragma comment(lib,\"Shlwapi.lib\")\r\n#include \"ChatRecord.h\"\r\n#include \"FriendList.h\"\r\n#include \"CAutoFunction.h\"\r\n#include \"Function.h\"\r\n#include <stdio.h>\r\n#include <WINSOCK2.H>\r\n#pragma comment(lib,\"ws2_32.lib\")\r\nusing namespace std;\r\n\r\n\r\n\r\n#define SERVER_ADDRESS \"127.0.0.1\" //IPַ      \r\n#define PORT           8080         //Ķ˿ں      \r\n#define MSGSIZE        1024         //շĴС  \r\n\r\nBOOL g_AutoChat = FALSE;\t//ǷԶ\r\nBOOL isSendTuLing = FALSE;\t//ǷѾ˻\r\nwchar_t tempwxid[50];\t//΢ID\r\n\r\n\r\n//صַ\r\nDWORD RetkReciveMsgAddr = GetWeChatWinBase() + WxReciveMessage + 5;\r\n\r\n//ǵcallĵַ\r\nDWORD OverReciveMsgCallAddr = GetWeChatWinBase() + WxReciveMessageCall;\r\n\r\n\r\n//************************************************************\r\n// : HookChatRecord\r\n// ˵: HOOK¼\r\n//     : GuiShou\r\n// ʱ    : 2019/7/6\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid HookChatRecord()\r\n{\r\n\tHookAnyAddress(GetWeChatWinBase() + WxReciveMessage, RecieveWxMesage);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : RecieveMesage\r\n// ˵: Ϣ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/6\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\n__declspec(naked) void RecieveWxMesage()\r\n{\r\n\t//ֳ\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tpush eax;\r\n\t\tcall SendWxMessage;\r\n\t\tpopad;\r\n\t\t//ñǵcall\r\n\t\tcall OverReciveMsgCallAddr;\r\n\t\t//תصַ\r\n\t\tjmp RetkReciveMsgAddr;\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : ReceiveMsgProc\r\n// ˵: Ϣ̻߳ص\r\n//     : GuiShou\r\n// ʱ    : 2019/11/8\r\n//     : Context \r\n//   ֵ: void \r\n//************************************************************\r\nvoid DealWithMsg(LPVOID Context)\r\n{\r\n\r\n\r\n\ttry\r\n\t{\r\n\t\tChatMessageData* msg = (ChatMessageData*)Context;\r\n\r\n\r\n\t\tBOOL isFriendMsg = FALSE;\t\t//ǷǺϢ\r\n\t\tBOOL isImageMessage = FALSE;\t//ǷͼƬϢ\r\n\t\tBOOL isRadioMessage = FALSE;\t//ǷƵϢ\r\n\t\tBOOL isVoiceMessage = FALSE;\t//ǷϢ\r\n\t\tBOOL isBusinessCardMessage = FALSE;\t//ǷƬϢ\r\n\t\tBOOL isExpressionMessage = FALSE;\t//ǷƬϢ\r\n\t\tBOOL isLocationMessage = FALSE;\t//ǷλϢ\r\n\t\tBOOL isSystemMessage = FALSE;\t//ǷϵͳϢ\r\n\t\tBOOL isPos_File_Money_XmlLink = FALSE;\t\t\t//Ƿλ ļ ת˺Ϣ\r\n\t\tBOOL isFriendRequestMessage = FALSE;\t//ǷǺϢ\r\n\t\tBOOL isOther = FALSE;\t//ǷϢ\r\n\r\n\r\n\t\tswitch (msg->dwtype)\r\n\t\t{\r\n\t\tcase 0x01:\r\n\t\t\tmemcpy(msg->sztype, L\"\", sizeof(L\"\"));\r\n\t\t\tbreak;\r\n\t\tcase 0x03:\r\n\t\t\tmemcpy(msg->sztype, L\"ͼƬ\", sizeof(L\"ͼƬ\"));\r\n\t\t\tisImageMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x22:\r\n\t\t\tmemcpy(msg->sztype, L\"\", sizeof(L\"\"));\r\n\t\t\tisVoiceMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x25:\r\n\t\t\tmemcpy(msg->sztype, L\"ȷ\", sizeof(L\"ȷ\"));\r\n\t\t\tisFriendRequestMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x28:\r\n\t\t\tmemcpy(msg->sztype, L\"POSSIBLEFRIEND_MSG\", sizeof(L\"POSSIBLEFRIEND_MSG\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x2A:\r\n\t\t\tmemcpy(msg->sztype, L\"Ƭ\", sizeof(L\"Ƭ\"));\r\n\t\t\tisBusinessCardMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x2B:\r\n\t\t\tmemcpy(msg->sztype, L\"Ƶ\", sizeof(L\"Ƶ\"));\r\n\t\t\tisRadioMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x2F:\r\n\t\t\t//ʯͷ\r\n\t\t\tmemcpy(msg->sztype, L\"\", sizeof(L\"\"));\r\n\t\t\tisExpressionMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x30:\r\n\t\t\tmemcpy(msg->sztype, L\"λ\", sizeof(L\"λ\"));\r\n\t\t\tisLocationMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x31:\r\n\t\t\t//ʵʱλ\r\n\t\t\t//ļ\r\n\t\t\t//ת\r\n\t\t\t//\r\n\t\t\t//տ\r\n\t\t\tmemcpy(msg->sztype, L\"ʵʱλáļתˡ\", sizeof(L\"ʵʱλáļתˡ\"));\r\n\t\t\tisPos_File_Money_XmlLink = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x32:\r\n\t\t\tmemcpy(msg->sztype, L\"VOIPMSG\", sizeof(L\"VOIPMSG\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x33:\r\n\t\t\tmemcpy(msg->sztype, L\"΢ųʼ\", sizeof(L\"΢ųʼ\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x34:\r\n\t\t\tmemcpy(msg->sztype, L\"VOIPNOTIFY\", sizeof(L\"VOIPNOTIFY\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x35:\r\n\t\t\tmemcpy(msg->sztype, L\"VOIPINVITE\", sizeof(L\"VOIPINVITE\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x3E:\r\n\t\t\tmemcpy(msg->sztype, L\"СƵ\", sizeof(L\"СƵ\"));\r\n\t\t\tisRadioMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x270F:\r\n\t\t\tmemcpy(msg->sztype, L\"SYSNOTICE\", sizeof(L\"SYSNOTICE\"));\r\n\t\t\tisOther = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x2710:\r\n\t\t\t//ϵͳϢ\r\n\t\t\t//\r\n\t\t\tmemcpy(msg->sztype, L\"ϵͳϢ\", sizeof(L\"ϵͳϢ\"));\r\n\t\t\tisSystemMessage = TRUE;\r\n\t\t\tbreak;\r\n\t\tcase 0x2712:\r\n\t\t\t//Ϣ\r\n\t\t\tmemcpy(msg->sztype, L\"Ϣ\", sizeof(L\"Ϣ\"));\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\r\n\t\twstring fullmessgaedata(msg->content);\t//Ϣ\r\n\t\twchar_t* tempcontent = msg->content;\t//Ϣ\r\n\r\n\t\t//΢IDжǷǺϢ\r\n\t\twstring wxid_wstr = msg->wxid;\r\n\t\tif (wxid_wstr.find(L\"@im.chatroom\") != wxid_wstr.npos)\r\n\t\t{\r\n\t\t\tmemcpy(msg->source, L\"ҵ΢ȺϢ\", sizeof(L\"ҵ΢ȺϢ\"));\r\n\t\t}\r\n\t\telse if (wxid_wstr.find(L\"@chatroom\") != wxid_wstr.npos)\r\n\t\t{\r\n\t\t\tmemcpy(msg->source, L\"ȺϢ\", sizeof(L\"ȺϢ\"));\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tmemcpy(msg->source, L\"Ϣ\", sizeof(L\"Ϣ\"));\r\n\t\t\tisFriendMsg = TRUE;\r\n\t\t\tmemcpy(msg->sendername, L\"NULL\", sizeof(L\"NULL\"));\r\n\r\n\t\t}\r\n\r\n\r\n\r\n\r\n\t\t//΢IDתΪ΢ǳ/Ⱥ \r\n\t\twstring transformwxid(msg->wxid);\r\n\t\tswprintf_s(msg->wxname, L\"%s\", GetNickNameByWxid(transformwxid).c_str());\r\n\r\n\t\t//Ⱥ΢IDתΪǳ\r\n\t\tif (isFriendMsg == FALSE)\r\n\t\t{\r\n\t\t\t//΢IDȡϸϢ\r\n\t\t\tswprintf_s(msg->sendername, L\"%s\", GetNicknameByWxid(msg->sender));\r\n\t\t}\r\n\r\n\r\n\t\t//ʾϢ  ޷ʾϢ ֹ\r\n\t\tif (StrStrW(msg->wxid, L\"gh\"))\r\n\t\t{\r\n\t\t\tisFriendMsg = FALSE;\r\n\r\n\t\t\t//˷Ϣ ϢѾ͸\r\n\t\t\tif ((StrCmpW(msg->wxid, ChatRobotWxID) == 0) && isSendTuLing)\r\n\t\t\t{\r\n\t\t\t\tSendTextMessage(tempwxid, msg->content);\r\n\t\t\t\tisSendTuLing = FALSE;\r\n\t\t\t}\r\n\t\t\t//΢IDΪgh_3dfda90e39d6 ˵տϢ\r\n\t\t\telse if ((StrCmpW(msg->wxid, L\"gh_3dfda90e39d6\") == 0))\r\n\t\t\t{\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"΢տ\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//΢IDдgh ˵ǹں\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"ںŷ,ֻϲ鿴\");\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//ͼƬϢ \r\n\t\telse if (isImageMessage == TRUE)\r\n\t\t{\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յͼƬϢ\");\r\n\t\t}\r\n\t\telse if (isRadioMessage == TRUE)\r\n\t\t{\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յƵϢ,ֻϲ鿴\");\r\n\t\t}\r\n\t\telse if (isVoiceMessage == TRUE)\r\n\t\t{\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յϢ,ֻϲ鿴\");\r\n\t\t}\r\n\t\telse if (isBusinessCardMessage == TRUE)\r\n\t\t{\r\n\t\t\t//ԶƬ\r\n\t\t\t//AutoAddCardUser(fullmessgaedata);\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յƬϢ,ԶӺ\");\r\n\r\n\t\t}\r\n\t\telse if (isExpressionMessage == TRUE)\r\n\t\t{\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յϢ,ֻϲ鿴\");\r\n\t\t}\r\n\t\telse if (isFriendRequestMessage == TRUE)\r\n\t\t{\r\n\t\t\t//Զͨ\r\n\t\t\tAutoAgreeUserRequest(fullmessgaedata);\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յ,Զͨ\");\r\n\r\n\t\t}\r\n\t\t//XMLºԶתϢ\r\n\t\telse if (isPos_File_Money_XmlLink == TRUE)\r\n\t\t{\r\n\t\t\t//жǷתϢ\r\n\t\t\t//жǷתϢ\r\n\t\t\tif (StrStrW(tempcontent, L\"<type>2000</type>\"))\r\n\t\t\t{\r\n\t\t\t\t//Զտ\r\n\t\t\t\tmemcpy(msg->sztype, L\"תϢ\", sizeof(L\"תϢ\"));\r\n\t\t\t\tAutoCllectMoney(fullmessgaedata, msg->wxid);\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յתϢ,Զտ\");\r\n\t\t\t}\r\n\t\t\t//<type>5 </type> XMLºͽȺ\r\n\t\t\telse if (StrStrW(tempcontent, L\"<type>5</type>\"))\r\n\t\t\t{\r\n\t\t\t\t//Ⱥ\r\n\t\t\t\tif (fullmessgaedata.find(L\"<![CDATA[Ⱥ]]></title>\") != wstring::npos&&fullmessgaedata.find(L\"<url><![CDATA[\") != wstring::npos)\r\n\t\t\t\t{\r\n\t\t\t\t\tmemcpy(msg->sztype, L\"Ⱥ\", sizeof(L\"Ⱥ\"));\r\n\t\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յȺ,ֻϲ鿴\");\r\n\t\t\t\t}\r\n\t\t\t\t//ѡ֪ͨ\r\n\t\t\t\telse if (fullmessgaedata.find(L\"ѡ֪ͨ\") != wstring::npos)\r\n\t\t\t\t{\r\n\t\t\t\t\tmemcpy(msg->sztype, L\"ѡ\", sizeof(L\"ѡ\"));\r\n\t\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"ںѡ֪ͨ,ֻϲ鿴\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// ˵XML\r\n\t\t\t\t\tmemcpy(msg->sztype, L\"XMLϢ\", sizeof(L\"XMLϢ\"));\r\n\t\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յXMLϢ,ֻϲ鿴\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//ļϢ\r\n\t\t\telse if (StrStrW(tempcontent, L\"<type>6</type>\"))\r\n\t\t\t{\r\n\t\t\t\tmemcpy(msg->sztype, L\"ļϢ\", sizeof(L\"ļϢ\"));\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յļ 뼰ʱ鿴\");\r\n\t\t\t}\r\n\t\t\t//ʵʱλϢ\r\n\t\t\telse if (StrStrW(tempcontent, L\"<type>17</type>\"))\r\n\t\t\t{\r\n\t\t\t\tmemcpy(msg->sztype, L\"ʵʱλ\", sizeof(L\"ʵʱλ\"));\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յʵʱλ ֻϲ鿴\");\r\n\t\t\t}\r\n\t\t\t//ϲת¼\r\n\t\t\telse if (StrStrW(tempcontent, L\"¼</title>\"))\r\n\t\t\t{\r\n\t\t\t\tmemcpy(msg->sztype, L\"¼Ϣ\", sizeof(L\"¼Ϣ\"));\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յϲת¼ ֻϲ鿴\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\telse if (isLocationMessage == TRUE)\r\n\t\t{\r\n\t\t\tswprintf_s(msg->content, L\"%s\", L\"յλϢ,ֻϲ鿴\");\r\n\t\t}\r\n\t\telse if (isSystemMessage == TRUE)\r\n\t\t{\r\n\t\t\t//ﴦȺϢ\r\n\t\t\tif ((StrStrW(tempcontent, L\"ƳȺ\") || StrStrW(tempcontent, L\"Ⱥ\")))\r\n\t\t\t{\r\n\t\t\t\twcscpy_s(msg->content, wcslen(tempcontent) + 1, tempcontent);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"յϵͳϢ,ֻϲ鿴\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t//Ϣ֮\r\n\t\telse\r\n\t\t{\r\n\t\t\t//жϢ ȳͲʾ\r\n\t\t\tif (wcslen(tempcontent) > 200)\r\n\t\t\t{\r\n\t\t\t\tswprintf_s(msg->content, L\"%s\", L\"Ϣݹ Ѿ\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//ﴦԶ\r\n\t\tif (isFriendMsg == TRUE && g_AutoChat == TRUE && isSendTuLing == FALSE)\r\n\t\t{\r\n\r\n\t\t\t//һ΢ID\r\n\t\t\twcscpy_s(tempwxid, wcslen(msg->wxid) + 1, msg->wxid);\r\n\t\t\t//õϢ \r\n\t\t\tSendTextMessage((wchar_t*)ChatRobotWxID, msg->content);\r\n\t\t\tisSendTuLing = TRUE;\r\n\t\t}\r\n\r\n\r\n\t\t//͵ƶ\r\n\t\tHWND hWnd = FindWindow(NULL, TEXT(\"΢\"));\r\n\t\tif (hWnd == NULL)\r\n\t\t{\r\n\t\t\tOutputDebugStringA(\"δҵ΢ִ\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tCOPYDATASTRUCT chatmsg;\r\n\t\tchatmsg.dwData = WM_ShowChatRecord;//һֵ, ־\r\n\t\tchatmsg.cbData = sizeof(ChatMessageData);// strlen(szSendBuf);//͵ݵĳ\r\n\t\tchatmsg.lpData = msg;// szSendBuf;//͵ݵʼַ(ΪNULL)\r\n\t\tSendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&chatmsg);\r\n\r\n\t\tdelete msg;\r\n\t}\r\n\tcatch (...)\r\n\t{\r\n\t\tOutputDebugStringA(\"¼쳣\");\r\n\t}\r\n\r\n\t\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : SendMessage\r\n// ˵: յϢ͸ͻ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/6\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid __stdcall SendWxMessage(DWORD r_eax)\r\n{\r\n\tif (IsBadReadPtr((void*)r_eax, 4) || IsBadReadPtr((void*)(r_eax + MsgTypeOffset), 4) || IsBadReadPtr((void*)(r_eax + MsgContentOffset), 4) || IsBadReadPtr((void*)(r_eax + WxidOffset), 4) || IsBadReadPtr((void*)(r_eax + GroupMsgSenderOffset), 4))\r\n\t{\r\n\t\treturn;\r\n\t}\r\n\ttry\r\n\t{\r\n\t\tChatMessageData* msg = new ChatMessageData;\r\n\t\t//ȡϢ\r\n\t\tmsg->dwtype = *((DWORD*)(r_eax + MsgTypeOffset));\r\n\t\r\n\t\t//ȡϢ\r\n\t\tLPVOID pContent = *((LPVOID *)(r_eax + MsgContentOffset));\r\n\t\tswprintf_s(msg->content, L\"%s\", (wchar_t*)pContent);\r\n\t\r\n\t\r\n\t\t//ȡ΢ID/ȺID\r\n\t\tLPVOID pWxid = *((LPVOID *)(r_eax + WxidOffset));\r\n\t\tswprintf_s(msg->wxid, L\"%s\", (wchar_t*)pWxid);\r\n\t\r\n\t\tif (StrStrW(msg->wxid, L\"gh_\"))\r\n\t\t{\r\n\t\t\treturn;\r\n\t\t}\r\n\t\r\n\t\r\n\t\r\n\t\t//ȡϢ\r\n\t\tLPVOID pSender = *((LPVOID *)(r_eax + GroupMsgSenderOffset));\r\n\t\tswprintf_s(msg->sender, L\"%s\", (wchar_t*)pSender);\r\n\t\t\r\n\r\n\t\t//ȡϢ\r\n\t\tLPVOID pSource = *((LPVOID *)(r_eax + MsgSourceOffset));\r\n\t\tswprintf_s(msg->source, L\"%s\", (wchar_t*)pSource);\r\n\t\r\n\t\t//̴߳Ϣ\r\n\t\tHANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)DealWithMsg, msg, 0, NULL);\r\n\t\tCloseHandle(hThread);\r\n\t}\r\n\tcatch (...)\r\n\t{\r\n\t\tOutputDebugStringA(\"Ϣ쳣....\");\r\n\t}\r\n\t\r\n\r\n}\r\n\r\n\r\n//************************************************************\r\n// : GetMsgByAddress\r\n// ˵: ӵַлȡϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/6\r\n//     : DWORD memAddress  Ŀַ\r\n//   ֵ: LPCWSTR\tϢ\r\n//************************************************************\r\nstd::wstring GetMsgByAddress(DWORD memAddress)\r\n{\r\n\twstring tmp;\r\n\tDWORD msgLength = *(DWORD*)(memAddress + 4);\r\n\tif (msgLength > 0) {\r\n\t\tWCHAR* msg = new WCHAR[msgLength + 1]{ 0 };\r\n\t\twmemcpy_s(msg, msgLength + 1, (WCHAR*)(*(DWORD*)memAddress), msgLength + 1);\r\n\t\ttmp = msg;\r\n\t\tdelete[]msg;\r\n\t}\r\n\treturn  tmp;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "WeChatHelper/ChatRecord.h",
    "content": "#pragma once\r\n#include <string>\r\n\r\nvoid HookChatRecord();\t\t//HOOK¼\r\nvoid RecieveWxMesage();\t\t//΢Ϣ\r\nvoid __stdcall SendWxMessage(DWORD r_eax);\t\t//΢Ϣͻ\r\nstd::wstring GetMsgByAddress(DWORD memAddress);\t//ӵַлȡϢ\r\n"
  },
  {
    "path": "WeChatHelper/ChatRoomOperate.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"ChatRoomOperate.h\"\r\n#include <atlconv.h>\r\n\r\n//************************************************************\r\n// : SetWxRoomAnnouncement\r\n// ˵: Ⱥ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : chartoomwxid ȺID Announcement Ⱥ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SetWxRoomAnnouncement(wchar_t* chatroomwxid, wchar_t* Announcement)\r\n{\r\n\t//ȡWeChatWinĻַ\r\n\tDWORD callAdrress = GetWeChatWinBase()+ WxSetRoomAnnouncement;\r\n\t//װ\r\n\tCHAR bufferA[0xD0] = { 0 };\r\n\tDWORD* bufA = (DWORD*)& bufferA;\r\n\r\n\tCHAR buffer[0xD0] = { 0 };\r\n\tDWORD* buf = (DWORD*)& buffer;\r\n\r\n\tbuf[0] = (DWORD)chatroomwxid;\r\n\tbuf[1] = wcslen(chatroomwxid);\r\n\tbuf[2] = wcslen(chatroomwxid) * 2;\r\n\tbuf[3] = 0;\r\n\tbuf[4] = 0;\r\n\r\n\tbuf[0 + 5] = (DWORD)Announcement;\r\n\tbuf[1 + 5] = wcslen(Announcement);\r\n\tbuf[2 + 5] = wcslen(Announcement) * 2;\r\n\tbuf[3 + 5] = 0;\r\n\tbuf[4 + 5] = 0;\r\n\r\n\tbufA[0] = (DWORD)& buffer;\r\n\tbufA[1] = bufA[0] + 0x60;\r\n\tbufA[2] = bufA[0] + 0x60;\r\n\r\n\tDWORD r_esp = 0;\r\n\t__asm\r\n\t{\r\n\t\t//ջĴ\r\n\t\tmov r_esp, esp;\r\n\t\tlea eax, bufferA;\r\n\t\tpush eax;\r\n\t\tcall callAdrress;\r\n\r\n\t\t//ָջĴ\r\n\t\tmov eax, r_esp;\r\n\t\tmov esp, eax;\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : QuitChatRoom\r\n// ˵: ˳Ⱥ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/9\r\n//     : chartoomwxid ȺID \r\n//   ֵ: void \r\n//************************************************************\r\nvoid QuitChatRoom(wchar_t* chatroomwxid)\r\n{\r\n\tDWORD dwBaseAddress = GetWeChatWinBase();\r\n\tDWORD dwCallAddr = dwBaseAddress + WxQuitChatRoom;\r\n\r\n\t//\r\n\tGeneralStruct structWxid(chatroomwxid);\r\n\tDWORD* asmMsg = (DWORD*)&structWxid.pstr;\r\n\r\n\t__asm \r\n\t{\r\n\t\tmov ebx, asmMsg;\r\n\t\tpush ebx;\r\n\t\tcall dwCallAddr;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : AddGroupMember\r\n// ˵: ȺԱ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/9\r\n//     : chartoomwxid ȺID  wxid ΢ID\r\n//   ֵ: void \r\n//************************************************************\r\nvoid AddGroupMember(wchar_t* chatroomwxid, wchar_t* wxid)\r\n{\r\n\tDWORD dwBase = GetWeChatWinBase();\r\n\tDWORD dwCallAddr1 = dwBase + WxAddGroupMemberCall1;\r\n\tDWORD dwCallAddr2 = dwBase + WxAddGroupMemberCall2;\r\n\tDWORD dwCallAddr3 = dwBase + WxAddGroupMemberCall3;\r\n\tDWORD dwCallAddr4 = dwBase + WxAddGroupMemberCall4;\r\n\r\n\tDWORD dwParam = dwBase + WxAddGroupMemberParam1;\r\n\tDWORD dwParam2 = dwBase + WxAddGroupMemberParam2;\r\n\r\n\t//Ҫ\r\n\tGeneralStruct wxidStruct(wxid);\r\n\tRoomIdStruct chatroomStruct = { 0 };\r\n\tchatroomStruct.str = chatroomwxid;\r\n\tchatroomStruct.strLen = wcslen(chatroomwxid)*2;\r\n\tchatroomStruct.maxLen = wcslen(chatroomwxid) * 4;\r\n\r\n\tchar wxidBuff[0xC] = { 0 };\r\n\tchar tempWxid[0x14] = { 0 };\r\n\tchar tempBuff[0x14] = { 0 };\r\n\r\n\tchar* pWxid = (char*)&wxidStruct.pstr;\r\n\tchar* pChatRoom = (char*)&chatroomStruct.fill2;\r\n\r\n\t__asm {\r\n\t\tpushad;\r\n\t\tlea esi, wxidBuff;\r\n\t\tmov ecx, esi;\r\n\t\tmov eax, pWxid;\r\n\t\tpush eax;\r\n\t\tcall dwCallAddr1;\r\n\r\n\t\tpush 0;\r\n\t\tpush dwParam;\r\n\t\tlea ecx, tempWxid;\r\n\t\tcall dwCallAddr2;\r\n\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, pChatRoom;\r\n\t\tmov eax, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCallAddr3;\r\n\r\n\t\tpush esi;\r\n\t\tmov ecx, dwParam2;\r\n\t\tcall dwCallAddr4;\r\n\t\tpopad;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : ShowChatRoomUser\r\n// ˵: ʾȺԱ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid ShowChatRoomUser(wchar_t* chatroomwxid)\r\n{\r\n\t//׼\r\n\tDWORD dwWxidArr = 0;\t//΢IDݵĵַ\r\n\tchar buff[0x164] = { 0 };\r\n\tchar userListBuff[0x174] = { 0 };\r\n\t//\r\n\tGeneralStruct pWxid(chatroomwxid);\r\n\tchar* asmWxid = (char *)&pWxid.pstr;\r\n\r\n\t//call\r\n\tDWORD dwCall1 = GetWeChatWinBase() + WxGetRoomUserWxidCall1;\r\n\tDWORD dwCall2 = GetWeChatWinBase()  + WxGetRoomUserWxidCall2;\r\n\tDWORD dwCall3 = GetWeChatWinBase()  + WxGetRoomUserWxidCall3;\r\n\tDWORD dwCall4 = GetWeChatWinBase()  + WxGetRoomUserWxidCall4;\r\n\r\n\t//ȡȺԱ\r\n\t__asm\r\n\t{\r\n\t\tlea ecx, buff[16];\r\n\t\tcall dwCall1;\r\n\t\tlea eax, buff[16];\r\n\t\tpush eax;\r\n\t\tmov ebx, asmWxid;\r\n\t\tpush ebx;\r\n\t\tcall dwCall2;\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall3;\r\n\t\tlea eax, buff;\r\n\t\tpush eax;\r\n\t\tlea ecx, buff[16];\r\n\t\tcall dwCall4;\r\n\t\tmov dwWxidArr, eax;\r\n\t}\r\n\r\n\t//õ΢ID\r\n\twchar_t test[0x100] = { 0 };\r\n\twchar_t tempWxid[0x100] = { 0 };\r\n\tchar tempWxidA[0x100] = { 0 };\r\n\tDWORD userList = *((DWORD *)dwWxidArr);\t\t//userList΢IDб 3.1ASCIIʽ΢ID\r\n\tDWORD testTmp = dwWxidArr + 0xB4;\r\n\tint Len = *((int *)testTmp);\t\t\t\t//ȡ΢IDĸ\r\n\r\n\r\n\r\n\tfor (int i = 0; i < Len; i++)\r\n\t{\r\n\t\tDWORD temWxidAdd = userList + (i * 0x18);\t\t//0x18ÿ΢IDļ\r\n\t\tint flags = (int)(*((LPVOID*)(temWxidAdd + 0x14)));\r\n\t\tif (flags == 0xF)\r\n\t\t{\r\n\t\t\tsprintf_s(tempWxidA, \"%s\", (char*)temWxidAdd);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tsprintf_s(tempWxidA, \"%s\", (char*)*((LPVOID *)temWxidAdd));\r\n\t\t}\r\n\r\n\t\tUSES_CONVERSION;\r\n\t\t//2.ͨ΢IDȡȺԱϢ\r\n\t\tGetUserInfoByWxid(A2W(tempWxidA));\r\n\t}\r\n\r\n\r\n\t//֮Ϣ\r\n\tHWND hWnd = FindWindow(NULL, TEXT(\"ChatRoomMember\"));\r\n\tif (hWnd == NULL)\r\n\t{\r\n\t\tOutputDebugStringA(\"δҵChatRoomMember\");\r\n\t\treturn;\r\n\t}\r\n\r\n\tCOPYDATASTRUCT userinfodata;\r\n\tuserinfodata.dwData = WM_ShowChatRoomMembersDone;//һֵ, ־\r\n\tuserinfodata.cbData = 0;// strlen(szSendBuf);//͵ݵĳ\r\n\tuserinfodata.lpData = NULL;// szSendBuf;//͵ݵʼַ(ΪNULL)\r\n\tSendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&userinfodata);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : GetUserInfoByWxid\r\n// ˵: ͨ΢IDȡûϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : userwxid ΢ID\r\n//   ֵ: void \r\n//************************************************************\r\nvoid GetUserInfoByWxid(wchar_t* userwxid)\r\n{\r\n\tDWORD WechatBase = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\r\n\tDWORD dwCall1 = WechatBase + WxGetUserInfoWithNoNetworkCall1;\r\n\tDWORD dwCall2 = WechatBase + WxGetUserInfoWithNoNetworkCall2;\r\n\tDWORD dwCall3 = WechatBase + WxGetUserInfoWithNoNetworkCall3;\r\n\r\n\tchar buff[0x508] = { 0 };\t\t\r\n\tchar * asmHeadBuff = buff;\r\n\tchar * asmBuff = &buff[0x18];\r\n\r\n\tGeneralStruct pWxid(userwxid);\r\n\tchar* asmWxid = (char*)&pWxid.pstr;\r\n\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tmov edi, asmWxid;\t\t//΢IDṹ\t\r\n\t\tmov eax, asmBuff;\t\t//\r\n\t\tpush eax;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tpush - 0x1;\r\n\t\tmov dword ptr ds : [ecx], 0x0;\r\n\t\tmov dword ptr ds : [ecx + 0x4], 0x0;\r\n\t\tmov dword ptr ds : [ecx + 0x8], 0x0;\r\n\t\tmov dword ptr ds : [ecx + 0xC], 0x0;\r\n\t\tmov dword ptr ds : [ecx + 0x10], 0x0;\r\n\t\tpush dword ptr ds : [edi];\t//΢ID\r\n\t\tcall dwCall1;\t\t\t\t//call1\r\n\t\tcall dwCall2;\t\t\t\t//call2\r\n\t\tmov eax, asmHeadBuff;\r\n\t\tpush eax;\r\n\t\tmov ecx, asmBuff;\r\n\t\tcall dwCall3;\r\n\t\tpopad\r\n\t}\r\n\r\n\r\n\r\n\tLPVOID lpWxid = *((LPVOID *)((DWORD)buff + 0x20));\t\t\t\t//΢ID\r\n\tLPVOID lpWxcount = *((LPVOID *)((DWORD)buff + 0x34));\t\t\t//΢˺\r\n\tLPVOID lpNickName = *((LPVOID *)((DWORD)buff + 0x7C));\t\t\t//ǳ\r\n\r\n\r\n\r\n\r\n\t//װṹ\r\n\tUserInfo *userinfo = new UserInfo;\r\n\tswprintf_s(userinfo->UserId, L\"%s\", (wchar_t*)lpWxid);\r\n\tswprintf_s(userinfo->UserNickName, L\"%s\", (wchar_t*)lpNickName);\r\n\tswprintf_s(userinfo->UserNumber, L\"%s\", (wchar_t*)lpWxcount);\r\n\r\n\r\n\r\n\t//͵ͻ\r\n\tHWND hWnd = FindWindow(NULL, TEXT(\"ChatRoomMember\"));\r\n\tif (hWnd == NULL)\r\n\t{\r\n\t\tOutputDebugStringA(\"δҵChatRoomMember\");\r\n\t\treturn;\r\n\t}\r\n\r\n\r\n\tCOPYDATASTRUCT userinfodata;\r\n\tuserinfodata.dwData = WM_ShowChatRoomMembers;//һֵ, ־\r\n\tuserinfodata.cbData = sizeof(UserInfo);// strlen(szSendBuf);//͵ݵĳ\r\n\tuserinfodata.lpData = userinfo;// szSendBuf;//͵ݵʼַ(ΪNULL)\r\n\tSendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&userinfodata);\r\n\r\n\tdelete userinfo;\r\n\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : SetRoomName\r\n// ˵: ޸Ⱥ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/14\r\n//     : roomwxid ȺID roomnameȺ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SetRoomName(wchar_t* roomwxid, wchar_t* roomname)\r\n{\r\n\tGeneralStruct pRoomwxid(roomwxid);\r\n\tGeneralStruct pRoomname(roomname);\r\n\tchar* asmWxid = (char*)&pRoomwxid.pstr;\r\n\tchar* asmRoomname = (char*)&pRoomname.pstr;\r\n\r\n\tDWORD dwWeChatWinAddr = GetWeChatWinBase();\r\n\tDWORD dwCall1 = dwWeChatWinAddr + WxSetRoomName;\r\n\r\n\t__asm\r\n\t{\r\n\t\tmov edx, asmRoomname;\r\n\t\tmov ecx, asmWxid;\r\n\t\tcall dwCall1;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : SendRoomAtMsg\r\n// ˵: ͰϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/26\r\n//     : chatroomid ȺID memberwxid ȺԱ΢ID membernicknameȺԱǳ msg Ϣ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SendRoomAtMsg(wchar_t* chatroomid, wchar_t* memberwxid, wchar_t* membernickname, wchar_t* msg)\r\n{\r\n\t//callװݸʽ\r\n\tDWORD dwDllBase = GetWeChatWinBase();\r\n\tDWORD dwPackageMsgDataCall = dwDllBase + WxPackageMsgData;\r\n\tDWORD dwSendTextCall = dwDllBase + WxSendMessage;\r\n\r\n\t//װı\r\n\twchar_t tempmsg[500] = { 0 };\r\n\tswprintf_s(tempmsg, L\"@%s %s\", membernickname, msg);\r\n\r\n\t//װ΢IDݽṹ\r\n\tGeneralStruct wxid(memberwxid);\r\n\t//װȺIDݽṹ\r\n\tGeneralStruct roomid(chatroomid);\r\n\t//װϢıݽṹ\r\n\tGeneralStruct textcontent(tempmsg);\r\n\t//0x81C\r\n\tBYTE buff[0x81C] = { 0 };\r\n\r\n\t//΢IDݽṹָ\r\n\twchar_t* pWxid = (wchar_t*)&wxid.pstr;\r\n\t//ȺIDݽṹָ\r\n\twchar_t* pRoomId = (wchar_t*)&roomid.pstr;\r\n\t//Ϣıݽṹָ\r\n\twchar_t* pTextContent = (wchar_t*)&textcontent.pstr;\r\n\r\n\t//װݽṹ建\r\n\tchar databuff[16] = { 0 };\r\n\t//װݸʽcall\r\n\t__asm\r\n\t{\r\n\t\tmov eax, pWxid;\t\t\t//΢IDṹ\r\n\t\tpush eax;\r\n\t\tlea ecx, databuff;\r\n\t\tcall dwPackageMsgDataCall;\r\n\t}\r\n\r\n\r\n\t//callͰϢ\r\n\t__asm\r\n\t{\r\n\t\tmov edx, pRoomId;\t\t//ȺIDṹ\r\n\t\tlea eax, databuff;\t\t//װݽṹ\r\n\t\tpush 0x1;\r\n\t\tpush eax;\r\n\t\tmov ebx, pTextContent;\t//Ϣıָ\r\n\t\tpush ebx;\r\n\t\tlea ecx, buff;\t\t\t//0x81C\r\n\t\tcall dwSendTextCall;\t//Ϣcall\r\n\t\tadd esp, 0xC;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : DelRoomMember\r\n// ˵: ɾȺԱ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/26\r\n//     : roomid ȺID memberwxid ȺԱ΢ID \r\n//   ֵ: void \r\n//************************************************************\r\nvoid DelRoomMember(wchar_t* roomid, wchar_t* memberwxid)\r\n{\r\n\t//õcallݵַ\r\n\tDWORD dwCall1 = GetWeChatWinBase() + WxDelRoomMemberCall1;\r\n\tDWORD dwCall2 = GetWeChatWinBase() + WxDelRoomMemberCall2;\r\n\tDWORD dwCall3 = GetWeChatWinBase() + WxDelRoomMemberCall3;\r\n\r\n\t//װȺIDṹ\r\n\tGeneralStruct roomiddata(roomid);\r\n\r\n\t//װ΢IDṹ\r\n\twchar_t wxidbuff[0xD0] = { 0 };\r\n\tDWORD* dwBuff = (DWORD*)&wxidbuff;\r\n\tdwBuff[0] = (DWORD)memberwxid;\r\n\tdwBuff[1] = wcslen(memberwxid);\r\n\tdwBuff[2] = wcslen(memberwxid) * 2;\r\n\tdwBuff[3] = 0;\r\n\tdwBuff[4] = 0;\r\n\r\n\r\n\twchar_t datatbuffer[0xD0] = { 0 };\r\n\tDWORD* dwDatabuf = (DWORD*)&datatbuffer;\r\n\tdwDatabuf[0] = (DWORD)& wxidbuff;\r\n\tdwDatabuf[1] = dwDatabuf[0] + 0x14;\r\n\tdwDatabuf[2] = dwDatabuf[0] + 0x14;\r\n\r\n\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tlea ebx, roomiddata.pstr;\r\n\t\tpush ebx;\r\n\t\tcall dwCall1;\r\n\t\tlea edi, datatbuffer;\r\n\t\tpush edi;\r\n\t\tcall dwCall2;\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall3;\r\n\t\tpopad;\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatHelper/ChatRoomOperate.h",
    "content": "#pragma once\r\n\r\nvoid SetWxRoomAnnouncement(wchar_t* chatroomwxid,wchar_t* Announcement);\t//Ⱥ\r\nvoid QuitChatRoom(wchar_t* chatroomwxid);\t\t\t\t\t//˳Ⱥ\r\nvoid AddGroupMember(wchar_t* chatroomwxid, wchar_t* wxid);\t//ȺԱ\r\nvoid ShowChatRoomUser(wchar_t* chatroomwxid);\t\t\t\t//ʾȺԱ\r\nvoid GetUserInfoByWxid(wchar_t* userwxid);\t\t\t\t\t//ͨ΢IDȡûϢ\r\nvoid SetRoomName(wchar_t* roomwxid, wchar_t* roomname);\t\t//޸Ⱥ\r\nvoid DelRoomMember(wchar_t* roomid, wchar_t* memberwxid);\t//ɾȺԱ\r\nvoid SendRoomAtMsg(wchar_t* chatroomid, wchar_t* memberwxid, wchar_t* membernickname, wchar_t* msg); //ͰϢ"
  },
  {
    "path": "WeChatHelper/FriendList.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"FriendList.h\"\r\n#include \"shellapi.h\"\r\n#include <sstream>\r\n#include <iomanip>\r\n#include <strstream>\r\n#include <map>\r\n#include <iostream>\r\n#include <fstream>\r\n#include \"ChatRecord.h\"\r\n#pragma comment(lib, \"Version.lib\")\r\n\r\n\r\n//кбmap\r\nmap<wstring, wstring> g_userinfolist;\r\n\r\nDWORD overWritedCallAdd= GetWeChatWinBase() + WxFriendListCall;\r\n\r\nDWORD jumBackAddress= GetWeChatWinBase() + WxFriendList+5;\r\n\r\n//Ƽб\r\nwstring g_referencenumber[11] =\r\n{\r\n\tL\"fmessage\",L\"qqmail\",L\"medianote\",L\"qmessage\",L\"newsapp\",L\"filehelper\"\r\n\tL\"weixin\", L\"tmessage\", L\"mphelper\",L\"gh_7aac992b0363\", L\"qqsafe\"\r\n};\r\n\r\n//************************************************************\r\n// : HookGetFriendList\r\n// ˵: HOOKȡбcall \r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid HookGetFriendList()\r\n{\r\n\tHookAnyAddress(GetWeChatWinBase() + WxFriendList, GetUserListInfo);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : GetUserListInfo\r\n// ˵: ȡûϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\n__declspec(naked) void GetUserListInfo()\r\n{\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tpush esi;\r\n\t\tcall SendUserListInfo;\r\n\t\tpopad;\r\n\r\n\t\t//䱻ǵĴ\r\n\t\tcall overWritedCallAdd;\r\n\r\n\t\t//رHOOKָһָ\r\n\t\tjmp jumBackAddress\r\n\t}\r\n}\r\n\r\n//************************************************************\r\n// : ReSendUser\r\n// ˵: ٴηͺϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : user\r\n//   ֵ: void \r\n//************************************************************\r\nvoid ReSendUser(UserListInfo* user)\r\n{\r\n\tHWND hWnd = NULL;\r\n\twhile (true)\r\n\t{\r\n\t\t//͵ƶ\r\n\t\thWnd = FindWindow(NULL, TEXT(\"΢\"));\r\n\t\tif (hWnd == NULL)\r\n\t\t{\r\n\t\t\tSleep(200);\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tbreak;\r\n\t}\r\n\r\n\tCOPYDATASTRUCT userinfo;\r\n\tuserinfo.dwData = WM_GetFriendList;//һֵ, ־\r\n\tuserinfo.cbData = sizeof(UserListInfo);// strlen(szSendBuf);//͵ݵĳ\r\n\tuserinfo.lpData = user;// szSendBuf;//͵ݵʼַ(ΪNULL)\r\n\tSendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&userinfo);\r\n\tdelete user;\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// : SendUserListInfo\r\n// ˵: ͺб\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : r_esi бڵָ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid __stdcall SendUserListInfo(DWORD r_esi)\r\n{\r\n\t//΢źšȺ\r\n\twstring wxid = GetMsgByAddress(r_esi + 0x8);\r\n\twstring nickname = GetMsgByAddress(r_esi + 0x64);\r\n\r\n\t//бȥ\r\n\tmap<wstring, wstring>::iterator it;\r\n\tit = g_userinfolist.find(wxid);\r\n\t//ֵend() ˵ҵ ֱӷطֹظ\r\n\tif (it != g_userinfolist.end())\r\n\t{\r\n\t\treturn;\r\n\t}\r\n\t//ûҵ 뵽\r\n\tg_userinfolist.insert(make_pair(wxid, nickname));\r\n\r\n\t//ųƼб\r\n\tfor (int i = 0; i < 11; i++)\r\n\t{\r\n\t\tif (g_referencenumber[i] == wxid)\r\n\t\t{\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tunique_ptr<UserListInfo> user(new UserListInfo);\r\n\r\n\tLPVOID pUserWxid = *((LPVOID *)(r_esi + 0x8));\t\t//΢ID\r\n\tLPVOID pUserNumber = *((LPVOID *)(r_esi + 0x1C));\t//΢ź\r\n\tLPVOID pUserNick = *((LPVOID *)(r_esi + 0x64));\t\t//ǳ\r\n\tLPVOID pUserReMark = *((LPVOID *)(r_esi + 0x50));\t//ע\r\n\r\n\tswprintf_s(user->UserId, L\"%s\", (wchar_t*)pUserWxid);\r\n\tswprintf_s(user->UserNumber, L\"%s\", (wchar_t*)pUserNumber);\r\n\tswprintf_s(user->UserNickName, L\"%s\", (wchar_t*)pUserNick);\r\n\tswprintf_s(user->UserRemark, L\"%s\", (wchar_t*)pUserReMark);\r\n\r\n\r\n\t//͵ƶ\r\n\tHWND hWnd = FindWindow(NULL, TEXT(\"΢\"));\r\n\tif (hWnd == NULL)\r\n\t{\r\n\t\tUserListInfo* outuser = new UserListInfo;\r\n\t\r\n\t\tswprintf_s(outuser->UserId, L\"%s\", (wchar_t*)pUserWxid);\r\n\t\tswprintf_s(outuser->UserNumber, L\"%s\", (wchar_t*)pUserNumber);\r\n\t\tswprintf_s(outuser->UserNickName, L\"%s\", (wchar_t*)pUserNick);\r\n\t\tswprintf_s(outuser->UserRemark, L\"%s\", (wchar_t*)pUserReMark);\r\n\t\r\n\t\r\n\t\tHANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReSendUser, outuser, 0, NULL);\r\n\t\tCloseHandle(hThread);\r\n\t}\r\n\t\r\n\tCOPYDATASTRUCT userinfo;\r\n\tuserinfo.dwData = WM_GetFriendList;//һֵ, ־\r\n\tuserinfo.cbData = sizeof(UserListInfo);// strlen(szSendBuf);//͵ݵĳ\r\n\tuserinfo.lpData = user.get();// szSendBuf;//͵ݵʼַ(ΪNULL)\r\n\tSendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&userinfo);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : SendTextMessage\r\n// ˵: ıϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : wxid ΢ID msgϢ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SendTextMessage(wchar_t* wxid, wchar_t* msg)\r\n{\r\n\t//õϢcallĵַ\r\n\tDWORD dwSendCallAddr = GetWeChatWinBase() + WxSendMessage;\r\n\r\n\t//װ΢ID/ȺIDĽṹ\r\n\tGeneralStruct id(wxid);\r\n\t//Ϣ\r\n\tGeneralStruct text(msg);\r\n\r\n\t//ȡ΢IDϢĵַ\r\n\tchar* pWxid = (char*)&id.pstr;\r\n\tchar* pWxmsg = (char*)&text.pstr;\r\n\r\n\tchar buff[0x81C] = { 0 };\r\n\tchar buff2[0x81C] = { 0 };\r\n\r\n\t//΢ŷϢcall\r\n\t__asm {\r\n\t\tpush 0x1;\r\n\t\tlea edi, buff2;\r\n\t\tpush edi;\r\n\t\tmov ebx, pWxmsg;\r\n\t\tpush ebx;\r\n\t\tlea ecx, buff;\r\n\t\tmov edx, pWxid;\r\n\t\tcall dwSendCallAddr;\r\n\t\tadd esp, 0xC;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : SendFileMessage\r\n// ˵: ļϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/4\r\n//     : wxid ΢ID filepath ļ·\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SendFileMessage(wchar_t* wxid, wchar_t* filepath)\r\n{\r\n\t//Ҫĵַ\r\n\tDWORD dwBase = GetWeChatWinBase();\r\n\tDWORD dwCall1 = dwBase + WxFileMessage1;\r\n\tDWORD dwCall2 = dwBase + WxFileMessage2;\r\n\tDWORD dwCall3 = dwBase + WxFileMessage3;\t//\r\n\tDWORD dwCall4 = dwBase + WxFileMessage4;\t//Ϣ\r\n\tDWORD dwParams = dwBase + WxFileMessageParam;\r\n\r\n\tchar buff[0x528] = { 0 };\r\n\r\n\t//Ҫ\r\n\tGeneralStruct wxidStruct(wxid);\r\n\tGeneralStruct filePathStruct(filepath);\r\n\r\n\t//ȡҪݵĵַ\r\n\tchar* pFilePath = (char*)&filePathStruct.pstr;\r\n\tchar* pWxid = (char*)&wxidStruct.pstr;\r\n\r\n\r\n\r\n\t__asm {\r\n\t\tpushad;\r\n\t\tsub esp, 0x14;\r\n\t\tlea eax, buff;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall2;\r\n\r\n\t\tpush 0;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tpush - 0x1;\r\n\t\tpush dwParams;\r\n\t\tcall dwCall1;\r\n\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tmov ebx, pFilePath;\r\n\t\tpush ebx;\r\n\t\tcall dwCall2;\r\n\r\n\t\tsub esp, 0x14;\r\n\t\tmov eax, pWxid;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall2;\r\n\r\n\t\tlea eax, buff;\r\n\t\tpush eax;\r\n\t\tcall dwCall3;\r\n\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall4;\r\n\t\tpopad;\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : SendImageMessage\r\n// ˵: ͼƬϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/7\r\n//     : wxid ΢ID filepath ͼƬ·\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SendImageMessage(wchar_t* wxid, wchar_t* filepath)\r\n{\r\n\t//װ΢IDݽṹ\r\n\tGeneralStruct imagewxid(wxid);\r\n\t//װļ·ݽṹ\r\n\tGeneralStruct imagefilepath(filepath);\r\n\tchar buff[0x528] = { 0 };\r\n\tchar buff2[0x60] = { 0 };\r\n\r\n\r\n\tDWORD dwCall3 = GetWeChatWinBase() + WxSendImageCall3;\r\n\tDWORD dwCall1 = GetWeChatWinBase()+ WxSendImageCall1;\r\n\tDWORD dwCall2 = GetWeChatWinBase() + WxSendImageCall2;\r\n\r\n\r\n\t//΢ŷͼƬGidCreateBimapFileCM ֮ͼƬһֱռ ޷ɾ patchĴ\r\n\tunsigned char oldcode[5] = {0};\r\n\tunsigned char fix[5] = { 0x31,0xC0,0x90,0x90,0x90 };\r\n\tDWORD dwPathcAddr = GetWeChatWinBase() + WxPatchAddr;\r\n\t//޸Ĵ\r\n\tDWORD dwOldAttr = 0;\r\n\tVirtualProtect((LPVOID)dwPathcAddr, 5, PAGE_EXECUTE_READWRITE, &dwOldAttr);\r\n\t//ȱԭָ\r\n\tmemcpy(oldcode, (LPVOID)dwPathcAddr, 5);\r\n\t//Patch\r\n\tmemcpy((LPVOID)dwPathcAddr, fix, 5);\r\n\r\n\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tsub esp, 0x14;\r\n\t\tlea eax, buff2;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall3;\r\n\t\tlea ebx, imagefilepath;\r\n\t\tpush ebx;\r\n\t\tlea eax, imagewxid;\r\n\t\tpush eax;\r\n\t\tlea eax, buff;\r\n\t\tpush eax;\r\n\t\tcall dwCall1;\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall2;\r\n\t\tpopad;\r\n\t}\r\n\t//ָ֮\r\n\tmemcpy((LPVOID)dwPathcAddr, oldcode, 5);\r\n\t//ָ\r\n\tVirtualProtect((LPVOID)dwPathcAddr, 5, dwOldAttr, &dwOldAttr);\r\n}\r\n\r\n\r\n//************************************************************\r\n// : WxDeleteUser\r\n// ˵: ɾ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/8\r\n//     : wxid ΢ID\r\n//   ֵ: void \r\n//************************************************************\r\nvoid DeleteUser(wchar_t* wxid)\r\n{\r\n\tDWORD dwBaseAddress = GetWeChatWinBase();\r\n\t//\r\n\tGeneralStruct structWxid(wxid);\r\n\tDWORD* asmMsg = (DWORD*)&structWxid.pstr;\r\n\tDWORD dwCallAddr = dwBaseAddress + WxDeleteUser;\r\n\r\n\t__asm \r\n\t{\r\n\t\tmov ecx, 0;\r\n\t\tpush ecx;\r\n\t\tmov esi, asmMsg;\r\n\t\tpush esi;\r\n\t\tcall  dwCallAddr;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : SendXmlCard\r\n// ˵: XMLƬ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/10\r\n//     : RecverWxid ΢ID SendWxidҪ͵΢ID NickName΢ǳ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid SendXmlCard(wchar_t* RecverWxid, wchar_t* SendWxid, wchar_t* NickName)\r\n{\r\n\twchar_t xml[0x2000] = { 0 };\r\n\tswprintf_s(xml, L\"<?xml version=\\\"1.0\\\"?><msg bigheadimgurl=\\\"http://wx.qlogo.cn/mmhead/ver_1/7IiaGRVxyprWcBA9v2IA1NLRa1K5YbEX5dBzmcEKw4OupNxsYuYSBt1zG91O6p07XlIOQIFhPCC3hU1icJMk3z28Ygh6IhfZrV4oYtXZXEU5A/0\\\" smallheadimgurl=\\\"http://wx.qlogo.cn/mmhead/ver_1/7IiaGRVxyprWcBA9v2IA1NLRa1K5YbEX5dBzmcEKw4OupNxsYuYSBt1zG91O6p07XlIOQIFhPCC3hU1icJMk3z28Ygh6IhfZrV4oYtXZXEU5A/132\\\" username=\\\"%s\\\" nickname=\\\"%s\\\" fullpy=\\\"?\\\" shortpy=\\\"\\\" alias=\\\"%s\\\" imagestatus=\\\"3\\\" scene=\\\"17\\\" province=\\\"\\\" city=\\\"й\\\" sign=\\\"\\\" sex=\\\"2\\\" certflag=\\\"0\\\" certinfo=\\\"\\\" brandIconUrl=\\\"\\\" brandHomeUrl=\\\"\\\" brandSubscriptConfigUrl= \\\"\\\" brandFlags=\\\"0\\\" regionCode=\\\"CN_BeiJing_BeiJing\\\" />\", SendWxid, NickName, SendWxid);\r\n\tGeneralStruct pWxid(RecverWxid);\r\n\tGeneralStruct pXml(xml);\r\n\r\n\r\n\tchar* asmWxid = (char *)&pWxid.pstr;\r\n\tchar* asmXml = (char *)&pXml.pstr;\r\n\tchar buff[0x20C] = { 0 };\r\n\tDWORD callAdd = GetWeChatWinBase() + WxSendXmlCard;\r\n\r\n\r\n\t__asm {\r\n\t\tmov eax, asmXml\r\n\t\tpush 0x2A\r\n\t\tmov edx, asmWxid\r\n\t\tpush 0x0\r\n\t\tpush eax\r\n\t\tlea ecx, buff\r\n\t\tcall callAdd\r\n\t\tadd esp, 0xC\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : wstringToString\r\n// ˵: wstringתString\r\n//     : GuiShou\r\n// ʱ    : 2019/9/17\r\n//     : wstr\r\n//   ֵ: string \r\n//************************************************************\r\nstd::string wstringToString(const std::wstring& wstr)\r\n{\r\n\tLPCWSTR pwszSrc = wstr.c_str();\r\n\tint nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);\r\n\tif (nLen == 0)\r\n\t\treturn std::string(\"\");\r\n\r\n\tchar* pszDst = new char[nLen];\r\n\tif (!pszDst)\r\n\t\treturn std::string(\"\");\r\n\r\n\tWideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);\r\n\tstd::string str(pszDst);\r\n\tdelete[] pszDst;\r\n\tpszDst = NULL;\r\n\treturn str;\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// : GetNickNameByWxid\r\n// ˵: ݺб΢ID/ȺIDȡ΢ǳ/Ⱥǳ\r\n//     : GuiShou\r\n// ʱ    : 2020/2/10\r\n//     : nickname ǳ\r\n//   ֵ: void \r\n//************************************************************\r\nwstring GetNickNameByWxid(wstring wxid)\r\n{\r\n\tmap<wstring, wstring>::iterator it;\r\n\tit = g_userinfolist.find(wxid);\r\n\tif (it != g_userinfolist.end())\r\n\t{\r\n\t\treturn it->second;\r\n\t}\r\n\telse\r\n\t{\r\n\t\treturn L\"NULL\";\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : GetNicknameByWxid\r\n// ˵: ΢IDȡǳ\r\n//     : GuiShou\r\n// ʱ    : 2020/2/10\r\n//     : wxid ΢ID\r\n//   ֵ: wchar_t* ǳ \r\n//************************************************************\r\nwchar_t* GetNicknameByWxid(wchar_t* userwxid)\r\n{\r\n\tDWORD dwCall1 = GetWeChatWinBase() + WxGetUserInfoByWxidCall1;\r\n\tDWORD dwCall2 =  GetWeChatWinBase() + WxGetUserInfoByWxidCall2;\r\n\tDWORD dwCall3 =  GetWeChatWinBase() + WxGetUserInfoByWxidCall3;\r\n\r\n\tGeneralStruct pWxid(userwxid);\r\n\tchar* asmWxid = (char*)& pWxid.pstr;\r\n\tchar buff[0x3D8] = { 0 };\r\n\tDWORD userData = 0;\t\t//ûݵĵַ\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tlea edi, buff;\r\n\t\tpush edi;\r\n\t\tsub esp, 0x14;\r\n\t\tmov eax, asmWxid;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall1;\r\n\t\tcall dwCall2;\r\n\t\tcall dwCall3;\r\n\t\tmov userData, edi;\r\n\t\tpopad;\r\n\t}\r\n\r\n\twchar_t tempnickname[100] = { 0 };\r\n\tDWORD wxNickAdd = userData + 0x64;\t//ǳ\r\n\tswprintf_s(tempnickname, L\"%s\", (wchar_t*)(*((LPVOID*)wxNickAdd)));\r\n\r\n\twchar_t* nickname = new wchar_t[100]{ 0 };\r\n\tmemcpy(nickname, tempnickname, wcslen(tempnickname) * 2);\r\n\treturn nickname;\r\n}\r\n"
  },
  {
    "path": "WeChatHelper/FriendList.h",
    "content": "#pragma once\r\n\r\nvoid HookGetFriendList();\t\t//HOOKȡбcall\r\nvoid GetUserListInfo();\t\t    //ȡб\r\nvoid __stdcall SendUserListInfo(DWORD r_esi);\t\t//ͺб\r\nvoid SendTextMessage(wchar_t* wxid, wchar_t* msg);\t//ıϢ\r\nvoid SendFileMessage(wchar_t* wxid, wchar_t* filepath);\t//ļϢ\r\nvoid SendImageMessage(wchar_t* wxid, wchar_t* filepath);//ͼƬϢ\r\nvoid DeleteUser(wchar_t* wxid);\t//ɾ\r\nvoid SendXmlCard(wchar_t* RecverWxid, wchar_t* SendWxid, wchar_t* NickName); //XMLƬ\r\nstd::string wstringToString(const std::wstring& wstr);\r\nwchar_t* GetNicknameByWxid(wchar_t* userwxid);\r\nwstring GetNickNameByWxid(wstring wxid);\r\n\r\n"
  },
  {
    "path": "WeChatHelper/Function.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Function.h\"\r\n#include <stdlib.h >\r\n#include <vector>\r\n#include \"FriendList.h\"\r\n\r\nvector<wstring> g_wxidgroup;\t\t\t//嶯̬΢ID\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// : AddWxUser\r\n// ˵: Ӻ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : wxid ΢ID msgӺʱҪ͵Ϣ\r\n//   ֵ: void \r\n//************************************************************\r\nvoid AddWxUser(wchar_t* wxid, wchar_t* msg)\r\n{\r\n\tDWORD dwWeChatWinAddr = GetWeChatWinBase();\r\n\tDWORD dwParam1 = dwWeChatWinAddr + WxAddWxUserParam1;\r\n\tDWORD dwCall1 = dwWeChatWinAddr + WxAddWxUserCall1;\r\n\tDWORD dwCall2 = dwWeChatWinAddr + WxAddWxUserCall2;\r\n\tDWORD dwCall3 = dwWeChatWinAddr + WxAddWxUserCall3;\r\n\tDWORD dwCall4 = dwWeChatWinAddr + WxAddWxUserCall4;\r\n\tDWORD dwCall5 = dwWeChatWinAddr + WxAddWxUserCall5;\r\n\r\n\tGeneralStruct pWxid(wxid);\r\n\tGeneralStruct pMsg(msg);\r\n\r\n\tchar* asmWxid = (char*)&pWxid.pstr;\r\n\tchar* asmMsg = (char*)&pMsg.pstr;\r\n\tDWORD asmMsgText = (DWORD)pMsg.pstr;\r\n\tchar buff3[0x100] = { 0 };\r\n\tchar* buff = buff3;\r\n\t__asm\r\n\t{\r\n\t\tsub esp, 0x18;\r\n\t\tmov ecx, esp;\r\n\t\tpush  dwParam1;\r\n\t\tcall dwCall1;\r\n\r\n\t\tsub esp, 0x18;\r\n\t\tmov eax, buff;\r\n\t\tmov ecx, esp;\r\n\t\tpush eax;\r\n\t\tcall dwCall2;\r\n\r\n\t\tpush 0x6;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tpush -0x1;\r\n\t\tmov edi, msg;\r\n\t\tpush edi;\r\n\t\tcall dwCall3;\r\n\r\n\r\n\t\tpush 0x2;\r\n\t\tsub esp, 0x14;\r\n\t\tmov ecx, esp;\r\n\t\tmov ebx, asmWxid;\r\n\t\tpush ebx;\r\n\t\tcall dwCall4;\r\n\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCall5;\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : OpenUrl\r\n// ˵: ΢\r\n//     : GuiShou\r\n// ʱ    : 2019/9/10\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid OpenUrl(wchar_t* Url)\r\n{\r\n\tGeneralStruct pUrl(Url);\r\n\tchar* asmpUrl = (char*)&pUrl.pstr;\r\n\tDWORD dwWeChatWinAddr = GetWeChatWinBase();\r\n\tDWORD callAdd1 = dwWeChatWinAddr + WxOpenUrlCall1;\r\n\tDWORD callAdd2 = dwWeChatWinAddr + WxOpenUrlCall2;\r\n\t__asm {\r\n\t\tpushad\r\n\t\tsub esp, 0x14\r\n\t\tmov eax, asmpUrl\r\n\t\tmov ecx, esp\r\n\t\tpush eax\r\n\t\tcall callAdd1\r\n\t\tcall callAdd2\r\n\t\tadd esp, 0x14\r\n\t\tpopad\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : AntiRevoke\r\n// ˵: \r\n//     : GuiShou\r\n// ʱ    : 2019/7/15\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\nvoid AntiRevoke()\r\n{\r\n\tunsigned char fix[1] = { 0xEB };\r\n\tDWORD dwPathcAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\") + WxAntiRevoke;\r\n\t//޸Ĵ\r\n\tDWORD dwOldAttr = 0;\r\n\tVirtualProtect((LPVOID)dwPathcAddr, 1, PAGE_EXECUTE_READWRITE, &dwOldAttr);\r\n\r\n\t//Patch\r\n\tmemcpy((LPVOID)dwPathcAddr, fix, 1);\r\n\r\n\t//ָ\r\n\tVirtualProtect((LPVOID)dwPathcAddr, 5, dwOldAttr, &dwOldAttr);\r\n}"
  },
  {
    "path": "WeChatHelper/Function.h",
    "content": "#pragma once\r\n#include <string>\r\nusing namespace std;\r\n\r\nvoid AddWxUser(wchar_t* wxid, wchar_t* msg);\t//Ӻ\r\nvoid AntiRevoke();\t//\r\nvoid OpenUrl(wchar_t * Url);\t//΢\r\n\r\n\r\n"
  },
  {
    "path": "WeChatHelper/InitWeChat.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <strstream>\r\n#include <iostream>\r\n#pragma comment(lib,\"Version.lib\")\r\n\r\n\r\n\r\n//************************************************************\r\n// : IsWxVersionValid\r\n// ˵: ΢Ű汾Ƿƥ\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : void\r\n//   ֵ: BOOL\r\n//************************************************************\r\nBOOL IsWxVersionValid()\r\n{\r\n\tDWORD wxBaseAddress = (DWORD)GetModuleHandle(TEXT(\"WeChatWin.dll\"));\r\n\tconst string wxVersoin = \"3.2.1.154\";\r\n\r\n\tWCHAR VersionFilePath[MAX_PATH];\r\n\tif (GetModuleFileName((HMODULE)wxBaseAddress, VersionFilePath, MAX_PATH) == 0)\r\n\t{\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tstring asVer = \"\";\r\n\tVS_FIXEDFILEINFO* pVsInfo;\r\n\tunsigned int iFileInfoSize = sizeof(VS_FIXEDFILEINFO);\r\n\tint iVerInfoSize = GetFileVersionInfoSize(VersionFilePath, NULL);\r\n\tif (iVerInfoSize != 0) {\r\n\t\tchar* pBuf = new char[iVerInfoSize];\r\n\t\tif (GetFileVersionInfo(VersionFilePath, 0, iVerInfoSize, pBuf)) {\r\n\t\t\tif (VerQueryValue(pBuf, TEXT(\"\\\\\"), (void**)& pVsInfo, &iFileInfoSize)) {\r\n\r\n\t\t\t\tint s_major_ver = (pVsInfo->dwFileVersionMS >> 16) & 0x0000FFFF;\r\n\r\n\t\t\t\tint s_minor_ver = pVsInfo->dwFileVersionMS & 0x0000FFFF;\r\n\r\n\t\t\t\tint s_build_num = (pVsInfo->dwFileVersionLS >> 16) & 0x0000FFFF;\r\n\r\n\t\t\t\tint s_revision_num = pVsInfo->dwFileVersionLS & 0x0000FFFF;\r\n\r\n\t\t\t\t//Ѱ汾ַ\r\n\t\t\t\tstrstream wxVer;\r\n\t\t\t\twxVer << s_major_ver << \".\" << s_minor_ver << \".\" << s_build_num << \".\" << s_revision_num;\r\n\t\t\t\twxVer >> asVer;\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete[] pBuf;\r\n\t}\r\n\r\n\t//汾ƥ\r\n\tif (asVer == wxVersoin)\r\n\t{\r\n\t\treturn TRUE;\r\n\t}\r\n\r\n\t//汾ƥ\r\n\treturn FALSE;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : CheckIsLogin\r\n// ˵: ΢Ƿ½\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nvoid CheckIsLogin()\r\n{\r\n\t//ȡWeChatWinĻַ\r\n\tDWORD  dwWeChatWinAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\r\n\twhile (true)\r\n\t{\r\n\t\tDWORD dwIsLogin = dwWeChatWinAddr + LoginSign_Offset;\r\n\t\tif (*(DWORD*)dwIsLogin != 0)\r\n\t\t{\r\n\t\t\t//ҵ½ھ\r\n\t\t\tHWND hLogin = FindWindow(NULL, L\"Login\");\r\n\t\t\tif (hLogin == NULL)\r\n\t\t\t{\r\n\t\t\t\tOutputDebugStringA(\"δҵLogin\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tCOPYDATASTRUCT login_msg;\r\n\t\t\tlogin_msg.dwData = WM_Login;\r\n\t\t\tlogin_msg.lpData = NULL;\r\n\t\t\tlogin_msg.cbData = 0;\r\n\t\t\t//Ϣƶ\r\n\t\t\tSendMessage(hLogin, WM_COPYDATA, (WPARAM)hLogin, (LPARAM)&login_msg);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tSleep(500);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "WeChatHelper/InitWeChat.h",
    "content": "#pragma once\r\n#include \"stdafx.h\"\r\n\r\nBOOL IsWxVersionValid();\t//鵱ǰ΢Ű汾\r\nvoid CheckIsLogin();\t//΢Ƿ½\r\n"
  },
  {
    "path": "WeChatHelper/Login.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"Login.h\"\r\n\r\n\r\nDWORD dwRetAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\") + WxQrCodeOffset + 5;\t//صַ\r\nDWORD dwOverAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\") + WxQrCodeOffsetCall;\t//ǵcall\r\n\r\n\r\n//************************************************************\r\n// : HookQrCode\r\n// ˵: HOOK΢Ŷά\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : DWORD dwHookOffset Ҫhookƫ \r\n//   ֵ: void\r\n//************************************************************\r\nvoid HookQrCode()\r\n{\r\n\tHookAnyAddress(GetWeChatWinBase()+ WxQrCodeOffset, ShowPic);\r\n}\r\n\r\n\r\n//************************************************************\r\n// : ShowPic\r\n// ˵: ʾά\r\n//     : GuiShou\r\n// ʱ    : 2019/6/16\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nvoid  __declspec(naked) ShowPic()\r\n{\r\n\t__asm\r\n\t{\r\n\t\tpushad;\r\n\t\tpushfd;\r\n\t\tpush ecx;\r\n\t\tcall SaveImg;\r\n\t\tpopfd;\r\n\t\tpopad;\r\n\t\tcall dwOverAddr;\r\n\t\tjmp dwRetAddr;\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : SaveImg\r\n// ˵: άͼƬ\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : DWORD qrcode άͼƬڵĵַ\r\n//   ֵ: void\r\n//************************************************************\r\nvoid __stdcall SaveImg(DWORD qrcode)\r\n{\r\n\t//ȡͼƬ\r\n\tDWORD dwPicLen = qrcode + 0x4;\r\n\tsize_t cpyLen = (size_t)*((LPVOID*)dwPicLen);\r\n\t//ͼƬ\r\n\tchar PicData[0xFFF] = { 0 };\r\n\tmemcpy(PicData, *((LPVOID*)qrcode), cpyLen);\r\n\r\n\tchar szTempPath[MAX_PATH] = { 0 };\r\n\tchar szPicturePath[MAX_PATH] = { 0 };\r\n\tGetTempPathA(MAX_PATH, szTempPath);\r\n\r\n\tsprintf_s(szPicturePath, \"%s%s\", szTempPath, \"qrcode.png\");\r\n\t//ļдTempĿ¼\r\n\tHANDLE hFile = CreateFileA(szPicturePath, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\r\n\tif (hFile == NULL)\r\n\t{\r\n\t\tOutputDebugStringA(\"ͼƬļʧ\");\r\n\t\treturn;\r\n\t}\r\n\r\n\tDWORD dwRead = 0;\r\n\tif (WriteFile(hFile, PicData, cpyLen, &dwRead, NULL) == 0)\r\n\t{\r\n\t\tOutputDebugStringA(\"дͼƬļʧ\");\r\n\t\treturn;\r\n\t}\r\n\tCloseHandle(hFile);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// : GotoQrCode\r\n// ˵: תά봰\r\n//     : GuiShou\r\n// ʱ    : 2019/6/16\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nvoid GotoQrCode()\r\n{\r\n\tDWORD dwBaseAddress = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\tDWORD dwCallAddr1 = dwBaseAddress + WxGoToQrCode1;\r\n\tDWORD dwCallAddr2 = dwBaseAddress + WxGoToQrCode2;\r\n\r\n\t__asm \r\n\t{\r\n\t\tcall dwCallAddr1;\r\n\t\tmov ecx, eax;\r\n\t\tcall dwCallAddr2;\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatHelper/Login.h",
    "content": "#pragma once\r\n#include \"stdafx.h\"\r\n\r\n\r\nvoid HookQrCode();\t//HOOKά\r\nvoid ShowPic();\t\t//ʾά\r\nvoid __stdcall SaveImg(DWORD qrcode);\t//ά\r\nvoid GotoQrCode(); //תά\r\n\r\n"
  },
  {
    "path": "WeChatHelper/MainWindow.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"MainWindow.h\"\r\n\r\n\r\nvoid LogoutWeChat()\r\n{\r\n\tDWORD dwBaseAddress = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\tDWORD dwCallAddress = dwBaseAddress + WxLogout;\r\n\tHANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)dwCallAddress, 0, NULL, 0);\r\n\tif (hThread != 0)\r\n\t{\r\n\t\tCloseHandle(hThread);\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatHelper/MainWindow.h",
    "content": "#pragma once\r\n#include \"stdafx.h\"\r\n\r\nvoid LogoutWeChat();"
  },
  {
    "path": "WeChatHelper/SelfInformation.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"SelfInformation.h\"\r\n#include \"Function.h\"\r\n#include \"CPublic.h\"\r\n\r\n\r\n//************************************************************\r\n// : GetSelfInformation\r\n// ˵: ȡϢ\r\n//     : GuiShou\r\n// ʱ    : 2019/12/4\r\n//     : void\r\n//   ֵ: void \r\n//************************************************************\r\n//void GetInformation()\r\n//{\r\n//\tInformation *info = new Information;\r\n//\tchar tempcontent[0x300];\r\n//\t//ȡWeChatWinĻַ\r\n//\tDWORD dwWeChatWinAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n//\r\n//\t//΢ID Ҫ΢ź  ΢źָ ΢źַ\r\n//\tmemset(tempcontent, 0, 0x300);\r\n//\tDWORD pWxid = dwWeChatWinAddr + 0x161C814;\r\n//\t//С6ߴ20 ˵طǸָ\r\n//\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWinAddr + 0x161C814));\r\n//\tif (strlen(tempcontent) < 0x6 || strlen(tempcontent) > 0x14)\r\n//\t{\r\n//\t\t//˵µ΢ź ΢IDõַ\r\n//\t\tsprintf_s(tempcontent, \"%s\", (char*)(*(DWORD*)(dwWeChatWinAddr + 0x161C814)));\r\n//\t}\r\n//\telse\r\n//\t{\r\n//\t\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWinAddr + 0x161C814));\r\n//\t}\r\n//\twcscpy_s(info->wxid, wcslen(UTF8ToUnicode(tempcontent)) + 1, UTF8ToUnicode(tempcontent));\r\n//\r\n//\t//΢ID\r\n//\t//char wxid[0x1000] = { 0 };\r\n//\t//DWORD pWxid = dwWeChatWinAddr + 0x161C814;\r\n//\t//sprintf_s(wxid, \"%s\", (char*)(*(DWORD*)pWxid));\r\n//\t//if (strlen(wxid) < 40)\r\n//\t//{\r\n//\t//\twcscpy_s(info->wxid, wcslen(UTF8ToUnicode(wxid)) + 1, UTF8ToUnicode(wxid));\r\n//\t//}\r\n//\t//else\r\n//\t//{\r\n//\t//\twcscpy_s(info->wxid, wcslen(L\"΢IDʱ޷ʾ\") + 1, L\"΢IDʱ޷ʾ\");\r\n//\t//}\r\n//\r\n//\t//΢Ա\r\n//\tchar sex[4] = { 0 };\r\n//\tmemcpy(sex, (void*)(pWxid + 0x160), 1);\r\n//\r\n//\tif (sex[0] == 1)\r\n//\t{\r\n//\t\twcscpy_s(info->wxsex, wcslen(L\"\") + 1, L\"\");\r\n//\t}\r\n//\tif (sex[0] == 2)\r\n//\t{\r\n//\t\twcscpy_s(info->wxsex, wcslen(L\"Ů\") + 1, L\"Ů\");\r\n//\t}\r\n//\r\n//\t//΢ǳ\r\n//\tchar nickname[40] = { 0 };\r\n//\tif (*(DWORD*)(pWxid + 0x78 + 0x14) == 0xF)\r\n//\t{\r\n//\t\tsprintf_s(nickname, \"%s\", (char*)(pWxid + 0x78));\r\n//\t\twcscpy_s(info->nickname, wcslen(UTF8ToUnicode(nickname)) + 1, UTF8ToUnicode(nickname));\r\n//\t}\r\n//\telse\r\n//\t{\r\n//\t\tDWORD pNickName = pWxid + 0x78;\r\n//\t\tsprintf_s(nickname, \"%s\", (char*)(*(DWORD*)pNickName));\r\n//\t\twcscpy_s(info->nickname, wcslen(UTF8ToUnicode(nickname)) + 1, UTF8ToUnicode(nickname));\r\n//\t}\r\n//\r\n//\t//΢˺\r\n//\tchar wxcount[40] = { 0 };\r\n//\tsprintf_s(wxcount, \"%s\", (char*)(pWxid + 0x1DC));\r\n//\twcscpy_s(info->wxcount, wcslen(UTF8ToUnicode(wxcount)) + 1, UTF8ToUnicode(wxcount));\r\n//\r\n//\t//ֻ\r\n//\tchar phone[40] = { 0 };\r\n//\tsprintf_s(phone, \"%s\", (char*)(pWxid + 0xAC));\r\n//\twcscpy_s(info->phonenumber, wcslen(UTF8ToUnicode(phone)) + 1, UTF8ToUnicode(phone));\r\n//\r\n//\t//½豸\r\n//\tchar device[15] = { 0 };\r\n//\tsprintf_s(device, \"%s\", (char*)(pWxid + 0x4B4));\r\n//\twcscpy_s(info->device, wcslen(UTF8ToUnicode(device)) + 1, UTF8ToUnicode(device));\r\n//\r\n//\t//\r\n//\tchar nation[10] = { 0 };\r\n//\tsprintf_s(nation, \"%s\", (char*)(pWxid + 0x254));\r\n//\twcscpy_s(info->nation, wcslen(UTF8ToUnicode(nation)) + 1, UTF8ToUnicode(nation));\r\n//\r\n//\t//ʡ\r\n//\tchar province[20] = { 0 };\r\n//\tsprintf_s(province, \"%s\", (char*)(pWxid + 0x164));\r\n//\twcscpy_s(info->province, wcslen(UTF8ToUnicode(province)) + 1, UTF8ToUnicode(province));\r\n//\r\n//\t//\r\n//\tchar city[20] = { 0 };\r\n//\tsprintf_s(city, \"%s\", (char*)(pWxid + 0x17C));\r\n//\twcscpy_s(info->city, wcslen(UTF8ToUnicode(city)) + 1, UTF8ToUnicode(city));\r\n//\r\n//\r\n//\t//Сͷ\r\n//\tchar header[0x100] = { 0 };\r\n//\tDWORD pHeader = pWxid + 0x358;\r\n//\tsprintf_s(header, \"%s\", (char*)(*(DWORD*)pHeader));\r\n//\twcscpy_s(info->smallheader, wcslen(UTF8ToUnicode(header)) + 1, UTF8ToUnicode(header));\r\n//\r\n//\r\n//\t//ͷ\r\n//\tchar bigheader[0x100] = { 0 };\r\n//\tDWORD pbigheader = pWxid + 0x340;\r\n//\tsprintf_s(bigheader, \"%s\", (char*)(*(DWORD*)pbigheader));\r\n//\twcscpy_s(info->bigheader, wcslen(UTF8ToUnicode(bigheader)) + 1, UTF8ToUnicode(bigheader));\r\n//\r\n//\t//͵ͻ\r\n//\tHWND hInformation = FindWindow(NULL, L\"Information\");\r\n//\tif (hInformation == NULL)\r\n//\t{\r\n//\t\tOutputDebugStringA(\"δҵInformation\");\r\n//\t\treturn;\r\n//\t}\r\n//\tCOPYDATASTRUCT information_msg;\r\n//\tinformation_msg.dwData = WM_GetInformation;\r\n//\tinformation_msg.lpData = info;\r\n//\tinformation_msg.cbData = sizeof(Information);\r\n//\t//Ϣƶ\r\n//\tSendMessage(hInformation, WM_COPYDATA, (WPARAM)hInformation, (LPARAM)&information_msg);\r\n//\r\n//\tdelete info;\r\n//}\r\n\r\n\r\n\r\nvoid GetInformation()\r\n{\r\n\tunique_ptr<PersonalInformation> info(new PersonalInformation);\r\n\r\n\tDWORD dwWeChatWin = GetWeChatWinBase();\r\n\r\n\tchar tempcontent[0x300];\r\n\t//΢ź\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxCount));\r\n\r\n\t//жǷΪ0 0˵΢źΪ\r\n\tif (tempcontent[0] == 0)\r\n\t{\r\n\t\twcscpy_s(info->wxcount, wcslen(L\"NULL\") + 1, L\"NULL\");\r\n\t}\r\n\telse\r\n\t{\r\n\t\twcscpy_s(info->wxcount, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\t}\r\n\r\n\r\n\t//΢ID Ҫ΢ź  ΢źָ ΢źַ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tDWORD pWxid = dwWeChatWin + WxID;\r\n\t//С6ߴ20 ˵طǸָ\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxID));\r\n\tif (strlen(tempcontent) < 0x6 || strlen(tempcontent) > 0x14)\r\n\t{\r\n\t\t//˵µ΢ź ΢IDõַ\r\n\t\tsprintf_s(tempcontent, \"%s\", (char*)(*(DWORD*)(dwWeChatWin + WxID)));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxID));\r\n\t}\r\n\twcscpy_s(info->wxid, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//Сͷ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(*(DWORD*)(dwWeChatWin + WxSmallHeader)));\r\n\twcscpy_s(info->smallheader, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\r\n\t//ͷ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(*(DWORD*)(dwWeChatWin + WxBigHeader)));\r\n\twcscpy_s(info->bigheader, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxNation));\r\n\twcscpy_s(info->nation, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\t//ʡ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxProvince));\r\n\twcscpy_s(info->province, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxCity));\r\n\twcscpy_s(info->city, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//ֻ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxPhoneNumber));\r\n\twcscpy_s(info->phonenumber, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\t//ǳ\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tif (*(DWORD*)(dwWeChatWin + WxNickName + 0x14) == 0xF)\r\n\t{\r\n\t\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxNickName));\r\n\t}\r\n\telse\r\n\t{\r\n\t\tsprintf_s(tempcontent, \"%s\", (char*)(*(DWORD*)(dwWeChatWin + WxNickName)));\r\n\t}\r\n\t\r\n\twcscpy_s(info->nickname, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//Ŀ¼\r\n\tswprintf_s(info->cachedir, L\"%s\", (wchar_t*)(*(DWORD*)(dwWeChatWin + WxCacheDir)));\r\n\r\n\r\n\t//½豸\r\n\tmemset(tempcontent, 0, 0x300);\r\n\tsprintf_s(tempcontent, \"%s\", (char*)(dwWeChatWin + WxDevice));\r\n\twcscpy_s(info->device, wcslen(UTF8ToUnicode2(tempcontent).c_str()) + 1, UTF8ToUnicode2(tempcontent).c_str());\r\n\r\n\r\n\t//Ա\r\n\tDWORD nSex = *(DWORD*)(dwWeChatWin + WxSex);\r\n\tif (nSex == 1)\r\n\t{\r\n\t\twcscpy_s(info->wxsex, wcslen(L\"\") + 1, L\"\");\r\n\t}\r\n\telse if (nSex == 2)\r\n\t{\r\n\t\twcscpy_s(info->wxsex, wcslen(L\"Ů\") + 1, L\"Ů\");\r\n\t}\r\n\telse\r\n\t{\r\n\t\twcscpy_s(info->wxsex, wcslen(L\"δ\") + 1, L\"δ\");\r\n\t}\r\n\r\n\r\n\tHWND hInformation = FindWindow(NULL, L\"Information\");\r\n\tif (hInformation == NULL)\r\n\t{\r\n\t\tOutputDebugStringA(\"δҵInformation\");\r\n\t\treturn;\r\n\t}\r\n\tCOPYDATASTRUCT information_msg;\r\n\tinformation_msg.dwData = WM_GetInformation;\r\n\tinformation_msg.lpData = info.get();\r\n\tinformation_msg.cbData = sizeof(PersonalInformation);\r\n\t//Ϣƶ\r\n\tSendMessage(hInformation, WM_COPYDATA, (WPARAM)hInformation, (LPARAM)&information_msg);\r\n}\r\n"
  },
  {
    "path": "WeChatHelper/SelfInformation.h",
    "content": "#pragma once\r\n\r\nvoid GetInformation();"
  },
  {
    "path": "WeChatHelper/WeChatHelper.cpp",
    "content": "﻿// WeChatHelper.cpp : 定义 DLL 应用程序的导出函数。\r\n//\r\n\r\n#include \"stdafx.h\"\r\n\r\n\r\n"
  },
  {
    "path": "WeChatHelper/WeChatHelper.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>15.0</VCProjectVersion>\r\n    <ProjectGuid>{6B65B0BF-7949-4C08-904B-5F51D8D3988F}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>WeChatHelper</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;WECHATHELPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <BasicRuntimeChecks>Default</BasicRuntimeChecks>\r\n      <BufferSecurityCheck>false</BufferSecurityCheck>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_DEBUG;WECHATHELPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;WECHATHELPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>NDEBUG;WECHATHELPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"CAutoFunction.h\" />\r\n    <ClInclude Include=\"ChatRecord.h\" />\r\n    <ClInclude Include=\"ChatRoomOperate.h\" />\r\n    <ClInclude Include=\"CPublic.h\" />\r\n    <ClInclude Include=\"data.h\" />\r\n    <ClInclude Include=\"FriendList.h\" />\r\n    <ClInclude Include=\"Function.h\" />\r\n    <ClInclude Include=\"InitWeChat.h\" />\r\n    <ClInclude Include=\"Login.h\" />\r\n    <ClInclude Include=\"MainWindow.h\" />\r\n    <ClInclude Include=\"message.h\" />\r\n    <ClInclude Include=\"offset.h\" />\r\n    <ClInclude Include=\"SelfInformation.h\" />\r\n    <ClInclude Include=\"stdafx.h\" />\r\n    <ClInclude Include=\"targetver.h\" />\r\n    <ClInclude Include=\"WndMsgLoop.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"CAutoFunction.cpp\" />\r\n    <ClCompile Include=\"ChatRecord.cpp\" />\r\n    <ClCompile Include=\"ChatRoomOperate.cpp\" />\r\n    <ClCompile Include=\"CPublic.cpp\" />\r\n    <ClCompile Include=\"dllmain.cpp\" />\r\n    <ClCompile Include=\"FriendList.cpp\" />\r\n    <ClCompile Include=\"Function.cpp\" />\r\n    <ClCompile Include=\"InitWeChat.cpp\" />\r\n    <ClCompile Include=\"Login.cpp\" />\r\n    <ClCompile Include=\"MainWindow.cpp\" />\r\n    <ClCompile Include=\"SelfInformation.cpp\" />\r\n    <ClCompile Include=\"stdafx.cpp\">\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">Create</PrecompiledHeader>\r\n    </ClCompile>\r\n    <ClCompile Include=\"WeChatHelper.cpp\" />\r\n    <ClCompile Include=\"WndMsgLoop.cpp\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "WeChatHelper/WeChatHelper.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"初始化微信\">\r\n      <UniqueIdentifier>{0b9b27f1-635b-4b63-9580-930b8d72841d}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"窗口消息循环\">\r\n      <UniqueIdentifier>{4b5b4735-0ae3-4e6b-8cdb-2af5f879882b}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"登陆窗口\">\r\n      <UniqueIdentifier>{fc4286b8-5328-472a-a362-c3b84ee68237}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"主窗口\">\r\n      <UniqueIdentifier>{4b22a285-3804-41a4-a099-5f661e054c87}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\">\r\n      <UniqueIdentifier>{eefc2ad3-9bc5-47a6-aa77-b4e015e0ea95}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"聊天记录\">\r\n      <UniqueIdentifier>{db5c4a94-9e79-4224-afae-c1f02e131232}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能窗口\">\r\n      <UniqueIdentifier>{6b03db46-3e31-4358-88dc-52c5eccc57c9}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\群相关操作\">\r\n      <UniqueIdentifier>{cb6e8977-d569-4964-b82f-3493e8e177de}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\好友列表\">\r\n      <UniqueIdentifier>{6267f3a4-1be9-4758-b7a7-014ced3b6ad0}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自动功能\">\r\n      <UniqueIdentifier>{9791c407-f3b4-44c9-843a-f9b5d6fdab8d}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\">\r\n      <UniqueIdentifier>{d493d5fb-ef85-41d0-9d36-6bf3bdce98c9}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\\偏移\">\r\n      <UniqueIdentifier>{680edb83-20e0-4c82-86cb-c20dc4961136}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\\自定义消息\">\r\n      <UniqueIdentifier>{e391b322-e0a0-4eb2-88b8-0eaa4a819d2c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\\结构体\">\r\n      <UniqueIdentifier>{05fd2c1f-b15c-4077-b8d7-3d72ac79a0e4}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"公共类\">\r\n      <UniqueIdentifier>{88bc72d9-339d-44e6-927b-1743ff5c1beb}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能窗口\\个人信息\">\r\n      <UniqueIdentifier>{53948c82-56cf-4eca-acab-1b2031c1c890}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能窗口\\功能窗口\">\r\n      <UniqueIdentifier>{60dea528-288d-4c73-9274-bc0b03f2f4f9}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"targetver.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"InitWeChat.h\">\r\n      <Filter>初始化微信</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"message.h\">\r\n      <Filter>自定义数据\\自定义消息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"offset.h\">\r\n      <Filter>自定义数据\\偏移</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"WndMsgLoop.h\">\r\n      <Filter>窗口消息循环</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"stdafx.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Login.h\">\r\n      <Filter>登陆窗口</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"MainWindow.h\">\r\n      <Filter>主窗口</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"ChatRecord.h\">\r\n      <Filter>聊天记录</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"ChatRoomOperate.h\">\r\n      <Filter>好友列表\\群相关操作</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"FriendList.h\">\r\n      <Filter>好友列表\\好友列表</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CAutoFunction.h\">\r\n      <Filter>自动功能</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"data.h\">\r\n      <Filter>自定义数据\\结构体</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CPublic.h\">\r\n      <Filter>公共类</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"SelfInformation.h\">\r\n      <Filter>功能窗口\\个人信息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Function.h\">\r\n      <Filter>功能窗口\\功能窗口</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"stdafx.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"WeChatHelper.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"dllmain.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"InitWeChat.cpp\">\r\n      <Filter>初始化微信</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"WndMsgLoop.cpp\">\r\n      <Filter>窗口消息循环</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Login.cpp\">\r\n      <Filter>登陆窗口</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"MainWindow.cpp\">\r\n      <Filter>主窗口</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"ChatRecord.cpp\">\r\n      <Filter>聊天记录</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"FriendList.cpp\">\r\n      <Filter>好友列表\\好友列表</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"ChatRoomOperate.cpp\">\r\n      <Filter>好友列表\\群相关操作</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CAutoFunction.cpp\">\r\n      <Filter>自动功能</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CPublic.cpp\">\r\n      <Filter>公共类</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"SelfInformation.cpp\">\r\n      <Filter>功能窗口\\个人信息</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"Function.cpp\">\r\n      <Filter>功能窗口\\功能窗口</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "WeChatHelper/WeChatHelper.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LocalDebuggerCommandArguments>\r\n    </LocalDebuggerCommandArguments>\r\n    <LocalDebuggerDebuggerType>Auto</LocalDebuggerDebuggerType>\r\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "WeChatHelper/WndMsgLoop.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"WndMsgLoop.h\"\r\n#include \"InitWeChat.h\"\r\n#include \"Login.h\"\r\n#include \"MainWindow.h\"\r\n#include \"FriendList.h\"\r\n#include \"ChatRecord.h\"\r\n#include \"Function.h\"\r\n#include \"ChatRoomOperate.h\"\r\n#include \"CAutoFunction.h\"\r\n#include \"SelfInformation.h\"\r\n#include <stdio.h>\r\n\r\nextern BOOL g_AutoChat;\t\t\t\t\t//Զ\r\n\r\n\r\n\r\n//************************************************************\r\n// : RegisterWindow\r\n// ˵: ʼ \r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : HMODULE hModule \r\n//   ֵ: void \r\n//************************************************************\r\nvoid InitWindow(HMODULE hModule)\r\n{\r\n\t//鵱ǰ΢Ű汾\r\n\tif (IsWxVersionValid())\r\n\t{\r\n\t\t//ȡWeChatWinĻַ\r\n\t\tDWORD dwWeChatWinAddr = (DWORD)GetModuleHandle(L\"WeChatWin.dll\");\r\n\t\r\n\t\t//΢Ƿ½\r\n\t\tDWORD dwIsLogin = dwWeChatWinAddr + LoginSign_Offset;\r\n\t\tif (*(DWORD*)dwIsLogin == 0)\t//0˵΢δ¼\r\n\t\t{\r\n\t\t\t//̳߳΢ŵ½״̬\r\n\t\t\tHANDLE hThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CheckIsLogin, 0, 0, NULL);\r\n\t\t\tCloseHandle(hThread);\r\n\r\n\t\t\t//HOOKȡбcall\r\n\t\t\tHookGetFriendList();\r\n\t\t\t\r\n\t\t\t//HOOKϢ\r\n\t\t\tHookChatRecord();\r\n\t\t\t\r\n\t\t\t//\r\n\t\t\tAntiRevoke();\r\n\t\t\t\r\n\t\t\t//HOOKȡ \r\n\t\t\t//HookExtractExpression();\r\n\r\n\t\t\t//עᴰ\r\n\t\t\tRegisterWindow(hModule);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t//΢Ѿ½ Ϣͻ\r\n\t\t\tHWND hLogin = FindWindow(NULL, L\"Login\");\r\n\t\t\tif (hLogin == NULL)\r\n\t\t\t{\r\n\t\t\t\tOutputDebugStringA(\"δҵLogin\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tCOPYDATASTRUCT login_msg;\r\n\t\t\tlogin_msg.dwData = WM_AlreadyLogin;\r\n\t\t\tlogin_msg.lpData = NULL;\r\n\t\t\tlogin_msg.cbData = 0;\r\n\t\t\t//Ϣƶ\r\n\t\t\tSendMessage(hLogin, WM_COPYDATA, (WPARAM)hLogin, (LPARAM)&login_msg);\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\tMessageBoxA(NULL, \"ǰ΢Ű汾ƥ䣬WeChat 3.2.1.154\", \"\", MB_OK);\r\n\t}\r\n\r\n}\r\n\r\n\r\n//************************************************************\r\n// : RegisterWindow\r\n// ˵: עᴰ\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : HMODULE hModule ھ\r\n//   ֵ: void \r\n//************************************************************\r\n\r\nvoid RegisterWindow(HMODULE hModule)\r\n{\r\n\t//1  һ\r\n\tWNDCLASS wnd;\r\n\twnd.style = CS_VREDRAW | CS_HREDRAW;//\r\n\twnd.lpfnWndProc = WndProc;//ڻصָ.\r\n\twnd.cbClsExtra = NULL;\r\n\twnd.cbWndExtra = NULL;\r\n\twnd.hInstance = hModule;\r\n\twnd.hIcon = NULL;\r\n\twnd.hCursor = NULL;\r\n\twnd.hbrBackground = (HBRUSH)COLOR_WINDOW;\r\n\twnd.lpszMenuName = NULL;\r\n\twnd.lpszClassName = TEXT(\"WeChatHelper\");\r\n\t//2  עᴰ\r\n\tRegisterClass(&wnd);\r\n\t//3  \r\n\tHWND hWnd = CreateWindow(\r\n\t\tTEXT(\"WeChatHelper\"),  //\r\n\t\tTEXT(\"WeChatHelper\"),//\r\n\t\tWS_OVERLAPPEDWINDOW,//ڷ\r\n\t\t10, 10, 500, 300, //λ\r\n\t\tNULL,             //ھ\r\n\t\tNULL,             //˵\r\n\t\thModule,        //ʵ\r\n\t\tNULL              //WM_CREATEϢʱĸӲ\r\n\t);\r\n\t//4  ʾ\r\n\tShowWindow(hWnd, SW_HIDE);\r\n\tUpdateWindow(hWnd);\r\n\t//5  ϢѭϢã\r\n\tMSG  msg = {};\r\n\t//   5.1ȡϢ\r\n\twhile (GetMessage(&msg, 0, 0, 0))\r\n\t{\r\n\t\t//   5.2Ϣ\r\n\t\tTranslateMessage(&msg);\r\n\t\t//   5.3תϢص\r\n\t\tDispatchMessage(&msg);\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// : WndProc\r\n// ˵: ص ںͿƶͨ \r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam\r\n//   ֵ: LRESULT \r\n//************************************************************\r\nLRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)\r\n{\r\n\tif (Message == WM_COPYDATA)\r\n\t{\r\n\t\tCOPYDATASTRUCT *pCopyData = (COPYDATASTRUCT*)lParam;\r\n\t\t//ͨϢṹ\r\n\t\tMessageUnion *msg = (MessageUnion*)pCopyData->lpData;\r\n\t\tswitch (pCopyData->dwData)\r\n\t\t{\r\n\t\t//ʾά\r\n\t\tcase WM_ShowQrPicture:\r\n\t\t{\r\n\t\t\tGotoQrCode();\r\n\t\t\tHookQrCode();\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//˳΢\r\n\t\tcase WM_Logout:\r\n\t\t{\r\n\t\t\tLogoutWeChat();\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ıϢ\r\n\t\tcase WM_SendTextMessage:\r\n\t\t{\r\n\t\t\tSendTextMessage(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t\t\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ļϢ\r\n\t\tcase WM_SendFileMessage:\r\n\t\t{\r\n\t\t\tSendFileMessage(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ͼƬϢ\r\n\t\tcase WM_SendImageMessage:\r\n\t\t{\r\n\t\t\tSendImageMessage(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ȡϢ\r\n\t\tcase WM_GetInformation:\r\n\t\t{\r\n\t\t\tGetInformation();\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//Ⱥ\r\n\t\tcase WM_SetRoomAnnouncement:\r\n\t\t{\r\n\t\t\tSetWxRoomAnnouncement(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ɾ\r\n\t\tcase WM_DeleteUser:\r\n\t\t{\r\n\t\t\tDeleteUser((wchar_t*)pCopyData->lpData);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//˳Ⱥ\r\n\t\tcase WM_QuitChatRoom:\r\n\t\t{\r\n\t\t\tQuitChatRoom((wchar_t*)pCopyData->lpData);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ȺԱ\r\n\t\tcase WM_AddGroupMember:\r\n\t\t{\r\n\t\t\tAddGroupMember(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//Ƭ\r\n\t\tcase WM_SendXmlCard:\r\n\t\t{\r\n\t\t\tSendXmlCard(msg->xmlcardmsg.RecverWxid, msg->xmlcardmsg.SendWxid, msg->xmlcardmsg.NickName);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ʾȺԱ\r\n\t\tcase WM_ShowChatRoomMembers:\r\n\t\t{\r\n\t\t\tShowChatRoomUser((wchar_t*)pCopyData->lpData);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//Ӻ\r\n\t\tcase WM_AddUser:\r\n\t\t{\r\n\t\t\tAddWxUser(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//޸Ⱥ\r\n\t\tcase WM_SetRoomName:\r\n\t\t{\r\n\t\t\tSetRoomName(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//Զ\r\n\t\tcase WM_AutoChat:\r\n\t\t{\r\n\t\t\tg_AutoChat = TRUE;\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ȡԶ\r\n\t\tcase WM_CancleAutoChat:\r\n\t\t{\r\n\t\t\tg_AutoChat = FALSE;\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ͰϢ\r\n\t\tcase WM_SendAtMsg:\r\n\t\t{\r\n\t\t\tSendRoomAtMsg(msg->atmsg.chatroomid, msg->atmsg.membermsgdata1, msg->atmsg.membernickname, msg->atmsg.msgmsgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//ɾȺԱ\r\n\t\tcase WM_DelRoomMember:\r\n\t\t{\r\n\t\t\tDelRoomMember(msg->genericmsg.msgdata1, msg->genericmsg.msgdata2);\r\n\t\t}\r\n\t\tbreak;\r\n\t\t//URL\r\n\t\tcase WM_OpenUrl:\r\n\t\t{\r\n\t\t\tOpenUrl((wchar_t*)pCopyData->lpData);\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn DefWindowProc(hWnd, Message, wParam, lParam);\r\n}\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "WeChatHelper/WndMsgLoop.h",
    "content": "#pragma once\r\n#include \"stdafx.h\"\r\n\r\n\r\nvoid InitWindow(HMODULE hModule);\t//ʼ\r\nvoid RegisterWindow(HMODULE hModule);\t\t//עᴰ\r\nLRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);\t//ڻص"
  },
  {
    "path": "WeChatHelper/data.h",
    "content": "#pragma once\r\n\r\n\r\n//΢ͨýṹ\r\nstruct GeneralStruct\r\n{\r\n\twchar_t* pstr;\r\n\tint iLen;\r\n\tint iMaxLen;\r\n\tint full1;\r\n\tint full2;\r\n\tGeneralStruct(wchar_t* pString)\r\n\t{\r\n\t\tpstr = pString;\r\n\t\tiLen = wcslen(pString);\r\n\t\tiMaxLen = iLen * 2;\r\n\t\tfull1 = 0;\r\n\t\tfull2 = 0;\r\n\t}\r\n};\r\n\r\n//洢WM_COPYDATAϢͨ\r\nunion MessageUnion\r\n{\r\n\t//ͨϢṹ\r\n\tstruct MessageStruct\r\n\t{\r\n\t\twchar_t msgdata1[MAX_PATH];\r\n\t\twchar_t msgdata2[MAX_PATH];\r\n\t}genericmsg;\r\n\r\n\t//ƬϢṹ\r\n\tstruct XmlCardMessage\r\n\t{\r\n\t\twchar_t RecverWxid[50];\t\t//ߵ΢ID\r\n\t\twchar_t SendWxid[50];\t\t//Ҫ͵΢ID\r\n\t\twchar_t NickName[50];\t\t//ǳ\r\n\t}xmlcardmsg;\r\n\t//ͰϢ\r\n\tstruct AtMsg\r\n\t{\r\n\t\twchar_t chatroomid[50] = { 0 };\r\n\t\twchar_t membermsgdata1[50] = { 0 };\r\n\t\twchar_t membernickname[50] = { 0 };\r\n\t\twchar_t msgmsgdata2[100] = { 0 };\r\n\t}atmsg;\r\n\t//XMLϢ\r\n\tstruct SendXmlArticleStruct\r\n\t{\r\n\t\twchar_t title[50];\r\n\t\twchar_t subtitle[50];\r\n\t\twchar_t urllink[200];\r\n\t\twchar_t picpath[260];\r\n\t\twchar_t selfwxid[50];\r\n\t\twchar_t recverwxid[50];\r\n\t}xmlartmsg;\r\n};\r\n\r\n\r\n//ϢĽṹ\r\nstruct PersonalInformation\r\n{\r\n\twchar_t wxid[40];\t\t\t//΢ID\r\n\twchar_t wxcount[40];\t\t//΢˺\r\n\twchar_t v1[150];\t\t\t//V1\r\n\twchar_t nickname[50];\t\t//΢ǳ\r\n\twchar_t remark[50];\t\t\t//ע\r\n\twchar_t wxsex[10];\t\t\t//Ա\r\n\twchar_t phonenumber[30];\t//ֻ\r\n\twchar_t device[20];\t\t\t//½豸\r\n\twchar_t nation[20];\t\t\t//\r\n\twchar_t province[20];\t\t//ʡ\r\n\twchar_t city[20];\t\t\t//\r\n\twchar_t area[20];\t\t\t//\r\n\twchar_t language[10];\t\t//\r\n\twchar_t bigheader[0x100];\t//ͷ\r\n\twchar_t smallheader[0x100];\t//Сͷ\r\n\twchar_t signature[50];\t\t//ǩ\r\n\twchar_t background[0x100];\t//Ȧ\r\n\twchar_t cachedir[MAX_PATH];\t//Ŀ¼\r\n\twchar_t startdir[MAX_PATH];\t//Ŀ¼\r\n};\r\n\r\n\r\n//޸ıעṹ 0x22Bλñ1\r\nstruct SetRemarkStruct\r\n{\r\n\tint full1 = 0x800;\t\t\t//4\r\n\tint full2 = 0;\t\t\t\t//8\r\n\twchar_t* UnicodeWxid;\t\t//0xC\r\n\tint UnicodeWxidLen;\t\t\t//0x10\r\n\tint UnicodeWxidMaxLen;\t\t//0x14\r\n\tint full5 = 0;\t\t\t\t//0x18\r\n\tint full6 = 0;\t\t\t\t//0x1C\r\n\tchar full3[0x34] = { 0 };\t//0x20\r\n\twchar_t* Remark;\t\t\t//0x54\r\n\tint RemarkLen;\t\t\t\t//0x58\r\n\tint RemarkMaxLen;\t\t\t//0x5C\r\n\tint full7 = 0;\t\t\t\t//0x60\r\n\tint full8 = 0;\t\t\t\t//0x64\r\n\tchar full9[0x1C3] = { 0 };\t//0x68\r\n\tint full10 = 1;\t\t\t\t//0x228\r\n\tchar full11[0x259] = { 0 };\t//0x68\r\n};\r\n\r\n\r\n//¼Ϣṹ\r\nstruct ChatMessageData\r\n{\r\n\tDWORD dwtype;\t\t\t\t//Ϣ\r\n\twchar_t sztype[0x20];\t\t\t//Ϣ\r\n\twchar_t source[0x400];\t\t\t//ϢԴ\r\n\twchar_t wxid[0x40];\t\t\t//΢ID/ȺID\r\n\twchar_t wxname[0x200];\t\t\t//΢/Ⱥ\r\n\twchar_t sender[0x100];\t\t\t//Ϣ\r\n\twchar_t sendername[0x100];\t\t//Ϣǳ\r\n\twchar_t content[0x5000];\t//Ϣ\r\n};\r\n\r\n//V1\r\nstruct v1Info\r\n{\r\n\tint fill = 0;\r\n\twchar_t* v1 = 0;\r\n\tint v1Len;\r\n\tint maxV1Len;\r\n\tchar fill2[0x41C] = { 0 };\r\n\tDWORD v2 = { 0 };\r\n};\r\n\r\n//V2\r\nstruct v2Info\r\n{\r\n\tchar fill[0x24C] = { 0 };\r\n\tDWORD fill3 = 0x25;\r\n\tchar fill4[0x40] = { 0 };\r\n\twchar_t* v2;\r\n\tint v2Len;\r\n\tint maxV2Len;\r\n\tchar fill2[0x8] = { 0 };\r\n};\r\n\r\n\r\n//տṹ\r\nstruct CllectMoneyStruct\r\n{\r\n\twchar_t* ptransferid;\r\n\tint transferidLen;\r\n\tint transferidMaxLen;\r\n\tchar full[0x8] = { 0 };\r\n\twchar_t* pwxid;\r\n\tint wxidLen;\r\n\tint wxidMaxLen;\r\n\tchar full2[0x8] = { 0 };\r\n};\r\n\r\n\r\n//ͼƬṹ\r\nstruct DwonImgStruct\r\n{\r\n\t//92C\r\n\tchar fill[0x14] = { 0 };\r\n\tDWORD params = 0;\r\n\tDWORD params1 = 0;\r\n\tchar fill2[0x10] = { 0 };\r\n\tDWORD params2 = 0;\r\n\tchar fill3[0x38] = { 0 };\r\n\twchar_t * imgXml;\r\n\tint xmlLen = 0;\r\n\tint xmlMaxLen = 0;\r\n\tchar fill4[0xC8] = { 0 };\r\n\twchar_t * thumbImgPath;\r\n\tint thumbLen = 0;\r\n\tint thumbMaxLen = 0;\r\n\tchar fill5[0x8] = { 0 };\r\n\twchar_t * hImgPath;\r\n\tint hImgLen = 0;\r\n\tint hImgMaxLen = 0;\r\n\tchar fill6[0x700] = { 0 };\r\n};\r\n\r\n//ͨ΢IDȡûϢṹ\r\nstruct UserInfo\r\n{\r\n\twchar_t UserId[0x100];\r\n\twchar_t UserNumber[0x100];\r\n\twchar_t UserNickName[0x100];\r\n};\r\n\r\n\r\n//бϢṹ\r\nstruct UserListInfo\r\n{\r\n\twchar_t UserId[80];\r\n\twchar_t UserNumber[80];\r\n\twchar_t UserRemark[80];\r\n\twchar_t UserNickName[80];\r\n};\r\n\r\n//ϸϢ\r\nstruct UserInfoDetail\r\n{\r\n\twchar_t UserId[50];\t\t\t//΢ID\r\n\twchar_t UserNumber[50];\t\t//΢˺\r\n\twchar_t V1[200];\t\t\t\t//V1\r\n\twchar_t Remark[50];\t\t\t//ע\r\n\twchar_t UserNickName[50];\t//΢ǳ\r\n\twchar_t smallHeader[1024] = { 0 };\t//Сͷ\r\n\twchar_t bigHeader[1024] = { 0 };\t//ͷ\r\n};\r\n\r\n//ȺȺIDṹ\r\nstruct RoomIdStruct\r\n{\r\n\tchar fill2[0x8] = { 0 };\r\n\twchar_t* str;\r\n\tint strLen = 0;\r\n\tint maxLen = 0;\r\n\tchar fill[0x8] = { 0 };\r\n};\r\n\r\n\r\n\r\n"
  },
  {
    "path": "WeChatHelper/dllmain.cpp",
    "content": "﻿// dllmain.cpp : 定义 DLL 应用程序的入口点。\r\n#include \"stdafx.h\"\r\n#include \"WndMsgLoop.h\"\r\n\r\n\r\n\r\nBOOL APIENTRY DllMain( HMODULE hModule,\r\n                       DWORD  ul_reason_for_call,\r\n                       LPVOID lpReserved\r\n                     )\r\n{\r\n    switch (ul_reason_for_call)\r\n    {\r\n    case DLL_PROCESS_ATTACH:\r\n\t{\r\n\t\t//启动线程来初始化界面\r\n\t\tHANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)InitWindow, hModule, 0, NULL);\r\n\t\tCloseHandle(hThread);\r\n\t}\r\n\t\tbreak;\r\n    case DLL_THREAD_ATTACH:\r\n    case DLL_THREAD_DETACH:\r\n    case DLL_PROCESS_DETACH:\r\n        break;\r\n    }\r\n    return TRUE;\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatHelper/message.h",
    "content": "#pragma once\r\n\r\n\r\n#define WM_Login 0\r\n#define WM_ShowQrPicture 1\r\n#define WM_Logout 2\r\n#define WM_GetFriendList 3\r\n#define WM_ShowChatRecord 4\r\n#define WM_SendTextMessage 5\r\n#define WM_SendFileMessage 6\r\n#define WM_GetInformation 7\r\n#define WM_SendImageMessage 8\r\n#define WM_SetRoomAnnouncement 9\r\n#define WM_DeleteUser 10\r\n#define WM_QuitChatRoom 11\r\n#define WM_AddGroupMember 12\r\n#define WM_SendXmlCard 13\r\n#define WM_ShowChatRoomMembers 14\r\n#define WM_ShowChatRoomMembersDone 15\r\n#define WM_DecryptDatabase 16\r\n#define WM_AddUser 17\r\n#define WM_SetRoomName 18\r\n#define WM_AutoChat 19\r\n#define WM_CancleAutoChat 20\r\n#define WM_AlreadyLogin 21\r\n#define WM_SendAtMsg 22\r\n#define WM_DelRoomMember 23\r\n#define WM_OpenUrl 24\r\n#define WM_InviteGroupMember 26\r\n#define WM_SendXmlArticle 27\r\n#define WM_GetFriendInfomations 28\r\n#define WM_TimerToSend 29\r\n#define WM_CancelTimerToSend 30\r\n#define WM_SetRemark 31\r\n#define WM_CreateChatRoom 32\r\n#define WM_ModifyVersion 33\r\n#define WM_DecodeImage 34\r\n#define WM_SendVideoMessage 35\r\n#define WM_SendGifMessage 36\r\n#define WM_TopMsg 37\r\n#define WM_CancleTopMsg 38\r\n#define WM_OpenNewMsgNotify 39\r\n#define WM_MsgNoDisturb 40\r\n#define WM_FollowPublicAccount 41\r\n#define WM_KeywordsReplyOpen 43\r\n#define WM_KeywordsReplyClose 44\r\n\r\n\r\n#define WM_TimerID 888\r\n//΢ID\r\n#define ChatRobotWxID L\"gh_f0e9306d8d03\""
  },
  {
    "path": "WeChatHelper/offset.h",
    "content": "﻿#pragma once\r\n#define WxFriendList 0x5244A8\t\t\t\t\t//好友列表 1\r\n#define WxFriendListCall 0x64550\t\t\t\t//好友列表 1\r\n#define WxReciveMessage 0x3DF42C\t\t\t//接收消息 \t 1\r\n#define WxReciveMessageCall 0x87A70\t\t\t//接收消息 \t  1\r\n#define WxGoToQrCode1 0x264830\t\t\t\t//跳转到二维码 1\r\n#define WxGoToQrCode2 0x3ADE40\t\t\t\t//跳转到二维码 1\r\n#define WxQrCodeOffset 0x266AAC\t\t\t\t//获取二维码 1\r\n#define WxQrCodeOffsetCall 0x58BD30\t\t\t//获取二维码 1\r\n#define WxSendMessage 0x3B63B0\t\t\t\t//发送文本消息 1\r\n#define WxLogout 0x4E7210\t\t\t\t\t\t//退出 1\r\n#define WxFileMessage1 0x58DA10\t\t\t\t //发送文件消息 1\r\n#define WxFileMessage2 0x58DA50\t\t\t\t //发送文件消息 1\r\n#define WxFileMessage3 0x68D00\t\t\t\t //发送文件消息 1\r\n#define WxFileMessage4 0x2C1960\t\t\t\t //发送文件消息 1\r\n#define WxFileMessageParam 0x17FFE10\t\t //发送文件消息 1\r\n#define WxSendImageCall3 0x58DA50\t\t\t//发送图片消息 1\r\n#define WxSendImageCall1 0x639F0\t\t\t//发送图片消息 1\r\n#define WxSendImageCall2 0x3B5C70\t\t\t//发送图片消息 1\r\n#define WxPatchAddr 0x3B2AE6\t\t\t\t//发送图片消息 1\r\n#define WxSetRoomAnnouncement 0x3074E0\t\t\t//发送群公告 1\r\n#define WxDeleteUser 0x325C80\t\t\t\t\t//删除好友 1\r\n#define WxQuitChatRoom 0x3045B0\t\t\t\t\t//退出群聊 1\r\n#define WxAddGroupMemberCall1 0x827B0\t\t\t//添加群成员 1\r\n#define WxAddGroupMemberCall2 0x58DB60\t\t\t//添加群成员 1\r\n#define WxAddGroupMemberCall3 0x932D0\t\t\t//添加群成员 1\r\n#define WxAddGroupMemberCall4 0x2FF220\t\t\t//添加群成员 1\r\n#define WxAddGroupMemberParam1 0x1AD1B34\t\t//添加群成员 1\r\n#define WxAddGroupMemberParam2 0x1AD2358\t\t//添加群成员 1\r\n#define WxSendXmlCard 0x3B63B0\t\t\t\t//发送名片 1\r\n#define WxGetRoomUserWxidCall1 0x512DD0\t\t\t//获取群成员ID 1\r\n#define WxGetRoomUserWxidCall2 0x379A90\t\t\t//获取群成员ID 1\r\n#define WxGetRoomUserWxidCall3 0x5193F0\t\t\t//获取群成员ID 1\r\n#define WxGetRoomUserWxidCall4 0x5137F0\t\t\t//获取群成员ID 1\r\n#define WxGetUserInfoWithNoNetworkCall1 0x58DDD0\t\t //根据微信ID获取用户信息 1\r\n#define WxGetUserInfoWithNoNetworkCall2 0x3245E0\t\t //根据微信ID获取用户信息 1\r\n#define WxGetUserInfoWithNoNetworkCall3 0x4FD8F0\t\t //根据微信ID获取用户信息 1\r\n#define WxGetUserInfoByWxidCall1 0x58DA50\t\t//根据微信ID获取用户信息 1\r\n#define WxGetUserInfoByWxidCall2 0x63930\t\t//根据微信ID获取用户信息 1\r\n#define WxGetUserInfoByWxidCall3 0x3245E0\t\t//根据微信ID获取用户信息 1\r\n#define WxAddWxUserParam1 0x1730C30\t\t\t\t//添加好友 1\r\n#define WxAddWxUserCall1 0x57860\t\t\t\t//添加好友 1\r\n#define WxAddWxUserCall2 0x83780\t\t\t\t//添加好友 1\r\n#define WxAddWxUserCall3 0x58DA10\t\t\t\t//添加好友 1\r\n#define WxAddWxUserCall4 0x58DA50\t\t\t\t//添加好友 1\r\n#define WxAddWxUserCall5 0x322B20\t\t\t\t//添加好友 1\r\n#define WxSetRoomName 0x303A50\t\t\t\t\t//修改群名称 1\r\n#define WxCllectMoneyCall1 0x9C5310\t\t\t\t//收款 1\r\n#define WxCllectMoneyCall2 0x9C5390\t\t\t\t//收款 1\r\n#define WxAgreeUserRequestCall1 0x1F0360\t\t//同意好友请求 1\r\n#define WxAgreeUserRequestCall2 0x5D860\t\t\t//同意好友请求 1\r\n#define WxAgreeUserRequestCall3 0x10FFA0\t\t//同意好友请求 1\r\n#define WxAgreeUserRequestCall4 0x1D7180\t\t//同意好友请求 1\r\n#define WxAgreeUserRequestParam 0x1AB2E98\t\t//同意好友请求 1\r\n#define WxGetExpressionsAddr 0x2D3C68\t\t\t//提取微信表情  没啥用 去除\r\n#define WxGetExpressionsCallAddr 0x2D7E60\t\t//提取微信表情  没啥用 去除\r\n#define WxDelRoomMemberCall1 0x58DA50\t\t\t//删除群成员 1\r\n#define WxDelRoomMemberCall2 0x7CD80\t\t\t//删除群成员 1\r\n#define WxDelRoomMemberCall3 0x2FF410\t\t\t//删除群成员 1\r\n#define WxOpenUrlCall1 0x58DA50\t\t\t\t\t//打开浏览器 1\r\n#define WxOpenUrlCall2 0x9C9CA0\t\t\t\t\t//打开浏览器 1\r\n#define WxPackageMsgData 0x827B0\t\t//组装艾特消息数据结构 1\r\n#define WxAntiRevoke 0x3DED99\t\t\t//防撤回 1\r\n//聊天记录偏移\r\n#define MsgTypeOffset 0x30\t\t\t\t//消息类型的偏移 \r\n#define MsgContentOffset 0x68\t\t\t//消息内容的偏移 \r\n#define MsgSourceOffset 0x1B8\t\t\t//消息来源的偏移 \r\n#define WxidOffset 0x40\t\t\t\t\t//微信ID/群ID偏移 \t\r\n#define GroupMsgSenderOffset 0x164\t\t//群消息发送者偏移 \r\n//个人信息 基址 \r\n#define WxSelfInfoBase 0x1AD1AF0\t\t\t\t// 1\r\n// 登陆标志位 \r\n#define LoginSign_Offset 0x1AD4858\t// 1\r\n//微信ID ASCII指针\r\n#define WxID WxSelfInfoBase+0x44\t//\r\n//大头像 ASCII指针\r\n#define WxBigHeader WxSelfInfoBase+0x384\t//\r\n//小头像 ASCII指针\r\n#define WxSmallHeader WxSelfInfoBase+0x39C\t//\r\n//国家 ASCII字符\r\n#define WxNation WxSelfInfoBase+0x298\t\t//\r\n//微信号 ASCII字符\r\n#define WxCount WxSelfInfoBase+0x220\t\t//\r\n//城市 ASCII字符\r\n#define WxProvince WxSelfInfoBase+0x1A8\t\t//\r\n//地区  ASCII字符\r\n#define WxCity WxSelfInfoBase+0x1C0\t\t\t//\r\n//手机号 ASCII字符\r\n#define WxPhoneNumber WxSelfInfoBase+0xF0   //\r\n//昵称 ASCII字符\r\n#define WxNickName WxSelfInfoBase+0xBC\t\t//\r\n//缓存目录  Unicode指针\r\n#define WxCacheDir WxSelfInfoBase+0x10\t\t//\r\n//登陆设备 ASCII字符\r\n#define WxDevice WxSelfInfoBase+0x510\t\t//\r\n//性别 \r\n#define WxSex WxSelfInfoBase+0x1A4\t\t\t//\r\n"
  },
  {
    "path": "WeChatHelper/stdafx.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"message.h\"\r\n"
  },
  {
    "path": "WeChatHelper/stdafx.h",
    "content": "﻿// stdafx.h: 标准系统包含文件的包含文件，\r\n// 或是经常使用但不常更改的\r\n// 项目特定的包含文件\r\n//\r\n\r\n#pragma once\r\n\r\n#include \"targetver.h\"\r\n\r\n#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容\r\n// Windows 头文件\r\n#include <windows.h>\r\n#include <string>\r\n#include <stdio.h>\r\n#include \"offset.h\"\r\n#include \"data.h\"\r\n#include \"message.h\"\r\n#include \"CPublic.h\"\r\n#include <memory>\r\nusing namespace std;\r\n\r\n\r\n\r\n// 在此处引用程序需要的其他标头\r\n"
  },
  {
    "path": "WeChatHelper/targetver.h",
    "content": "﻿#pragma once\r\n\r\n// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。\r\n\r\n// 如果要为以前的 Windows 平台生成应用程序，请包括 WinSDKVer.h，并\r\n// 将 _WIN32_WINNT 宏设置为要支持的平台，然后再包括 SDKDDKVer.h。\r\n\r\n#include <SDKDDKVer.h>\r\n"
  },
  {
    "path": "WeChatRobot/CAboutAuthor.cpp",
    "content": "﻿// CAboutAuthor.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CAboutAuthor.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CAboutAuthor 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CAboutAuthor, CDialogEx)\r\n\r\nCAboutAuthor::CAboutAuthor(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_ABOUT_AUTHOR, pParent)\r\n\t, m_kanxue(_T(\"\"))\r\n\t, m_wuaipojie(_T(\"\"))\r\n\t, m_csdn(_T(\"\"))\r\n\t, m_email(_T(\"\"))\r\n\t, m_github(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCAboutAuthor::~CAboutAuthor()\r\n{\r\n}\r\n\r\nvoid CAboutAuthor::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_kanxue);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_wuaipojie);\r\n\tDDX_Text(pDX, IDC_EDIT3, m_csdn);\r\n\tDDX_Text(pDX, IDC_EDIT4, m_email);\r\n\tDDX_Text(pDX, IDC_EDIT5, m_github);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CAboutAuthor, CDialogEx)\r\n\tON_WM_DESTROY()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CAboutAuthor 消息处理程序\r\n\r\n\r\nBOOL CAboutAuthor::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\tm_kanxue = L\"鬼手56\";\r\n\tm_wuaipojie = L\"鬼手56\";\r\n\tm_github = L\"https://github.com/TonyChen56\";\r\n\tm_csdn = L\"https://blog.csdn.net/qq_38474570\";\r\n\tm_email = L\"tonychen56@qq.com\";\r\n\tUpdateData(FALSE);\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CAboutAuthor.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CAboutAuthor 对话框\r\n\r\nclass CAboutAuthor : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CAboutAuthor)\r\n\r\npublic:\r\n\tCAboutAuthor(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CAboutAuthor();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ABOUT_AUTHOR };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tvirtual BOOL OnInitDialog();\r\n\tCString m_kanxue;\r\n\tCString m_wuaipojie;\r\n\tCString m_csdn;\r\n\tCString m_email;\r\n\tCString m_github;\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CAddChatRoomMember.cpp",
    "content": "﻿// CAddChatRoomMember.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CAddChatRoomMember.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CAddChatRoomMember 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CAddChatRoomMember, CDialogEx)\r\n\r\nCAddChatRoomMember::CAddChatRoomMember(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_ADD_MEMBER, pParent), m_ChatRoomWxid(TempWxid)\r\n\t, m_wxid(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCAddChatRoomMember::~CAddChatRoomMember()\r\n{\r\n}\r\n\r\nvoid CAddChatRoomMember::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_ChatRoomWXID, m_wxid);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CAddChatRoomMember, CDialogEx)\r\n\tON_BN_CLICKED(IDC_MAKE_SURE, &CAddChatRoomMember::OnBnClickedMakeSure)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedMakeSure\r\n// 函数说明: 响应确定按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CAddChatRoomMember::OnBnClickedMakeSure()\r\n{\r\n\tUpdateData(TRUE);\r\n\r\n\tMessageStruct* addgroupmember = new MessageStruct(m_ChatRoomWxid, m_wxid);\r\n\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT addgroupdata;\r\n\taddgroupdata.dwData = WM_AddGroupMember;\r\n\taddgroupdata.cbData = sizeof(MessageStruct);\r\n\taddgroupdata.lpData = addgroupmember;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&addgroupdata);\r\n\r\n\tdelete addgroupmember;\r\n\tm_wxid = \"\";\r\n\tUpdateData(FALSE);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CAddChatRoomMember.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CAddChatRoomMember 对话框\r\n\r\nclass CAddChatRoomMember : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CAddChatRoomMember)\r\n\r\npublic:\r\n\tCAddChatRoomMember(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CAddChatRoomMember();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ADD_MEMBER };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_wxid;\t\t\t\t//用户输入的微信ID\r\n\tCString m_ChatRoomWxid;\t\t//从好友列表窗口传过来的群ID\r\n\tafx_msg void OnBnClickedMakeSure();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CAddUser.cpp",
    "content": "﻿// CAddUser.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CAddUser.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CAddUser 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CAddUser, CDialogEx)\r\n\r\nCAddUser::CAddUser(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_ADD_USER, pParent)\r\n\t, m_wxid(_T(\"wxid_fineonxis3f012\"))\r\n\t, m_content(_T(\"添加好友测试\"))\r\n{\r\n\r\n}\r\n\r\nCAddUser::~CAddUser()\r\n{\r\n}\r\n\r\nvoid CAddUser::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_wxid);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_content);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CAddUser, CDialogEx)\r\n\tON_BN_CLICKED(IDC_ADD_USER, &CAddUser::OnBnClickedAddUser)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CAddUser 消息处理程序\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedAddUser\r\n// 函数说明: 响应添加好友按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/13\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CAddUser::OnBnClickedAddUser()\r\n{\r\n\tUpdateData(TRUE);\r\n\r\n\tMessageStruct* addUser = new MessageStruct(m_wxid, m_content);\r\n\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT adduserdata;\r\n\tadduserdata.dwData = WM_AddUser;\r\n\tadduserdata.cbData = sizeof(MessageStruct);\r\n\tadduserdata.lpData = addUser;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&adduserdata);\r\n\r\n\tm_wxid = \"\";\r\n\tm_content = \"\";\r\n\tUpdateData(FALSE);\r\n\tdelete addUser;\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CAddUser.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CAddUser 对话框\r\n\r\nclass CAddUser : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CAddUser)\r\n\r\npublic:\r\n\tCAddUser(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CAddUser();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ADD_USER };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_wxid;\r\n\tCString m_content;\r\n\tafx_msg void OnBnClickedAddUser();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CChatRecords.cpp",
    "content": "﻿// CChatRecords.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CChatRecords.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CChatRecords.h\"\r\n#include \"afxdialogex.h\"\r\n#include <iostream>\r\n#include <string>\r\n#include <string.h>\r\n#include <locale.h>\r\n#include <assert.h>\r\n#include <afxwin.h>\r\n#include <stdio.h>\r\n#include <windows.h>\r\n#include \"Wininet.h\"\r\n#pragma comment(lib,\"Wininet.lib\")\r\n#include <fstream>\r\n#include <mmsystem.h>   //多媒体播放所需的头文件\r\n#pragma comment(lib,\"winmm.lib\")  //多媒体播放所需的库文件\r\n\r\nDWORD g_index=0;\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: string_To_UTF8\r\n// 函数说明: string转UTF8\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/7\r\n// 参    数: str 需要转换的字符串\r\n// 返 回 值: string 转换后的字符串\r\n//***********************************************************\r\nstd::string string_To_UTF8(const std::string & str)\r\n{\r\n\tint nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);\r\n\r\n\twchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1，不然会出现尾巴 \r\n\tZeroMemory(pwBuf, nwLen * 2 + 2);\r\n\r\n\t::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);\r\n\r\n\tint nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);\r\n\r\n\tchar * pBuf = new char[nLen + 1];\r\n\tZeroMemory(pBuf, nLen + 1);\r\n\r\n\t::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);\r\n\r\n\tstd::string retStr(pBuf);\r\n\r\n\tdelete[]pwBuf;\r\n\tdelete[]pBuf;\r\n\r\n\tpwBuf = NULL;\r\n\tpBuf = NULL;\r\n\r\n\treturn retStr;\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: Wchar_tToString\r\n// 函数说明: wchar转string\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/7\r\n// 参    数: wchar 需要转换的字符串\r\n// 返 回 值: string 转换后的字符串\r\n//***********************************************************\r\nstd::string Wchar_tToString(wchar_t *wchar)\r\n{\r\n\tstd::string szDst;\r\n\twchar_t * wText = wchar;\r\n\tDWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, NULL, 0, NULL, FALSE);// WideCharToMultiByte的运用\r\n\tchar *psText; // psText为char*的临时数组，作为赋值给std::string的中间变量\r\n\tpsText = new char[dwNum];\r\n\tWideCharToMultiByte(CP_OEMCP, NULL, wText, -1, psText, dwNum, NULL, FALSE);// WideCharToMultiByte的再次运用\r\n\tszDst = psText;// std::string赋值\r\n\tdelete[]psText;// psText的清除\r\n\treturn szDst;\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: StringToWchar_t\r\n// 函数说明: string转wchar\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/7\r\n// 参    数: str 需要转换的字符串\r\n// 返 回 值: wchar_t* 转换后的字符串\r\n//***********************************************************\r\nwchar_t * StringToWchar_t(const std::string & str)\r\n{\r\n\twchar_t * m_chatroommmsg = new wchar_t[str.size() * 2];  //\r\n\tmemset(m_chatroommmsg, 0, str.size() * 2);\r\n\tsetlocale(LC_ALL, \"zh_CN.UTF-8\");\r\n\tswprintf(m_chatroommmsg, str.size() * 2, L\"%S\", str.c_str());\r\n\r\n\treturn m_chatroommmsg;\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: Log\r\n// 函数说明: 记录聊天记录到本地\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/7\r\n// 参    数: type 消息类型 wxid微信ID source消息来源 msgSender消息发送者 content消息内容\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid Log(const std::string & type, const std::string & wxid, const std::string & source, const std::string & msgSender, const std::string & content)\r\n{\r\n\tsetlocale(LC_ALL, \"zh_CN.UTF-8\");\r\n\ttime_t t = time(0);\r\n\tchar ch[64];\r\n\tstrftime(ch, sizeof(ch), \"%Y-%m-%d %H-%M-%S\", localtime(&t)); //年-月-日 时-分-秒\r\n\tstd::string times = ch;\r\n\tstd::string log;\r\n\tif (strstr(msgSender.c_str(), \"NULL\") != NULL) \r\n\t{\r\n\t\tlog = string_To_UTF8(\r\n\t\t\t\"************************ \" + times + \" ************************\" +\r\n\t\t\t\"\\n\" + \"消息类型：\" + type +\r\n\t\t\t\"\\n\" + \"消息来源：\" + source +\r\n\t\t\t\"\\n\" + \"微信昵称：\" + wxid +\r\n\t\t\t\"\\n\" + \"消息内容：\" + content +\r\n\t\t\t\"\\n\" + \"-------------------------------- 分割线 --------------------------------\\n\\n\\n\"\r\n\t\t);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tlog = string_To_UTF8(\r\n\t\t\t\"************************ \" + times + \" ************************\" +\r\n\t\t\t\"\\n\" + \"消息类型：\" + type +\r\n\t\t\t\"\\n\" + \"消息来源：\" + source +\r\n\t\t\t\"\\n\" + \"群名称：\" + wxid +\r\n\t\t\t\"\\n\" + \"群发送者：\" + msgSender +\r\n\t\t\t\"\\n\" + \"消息内容：\" + content +\r\n\t\t\t\"\\n\" + \"-------------------------------- 分割线 --------------------------------\\n\\n\\n\"\r\n\t\t);\r\n\t}\r\n\t\r\n\r\n\tFILE * fp = fopen(\"log.txt\", \"ab+\");\r\n\tfwrite(log.c_str(), log.length(), 1, fp);\r\n\tfclose(fp);\r\n}\r\n\r\n\r\n\r\nIMPLEMENT_DYNAMIC(CChatRecords, CDialogEx)\r\n\r\nCChatRecords::CChatRecords(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_CHAT_RECORDS, pParent)\r\n{\r\n\r\n}\r\n\r\nCChatRecords::~CChatRecords()\r\n{\r\n}\r\n\r\nvoid CChatRecords::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Control(pDX, IDC_LIST1, m_ChatRecord);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CChatRecords, CDialogEx)\r\n\tON_WM_COPYDATA()\r\n\tON_MESSAGE(WM_ShowMessage, &CChatRecords::OnShowmessage)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CChatRecords 消息处理程序\r\n\r\n\r\nBOOL CChatRecords::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\tm_ChatRecord.InsertColumn(0, L\"消息类型\", 0, 100);\r\n\tm_ChatRecord.InsertColumn(1, L\"消息来源\", 0, 100);\r\n\tm_ChatRecord.InsertColumn(2, L\"微信昵称/群名称\", 0, 150);\r\n\tm_ChatRecord.InsertColumn(3, L\"群发送者\", 0, 150);\r\n\tm_ChatRecord.InsertColumn(4, L\"消息内容\", 0, 465);\r\n\tm_ChatRecord.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnShowmessage\r\n// 函数说明: 响应Showmessage消息 处理父窗口发过来的消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: WPARAM wParam, LPARAM lParam\r\n// 返 回 值: BOOL\r\n//***********************************************************\r\nafx_msg LRESULT CChatRecords::OnShowmessage(WPARAM wParam, LPARAM lParam)\r\n{\r\n\t//取数据\r\n\tChatMessageData *msg = (ChatMessageData*)wParam;\r\n\r\n\t//显示到控件\r\n\tm_ChatRecord.InsertItem(g_index, msg->sztype);\r\n\tm_ChatRecord.SetItemText(g_index, 1, msg->source);\r\n\tm_ChatRecord.SetItemText(g_index, 2, msg->wxname);\r\n\tm_ChatRecord.SetItemText(g_index, 3, msg->sendername);\r\n\tm_ChatRecord.SetItemText(g_index, 4, msg->content);\r\n\r\n\r\n\t//保存聊天记录到本地\r\n\tstd::string type = Wchar_tToString(msg->sztype);\r\n\tstd::string wxid = Wchar_tToString(msg->wxname);\r\n\tstd::string source = Wchar_tToString(msg->source);\r\n\tstd::string msgSender = Wchar_tToString(msg->sendername);\r\n\tstd::string content = Wchar_tToString(msg->content);\r\n\tLog(type.c_str(), wxid.c_str(), source.c_str(), msgSender.c_str(), content.c_str());\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CChatRecords.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CChatRecords 对话框\r\n\r\nclass CChatRecords : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CChatRecords)\r\n\r\npublic:\r\n\tCChatRecords(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CChatRecords();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_CHAT_RECORDS };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCListCtrl m_ChatRecord;\r\n\tvirtual BOOL OnInitDialog();\r\nprotected:\r\n\tafx_msg LRESULT OnShowmessage(WPARAM wParam, LPARAM lParam);\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CChatRoomMember.cpp",
    "content": "﻿// CChatRoomMember.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CChatRoomMember.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"CSendChatRoomAt.h\"\r\n\r\n\r\n\r\nwchar_t memberwxid[50] = { 0 };\t\t\t//群成员的微信ID\r\nwchar_t membernickname[50] = { 0 };\t\t//群成员的微信昵称\r\n\r\n\r\nint nSelected = 0;\t//选中行的行号 \r\n\r\n// CChatRoomMember 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CChatRoomMember, CDialogEx)\r\n\r\nCChatRoomMember::CChatRoomMember(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_CHATROOM_MEMBER, pParent), m_ChatRoomWxid(TempWxid)\r\n{\r\n\r\n}\r\n\r\nCChatRoomMember::~CChatRoomMember()\r\n{\r\n}\r\n\r\nvoid CChatRoomMember::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Control(pDX, IDC_LIST1, m_ChatRoomMembers);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CChatRoomMember, CDialogEx)\r\n\tON_WM_COPYDATA()\r\n\tON_NOTIFY(NM_CLICK, IDC_LIST1, &CChatRoomMember::OnClickList1)\r\n\tON_NOTIFY(NM_RCLICK, IDC_LIST1, &CChatRoomMember::OnRclickList1)\r\n\tON_COMMAND(ID_32795, &CChatRoomMember::OnSendChatRoomAt)\r\n\tON_COMMAND(ID_32796, &CChatRoomMember::OnCopyWxid)\r\n\tON_COMMAND(ID_32797, &CChatRoomMember::OnDelRoomMember)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CChatRoomMember 消息处理程序\r\n\r\n\r\nBOOL CChatRoomMember::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\tm_ChatRoomMembers.InsertColumn(0, L\"序号\", 0, 100);\r\n\tm_ChatRoomMembers.InsertColumn(1, L\"微信ID\", 0, 200);\r\n\tm_ChatRoomMembers.InsertColumn(2, L\"微信号\", 0, 200);\r\n\tm_ChatRoomMembers.InsertColumn(3, L\"昵称\", 0, 200);\t\r\n\tm_ChatRoomMembers.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);\r\n\r\n\t//拷贝群成员微信ID\r\n\twchar_t memberwxid[50] = { 0 };\r\n\twcscpy_s(memberwxid, wcslen(m_ChatRoomWxid) + 1, m_ChatRoomWxid);\r\n\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT show_members;\r\n\tshow_members.dwData = WM_ShowChatRoomMembers;\r\n\tshow_members.cbData = (wcslen(memberwxid) + 1) * 2;\r\n\tshow_members.lpData = memberwxid;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&show_members);\r\n\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n\r\nBOOL CChatRoomMember::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)\r\n{\r\n\tstatic DWORD dwIndex = 0;\r\n\tif (pCopyDataStruct->dwData == WM_ShowChatRoomMembers)\r\n\t{\r\n\t\tChatRoomMemberInfo *user = (ChatRoomMemberInfo*)pCopyDataStruct->lpData;\r\n\t\r\n\t\tCString index;\r\n\t\tindex.Format(L\"%d\", dwIndex+1);\r\n\t\t//显示序号\r\n\t\tm_ChatRoomMembers.InsertItem(dwIndex, index);\r\n\t\t//显示微信ID\r\n\t\tm_ChatRoomMembers.SetItemText(dwIndex, 1, user->UserId);\r\n\t\t//显示微信号\r\n\t\tm_ChatRoomMembers.SetItemText(dwIndex, 2, user->UserNumber);\r\n\t\t//显示微信昵称\r\n\t\tm_ChatRoomMembers.SetItemText(dwIndex, 3, user->UserNickName);\r\n\t\tdwIndex++;\r\n\t}\r\n\telse if (pCopyDataStruct->dwData == WM_ShowChatRoomMembersDone)\r\n\t{\r\n\t\t//把序号清零\r\n\t\tdwIndex = 0;\r\n\t}\r\n\treturn CDialogEx::OnCopyData(pWnd, pCopyDataStruct);\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnRclickFriendlist\r\n// 函数说明: 响应List控件的左键点击消息 \r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/23\r\n// 参    数: pNMHDR pResult\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CChatRoomMember::OnClickList1(NMHDR *pNMHDR, LRESULT *pResult)\r\n{\r\n\tLPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r\n\t\r\n\t//拿到微信ID和微信昵称\r\n\tmemcpy(memberwxid, m_ChatRoomMembers.GetItemText(pNMItemActivate->iItem, 1), 40);\r\n\tmemcpy(membernickname, m_ChatRoomMembers.GetItemText(pNMItemActivate->iItem, 3), 40);\r\n\r\n\r\n\tPOSITION p = m_ChatRoomMembers.GetFirstSelectedItemPosition(); //获取选中行位置\r\n\tnSelected = m_ChatRoomMembers.GetNextSelectedItem(p); //获取选中行的索引\r\n\r\n\t*pResult = 0;\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnRclickList1\r\n// 函数说明: 响应List控件的右键点击消息 \r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/23\r\n// 参    数: pNMHDR pResult\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CChatRoomMember::OnRclickList1(NMHDR *pNMHDR, LRESULT *pResult)\r\n{\r\n\tLPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r\n\t//弹出好友相关的菜单\r\n\tCMenu m_Menu, *tMenu;\r\n\tm_Menu.LoadMenu(IDR_MENU2);\r\n\r\n\t//拿到第0个下拉菜单(菜单可能有很多列 这个函数是拿到第几列)\r\n\ttMenu = m_Menu.GetSubMenu(2);\r\n\r\n\t//获取鼠标位置\r\n\tCPoint pt;\r\n\tGetCursorPos(&pt);\r\n\r\n\t//弹出菜单\r\n\tTrackPopupMenu(tMenu->m_hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, m_hWnd, 0);\r\n\t*pResult = 0;\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSendChatRoomAt\r\n// 函数说明: 发送艾特消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/23\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CChatRoomMember::OnSendChatRoomAt()\r\n{\r\n\tunique_ptr<CSendChatRoomAt> sendat(new CSendChatRoomAt(memberwxid, membernickname, m_ChatRoomWxid));\r\n\tsendat->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCopyWxid\r\n// 函数说明: 复制微信ID\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/25\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CChatRoomMember::OnCopyWxid()\r\n{\r\n\tCString strText = memberwxid;\r\n\r\n\t//复制剪切板\r\n\tif (!strText.IsEmpty())\r\n\t{\r\n\t\tif (OpenClipboard())\r\n\t\t{\r\n\t\t\tTCHAR* pszData;\r\n\t\t\tHGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, (strText.GetLength() + 1) * sizeof(TCHAR));\r\n\t\t\tif (hClipboardData)\r\n\t\t\t{\r\n\t\t\t\tpszData = (TCHAR*)GlobalLock(hClipboardData);\r\n\t\t\t\t_tcscpy_s(pszData, wcslen(strText) + 1, strText);\r\n\t\t\t\tGlobalUnlock(hClipboardData);\r\n\t\t\t\tSetClipboardData(CF_UNICODETEXT, hClipboardData);//根据相应的数据选择第一个参数，（CF_TEXT）  \r\n\t\t\t}\r\n\t\t\tCloseClipboard();\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnDelRoomMember\r\n// 函数说明: 删除群成员\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/26\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CChatRoomMember::OnDelRoomMember()\r\n{\r\n\tif (MessageBoxA(NULL, \"是否删除群成员\", \"Tip\", MB_YESNO))\r\n\t{\r\n\r\n\t\tMessageStruct* pMember = new MessageStruct(m_ChatRoomWxid, memberwxid);\r\n\r\n\r\n\t\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\t\tCOPYDATASTRUCT delmemberdata;\r\n\t\tdelmemberdata.dwData = WM_DelRoomMember;\r\n\t\tdelmemberdata.cbData = sizeof(MessageStruct);\r\n\t\tdelmemberdata.lpData = pMember;\r\n\t\t//发送消息\r\n\t\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&delmemberdata);\r\n\r\n\t\tdelete pMember;\r\n\t\t//删除选中行\r\n\t\tm_ChatRoomMembers.DeleteItem(nSelected); //根据索引删除\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CChatRoomMember.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CChatRoomMember 对话框\r\n\r\nclass CChatRoomMember : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CChatRoomMember)\r\n\r\npublic:\r\n\tCChatRoomMember(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CChatRoomMember();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_CHATROOM_MEMBER };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\npublic:\r\n\tCString m_ChatRoomWxid;\t\t//从好友列表窗口传过来的群ID\r\n\tCListCtrl m_ChatRoomMembers;\r\n\tvirtual BOOL OnInitDialog();\r\n\tafx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);\r\n\tafx_msg void OnClickList1(NMHDR *pNMHDR, LRESULT *pResult);\r\n\tafx_msg void OnRclickList1(NMHDR *pNMHDR, LRESULT *pResult);\r\n\tafx_msg void OnSendChatRoomAt();\r\n\tafx_msg void OnCopyWxid();\r\n\tafx_msg void OnDelRoomMember();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CCreateChatRoom.cpp",
    "content": "﻿// CCreateChatRoom.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CCreateChatRoom.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n\r\nIMPLEMENT_DYNAMIC(CCreateChatRoom, CDialogEx)\r\n\r\nCCreateChatRoom::CCreateChatRoom(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_CreateChatRoom, pParent)\r\n\t, m_wxid1(_T(\"\"))\r\n\t, m_wxid2(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCCreateChatRoom::~CCreateChatRoom()\r\n{\r\n}\r\n\r\nvoid CCreateChatRoom::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_wxid1);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_wxid2);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CCreateChatRoom, CDialogEx)\r\n\tON_BN_CLICKED(IDC_CreateChatRoom, &CCreateChatRoom::OnBnClickedCreatechatroom)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CCreateChatRoom 消息处理程序\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedCreatechatroom\r\n// 函数说明: 创建群聊\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/22\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CCreateChatRoom::OnBnClickedCreatechatroom()\r\n{\r\n\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CCreateChatRoom.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CCreateChatRoom 对话框\r\n\r\nclass CCreateChatRoom : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CCreateChatRoom)\r\n\r\npublic:\r\n\tCCreateChatRoom(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CCreateChatRoom();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_CreateChatRoom };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_wxid1;\r\n\tCString m_wxid2;\r\n\tafx_msg void OnBnClickedCreatechatroom();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CDecryptImage.cpp",
    "content": "﻿// CDecryptImage.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CDecryptImage.h\"\r\n#include \"afxdialogex.h\"\r\n#include <stdio.h>\r\n#include <atlconv.h>\r\n#include <direct.h>\r\n\r\n\r\n// CDecryptImage 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CDecryptImage, CDialogEx)\r\n\r\nCDecryptImage::CDecryptImage(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_DECRYPT_IMAGE, pParent)\r\n\t, m_ImagePath(_T(\"\"))\r\n\t, m_ImageDirectory(_T(\"C:\\\\Users\\\\XXX\\\\Documents\\\\WeChat Files\\\\微信ID\\\\FileStorage\\\\Image\\\\日期\\\\(只是个图片目录 告诉你在哪 别特么改！)\"))\r\n\t, m_key(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCDecryptImage::~CDecryptImage()\r\n{\r\n}\r\n\r\nvoid CDecryptImage::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_ImagePath);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_ImageDirectory);\r\n\tDDX_Text(pDX, IDC_EDIT6, m_key);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CDecryptImage, CDialogEx)\r\n\tON_BN_CLICKED(IDC_DecryptImage, &CDecryptImage::OnBnClickedDecryptimage)\r\n\tON_WM_DROPFILES()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CDecryptImage 消息处理程序\r\n\r\n\r\nBOOL CDecryptImage::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedRadio1\r\n// 函数说明: 响应点击解密按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/8\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CDecryptImage::OnBnClickedDecryptimage()\r\n{\r\n\tUpdateData(TRUE);\r\n\r\n\t//检查文件是否存在\r\n\tif (GetFileAttributes(m_ImagePath) == INVALID_FILE_ATTRIBUTES)\r\n\t{\r\n\t\tMessageBox(L\"图片不存在 请重试\");\r\n\t\treturn;\r\n\t}\r\n\t\r\n\t//检测密钥是否存在\r\n\tif (m_key == \"\")\r\n\t{\r\n\t\tMessageBox(L\"密钥不能为空 请重试\");\r\n\t\treturn;\r\n\t}\r\n\r\n\t//打开文件\r\n\tHANDLE hFile = CreateFileW(m_ImagePath, GENERIC_ALL, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\r\n\tif (hFile == INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"打开文件失败\", \"错误\", 0);\r\n\t\treturn;\r\n\t}\r\n\r\n\t//获取文件大小\r\n\tDWORD dwSize = GetFileSize(hFile, NULL);\r\n\r\n\t//根据文件大小申请空间\r\n\tchar *lpBuff = new char[dwSize] {0};\r\n\r\n\t//读取文件到内存\r\n\tif (ReadFile(hFile, lpBuff, dwSize, NULL, NULL) == 0)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"读取文件失败\", \"错误\", 0);\r\n\t\treturn;\r\n\t}\r\n\r\n\tunsigned int hexkey = 0;\r\n\tUSES_CONVERSION;\r\n\tsscanf_s(W2A(m_key), \"%x\", &hexkey);\r\n\t//循环异或\r\n\tfor (DWORD i = 0; i < dwSize; i++)\r\n\t{\r\n\t\tlpBuff[i] ^= hexkey;\r\n\t}\r\n\t//关闭句柄\r\n\tCloseHandle(hFile);\r\n\r\n\twchar_t NewFilePath[MAX_PATH] = { 0 };\r\n\twcscpy_s(NewFilePath, wcslen(m_ImagePath) + 1, m_ImagePath);\r\n\tfor (DWORD i = wcslen(m_ImagePath); i > wcslen(m_ImagePath) - 4; i--)\r\n\t{\r\n\t\tNewFilePath[i] = 0;\r\n\t}\r\n\twcscat_s(NewFilePath, L\"png\");\r\n\r\n\t//打开文件\r\n\tHANDLE hNewFile = CreateFileW(NewFilePath, GENERIC_ALL, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\r\n\tif (hNewFile == INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"创建文件失败\", \"错误\", 0);\r\n\t\treturn;\r\n\t}\r\n\r\n\tWriteFile(hNewFile, lpBuff, dwSize, NULL, NULL);\r\n\tCloseHandle(hNewFile);\r\n\r\n\tMessageBoxA(NULL, \"解密成功 请在同目录下查看\", \"Tip\", MB_OK);\r\n\r\n\tm_ImagePath = \"\";\r\n\tUpdateData(FALSE);\r\n\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnDropFiles \r\n// 函数说明: 响应拖拽文件\r\n// 作\t 者: GuiShou\r\n// 时\t 间: 2019/7/8\r\n// 参\t 数: HDROP hDropInfo 拖拽文件句柄\r\n// 返 回 值: void\r\n//************************************************************\r\nvoid CDecryptImage::OnDropFiles(HDROP hDropInfo)\r\n{\r\n\t//获取文件路径\r\n\tTCHAR szPath[MAX_PATH] = { 0 };\r\n\tDragQueryFile(hDropInfo, 0, szPath, MAX_PATH);\r\n\r\n\t//显示到控件\r\n\tm_ImagePath = szPath;\r\n\r\n\tUpdateData(FALSE);\r\n\r\n\tCDialogEx::OnDropFiles(hDropInfo);\r\n}\r\n\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CDecryptImage.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CDecryptImage 对话框\r\n\r\nclass CDecryptImage : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CDecryptImage)\r\n\r\npublic:\r\n\tCDecryptImage(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CDecryptImage();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_DECRYPT_IMAGE };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tafx_msg void OnBnClickedDecryptimage();\r\n\tafx_msg void OnDropFiles(HDROP hDropInfo);\r\n\tCString m_ImagePath;\r\n\tCString m_ImageDirectory;\r\n\tvirtual BOOL OnInitDialog();\r\n\tCString m_key;\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CFollowAccount.cpp",
    "content": "﻿// CFollowAccount.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CFollowAccount.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CFollowAccount 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CFollowAccount, CDialogEx)\r\n\r\nCFollowAccount::CFollowAccount(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_FollowAccount, pParent)\r\n\t, m_accountid(_T(\"gh_f014862b32a9\"))\r\n{\r\n\r\n}\r\n\r\nCFollowAccount::~CFollowAccount()\r\n{\r\n}\r\n\r\nvoid CFollowAccount::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_accountid);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CFollowAccount, CDialogEx)\r\n\tON_BN_CLICKED(IDC_FOLLOW, &CFollowAccount::OnBnClickedFollow)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CFollowAccount 消息处理程序\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedFollow\r\n// 函数说明: 关注公众号\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/19\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFollowAccount::OnBnClickedFollow()\r\n{\r\n\t\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CFollowAccount.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CFollowAccount 对话框\r\n\r\nclass CFollowAccount : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CFollowAccount)\r\n\r\npublic:\r\n\tCFollowAccount(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CFollowAccount();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_FollowAccount };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_accountid;\r\n\tafx_msg void OnBnClickedFollow();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CFriendInfo.cpp",
    "content": "﻿// CFriendInfo.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CFriendInfo.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n\r\n\r\n// CFriendInfo 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CFriendInfo, CDialogEx)\r\n\r\nCFriendInfo::CFriendInfo(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_FRIENDINFO, pParent), m_Wxid(TempWxid)\r\n\t, m_wxid(_T(\"\"))\r\n\t, m_wxnumber(_T(\"\"))\r\n\t, m_wxv1(_T(\"\"))\r\n\t, m_wxremark(_T(\"\"))\r\n\t, m_wxnickname(_T(\"\"))\r\n\t, wxsmallheader(_T(\"\"))\r\n\t, wxbigheader(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCFriendInfo::~CFriendInfo()\r\n{\r\n}\r\n\r\nvoid CFriendInfo::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_wxid);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_wxnumber);\r\n\tDDX_Text(pDX, IDC_EDIT6, m_wxv1);\r\n\tDDX_Text(pDX, IDC_EDIT7, m_wxremark);\r\n\tDDX_Text(pDX, IDC_EDIT8, m_wxnickname);\r\n\tDDX_Text(pDX, IDC_EDIT9, wxsmallheader);\r\n\tDDX_Text(pDX, IDC_EDIT10, wxbigheader);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CFriendInfo, CDialogEx)\r\n\tON_WM_COPYDATA()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CFriendInfo 消息处理程序\r\n\r\n\r\nBOOL CFriendInfo::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\t\r\n\treturn TRUE;  \r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCopyData\r\n// 函数说明: 响应CopyData消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/9\r\n// 参    数: CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct\r\n// 返 回 值: BOOL\r\n//***********************************************************\r\nBOOL CFriendInfo::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)\r\n{\r\n\treturn CDialogEx::OnCopyData(pWnd, pCopyDataStruct);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CFriendInfo.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CFriendInfo 对话框\r\n\r\nclass CFriendInfo : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CFriendInfo)\r\n\r\npublic:\r\n\tCFriendInfo(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CFriendInfo();\r\n\r\n\tCString m_Wxid;\t\t//从好友列表窗口传过来的微信ID\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_FRIENDINFO };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tvirtual BOOL OnInitDialog();\r\n\tCString m_wxid;\r\n\tCString m_wxnumber;\r\n\tCString m_wxv1;\r\n\tCString m_wxremark;\r\n\tCString m_wxnickname;\r\n\tCString wxsmallheader;\r\n\tCString wxbigheader;\r\n\tafx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CFriendList.cpp",
    "content": "﻿// CFriendList.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CFriendList.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"CSendMsg.h\"\r\n#include \"CRoomAnnouncement.h\"\r\n#include \"CAddChatRoomMember.h\"\r\n#include \"CSendXmlCard.h\"\r\n#include \"CChatRoomMember.h\"\r\n#include \"CSetRoomName.h\"\r\n#include \"CInviteGroupMember.h\"\r\n#include \"CFriendInfo.h\"\r\n#include \"CSetRemark.h\"\r\n#include <time.h>\r\n#include <vector>\r\n#include <fstream>\r\n#include <atlconv.h>\r\n#include <map>\r\n\r\n\r\n\r\nDWORD dwIndex = 0;\r\nwchar_t wxid[50];\t//鼠标左键点击时拿到的微信ID\r\nvector<CString> g_wxidvector;\t\t\t\t\t//保存微信ID的容器\r\n\r\n//是否关注聊天机器人\r\nBOOL isAttentTuLing = FALSE;\r\n\r\nIMPLEMENT_DYNAMIC(CFriendList, CDialogEx)\r\n\r\nCFriendList::CFriendList(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_FRIEND_LIST, pParent)\r\n\t, m_GroupSendText(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCFriendList::~CFriendList()\r\n{\r\n}\r\n\r\nvoid CFriendList::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Control(pDX, IDC_FRIENDLIST, m_FriendList);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_GroupSendText);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CFriendList, CDialogEx)\r\n\tON_WM_COPYDATA()\r\n\tON_MESSAGE(WM_ShowFriendList, &CFriendList::OnShowfriendlist)\r\n\tON_NOTIFY(NM_RCLICK, IDC_FRIENDLIST, &CFriendList::OnRclickFriendlist)\r\n\tON_NOTIFY(NM_CLICK, IDC_FRIENDLIST, &CFriendList::OnClickFriendlist)\r\n\tON_COMMAND(ID_32780, &CFriendList::OnSendMsg)\r\n\tON_COMMAND(ID_32784, &CFriendList::OnSetRoomAnnouncement)\r\n\tON_COMMAND(ID_32782, &CFriendList::OnCopyWxid)\r\n\tON_COMMAND(ID_32785, &CFriendList::OnCopyWxid)\r\n\tON_COMMAND(ID_32781, &CFriendList::OnDeleteUser)\r\n\tON_COMMAND(ID_32786, &CFriendList::OnQuitChatRoom)\r\n\tON_COMMAND(ID_32787, &CFriendList::OnAddGroupMember)\r\n\tON_COMMAND(ID_32783, &CFriendList::OnSendMsg)\r\n\tON_COMMAND(ID_32788, &CFriendList::OnSendXmlCard)\r\n\tON_COMMAND(ID_32789, &CFriendList::OnShowChatRoomMember)\r\n\tON_COMMAND(ID_32790, &CFriendList::OnSetRoomName)\r\n\tON_COMMAND(ID_32799, &CFriendList::OnInviteGroupMember)\r\n\tON_COMMAND(ID_32804, &CFriendList::OnGetFriendInfo)\r\n\tON_BN_CLICKED(IDC_CheckAll, &CFriendList::OnBnClickedCheckall)\r\n\tON_BN_CLICKED(IDC_ReverseChoose, &CFriendList::OnBnClickedReversechoose)\r\n\tON_BN_CLICKED(IDC_CancelAll, &CFriendList::OnBnClickedCancelall)\r\n\tON_BN_CLICKED(IDC_GroupSend, &CFriendList::OnBnClickedGroupsend)\r\n\tON_COMMAND(ID_32805, &CFriendList::OnSetRemark)\r\n\tON_COMMAND(ID_32808, &CFriendList::OnTopMsg)\r\n\tON_COMMAND(ID_32810, &CFriendList::OnTopMsg)\r\n\tON_COMMAND(ID_32809, &CFriendList::OnCancleTopMsg)\r\n\tON_COMMAND(ID_32811, &CFriendList::OnCancleTopMsg)\r\n\tON_COMMAND(ID_32812, &CFriendList::OnOpenNewMsgNotify)\r\n\tON_COMMAND(ID_32814, &CFriendList::OnOpenNewMsgNotify)\r\n\tON_COMMAND(ID_32813, &CFriendList::OnMsgNoDisturb)\r\n\tON_COMMAND(ID_32815, &CFriendList::OnMsgNoDisturb)\r\n\tON_MESSAGE(SaveFriendList, &CFriendList::OnSavefriendlist)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CFriendList 消息处理程序\r\n\r\n\r\nBOOL CFriendList::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\tm_FriendList.InsertColumn(0, L\"序号\", 0, 50);\r\n\tm_FriendList.InsertColumn(1, L\"微信ID\", 0, 200);\r\n\tm_FriendList.InsertColumn(2, L\"微信号\", 0, 200);\r\n\tm_FriendList.InsertColumn(3, L\"昵称\", 0, 250);\r\n\tm_FriendList.InsertColumn(4, L\"备注\", 0, 253);\r\n\r\n\tm_FriendList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_EX_CHECKBOXES);\r\n\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnShowfriendlist\r\n// 函数说明: 响应Showfriendlist消息 处理父窗口发过来的联系人\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/5\r\n// 参    数: WPARAM wParam, LPARAM lParam\r\n// 返 回 值: BOOL\r\n//***********************************************************\r\nafx_msg LRESULT CFriendList::OnShowfriendlist(WPARAM wParam, LPARAM lParam)\r\n{\r\n\t//取数据\r\n\tUserInfo* userinfo = (UserInfo*)wParam;\r\n\tCString index;\r\n\tindex.Format(L\"%d\",dwIndex+1);\r\n\t//显示到List控件\r\n\t//检测联系人列表中是否有聊天机器人\r\n\tif (StrCmpW(userinfo->UserId,ChatRobotWxID)==0)\r\n\t{\r\n\t\tisAttentTuLing = TRUE;\r\n\t}\r\n\r\n\tm_FriendList.InsertItem(dwIndex, index);\r\n\tm_FriendList.SetItemText(dwIndex, 1, userinfo->UserId);\r\n\tm_FriendList.SetItemText(dwIndex, 2, userinfo->UserNumber);\r\n\tm_FriendList.SetItemText(dwIndex, 3, userinfo->UserNickName);\r\n\tm_FriendList.SetItemText(dwIndex, 4, userinfo->UserRemark);\r\n\tdwIndex++;\r\n\treturn 0;\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnRclickFriendlist\r\n// 函数说明: 响应List控件的右键点击消息 \r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: WPARAM wParam, LPARAM lParam\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnRclickFriendlist(NMHDR *pNMHDR, LRESULT *pResult)\r\n{\r\n\tLPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r\n\t\r\n\t//判断选中的是群ID还是个人微信ID\r\n\tif (StrStrW(wxid, L\"chatroom\") == NULL)\r\n\t{\r\n\t\t//弹出好友相关的菜单\r\n\t\tCMenu m_Menu, *tMenu;\r\n\t\tm_Menu.LoadMenu(IDR_MENU2);\r\n\r\n\t\t//拿到第0个下拉菜单(菜单可能有很多列 这个函数是拿到第几列)\r\n\t\ttMenu = m_Menu.GetSubMenu(0);\r\n\r\n\t\t//获取鼠标位置\r\n\t\tCPoint pt;\r\n\t\tGetCursorPos(&pt);\r\n\r\n\t\t//弹出菜单\r\n\t\tTrackPopupMenu(tMenu->m_hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, m_hWnd, 0);\r\n\r\n\t}\r\n\telse\r\n\t{\r\n\t\t//弹出群相关的菜单\r\n\t\tCMenu m_Menu, *tMenu;\r\n\t\tm_Menu.LoadMenu(IDR_MENU2);\r\n\r\n\t\t//拿到第0个下拉菜单(菜单可能有很多列 这个函数是拿到第几列)\r\n\t\ttMenu = m_Menu.GetSubMenu(1);\r\n\r\n\t\t//获取鼠标位置\r\n\t\tCPoint pt;\r\n\t\tGetCursorPos(&pt);\r\n\r\n\t\t//弹出菜单\r\n\t\tTrackPopupMenu(tMenu->m_hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, m_hWnd, 0);\r\n\t}\r\n\t*pResult = 0;\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnRclickFriendlist\r\n// 函数说明: 响应List控件的左键点击消息 \r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: pNMHDR pResult\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnClickFriendlist(NMHDR *pNMHDR, LRESULT *pResult)\r\n{\r\n\tLPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r\n\t//拿到微信ID\r\n\tmemcpy(wxid, m_FriendList.GetItemText(pNMItemActivate->iItem, 1), 40);\r\n\t*pResult = 0;\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSendMsg\r\n// 函数说明: 响应发送消息菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnSendMsg()\r\n{\r\n\t//利用构造函数把选中的微信ID传过去\r\n\tunique_ptr<CSendMsg> pSendmsg(new CSendMsg(wxid));\r\n\tpSendmsg->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSendMsg\r\n// 函数说明: 响应发送群公告菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/7\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnSetRoomAnnouncement()\r\n{\r\n\t//利用构造函数把选中的群ID传过去\r\n\tunique_ptr<CRoomAnnouncement> pRoom(new CRoomAnnouncement(wxid));\r\n\tpRoom->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCopyWxid\r\n// 函数说明: 响应复制微信ID菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/8\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnCopyWxid()\r\n{\r\n\tCString strText= wxid;\r\n\r\n\t//复制剪切板\r\n\tif (!strText.IsEmpty())\r\n\t{\r\n\t\tif (OpenClipboard())\r\n\t\t{\r\n\r\n\t\t\tTCHAR* pszData;\r\n\t\t\tHGLOBAL hClipboardData = GlobalAlloc(GMEM_DDESHARE, (strText.GetLength() + 1) * sizeof(TCHAR));\r\n\t\t\tif (hClipboardData)\r\n\t\t\t{\r\n\t\t\t\tpszData = (TCHAR*)GlobalLock(hClipboardData);\r\n\t\t\t\t_tcscpy_s(pszData, wcslen(strText) + 1, strText);\r\n\t\t\t\tGlobalUnlock(hClipboardData);\r\n\t\t\t\tSetClipboardData(CF_UNICODETEXT, hClipboardData);//根据相应的数据选择第一个参数，（CF_TEXT）  \r\n\t\t\t}\r\n\t\t\tCloseClipboard();\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnDeleteUser\r\n// 函数说明: 响应删除好友菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnDeleteUser()\r\n{\r\n\tif (MessageBoxA(NULL, \"是否删除好友\", \"Tip\", MB_YESNO)==IDYES)\r\n\t{\r\n\t\tif (wcscmp(wxid,L\"filehelper\")==0)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"无法删除filehelper\", \"Tip\", MB_OK);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t//查找窗口\r\n\t\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\t\tCOPYDATASTRUCT deleteuser;\r\n\t\tdeleteuser.dwData = WM_DeleteUser;\r\n\t\tdeleteuser.cbData = (wcslen(wxid)+1)*2;\r\n\t\tdeleteuser.lpData = wxid;\r\n\t\t//发送消息\r\n\t\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&deleteuser);\r\n\r\n\t\t//删除选中行\r\n\t\tPOSITION pos = m_FriendList.GetFirstSelectedItemPosition();\r\n\t\tint nItem = m_FriendList.GetNextSelectedItem(pos);\r\n\t\tm_FriendList.DeleteItem(nItem);\r\n\t}\r\n\t\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnQuiteChatRoom\r\n// 函数说明: 响应退出群聊菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnQuitChatRoom()\r\n{\r\n\tif (MessageBoxA(NULL, \"是否退出群聊\", \"Tip\", MB_YESNO))\r\n\t{\r\n\t\t//查找窗口\r\n\t\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\t\tCOPYDATASTRUCT quitchatroom;\r\n\t\tquitchatroom.dwData = WM_QuitChatRoom;\r\n\t\tquitchatroom.cbData = (wcslen(wxid) + 1) * 2;\r\n\t\tquitchatroom.lpData = wxid;\r\n\t\t//发送消息\r\n\t\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&quitchatroom);\r\n\r\n\t\t//删除选中行\r\n\t\tPOSITION pos = m_FriendList.GetFirstSelectedItemPosition();\r\n\t\tint nItem = m_FriendList.GetNextSelectedItem(pos);\r\n\t\tm_FriendList.DeleteItem(nItem);\r\n\t}\r\n\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnAddGroupMember\r\n// 函数说明: 响应邀请群成员(50人以下)\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnAddGroupMember()\r\n{\r\n\tunique_ptr<CAddChatRoomMember> addmember(new CAddChatRoomMember(wxid));\r\n\taddmember->DoModal();\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSendRoomMessage\r\n// 函数说明: 响应发送xml名片菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/10\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnSendXmlCard()\r\n{\r\n\tunique_ptr<CSendXmlCard> sendcard(new CSendXmlCard(wxid));\r\n\tsendcard->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnShowChatRoomMember\r\n// 函数说明: 响应查看群成员菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/13\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnShowChatRoomMember()\r\n{\r\n\tunique_ptr<CChatRoomMember> chatroommember(new CChatRoomMember(wxid));\r\n\tchatroommember->DoModal();\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnSetRoomName\r\n// 函数说明: 响应修改群名称菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnSetRoomName()\r\n{\r\n\tunique_ptr<CSetRoomName> pSetroomname(new CSetRoomName(wxid));\r\n\tpSetroomname->DoModal();\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnInviteGroupMember\r\n// 函数说明: 响应邀请群成员(50人以上)\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/19\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnInviteGroupMember()\r\n{\r\n\tunique_ptr<CInviteGroupMember> Invitemember(new CInviteGroupMember(wxid));\r\n\tInvitemember->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnGetFriendInfo\r\n// 函数说明: 响应查看好友信息菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnGetFriendInfo()\r\n{\r\n\t\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedCheckall\r\n// 函数说明: 全选\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/18\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnBnClickedCheckall()\r\n{\r\n\tfor (int i = 0; i < m_FriendList.GetItemCount(); i++)\r\n\t{\r\n\t\tm_FriendList.SetCheck(i, TRUE);\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedReversechoose\r\n// 函数说明: 反选\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/18\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnBnClickedReversechoose()\r\n{\r\n\tfor (int i = 0; i < m_FriendList.GetItemCount(); i++)\r\n\t{\r\n\t\tif (m_FriendList.GetCheck(i) == FALSE)  //未被选中的\r\n\t\t{\r\n\t\t\tm_FriendList.SetCheck(i, TRUE);\r\n\t\t}\r\n\t\telse  //选中的\r\n\t\t{\r\n\t\t\tm_FriendList.SetCheck(i, FALSE);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedCancelall\r\n// 函数说明: 取消\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/18\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\n\r\nvoid CFriendList::OnBnClickedCancelall()\r\n{\r\n\tfor (int i = 0; i < m_FriendList.GetItemCount(); i++)\r\n\t{\r\n\t\tm_FriendList.SetCheck(i, FALSE);\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedGroupsend\r\n// 函数说明: 群发\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/18\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnBnClickedGroupsend()\r\n{\r\n\t\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSetRemark\r\n// 函数说明: 响应修改备注菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/21\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnSetRemark()\r\n{\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnTopMsg\r\n// 函数说明: 响应置顶菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnTopMsg()\r\n{\r\n\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCancleTopMsg\r\n// 函数说明: 响应取消置顶菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnCancleTopMsg()\r\n{\r\n\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnOpenNewMsgNotify\r\n// 函数说明: 响应开启新消息提醒菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnOpenNewMsgNotify()\r\n{\r\n\t\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnMsgNoDisturb\r\n// 函数说明: 响应消息免打扰菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFriendList::OnMsgNoDisturb()\r\n{\r\n\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnSavefriendlist\r\n// 函数说明: 响应保存好友列表消息\r\n// 作    者: GuiShou\r\n// 时    间: 2020/02/19\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nafx_msg LRESULT CFriendList::OnSavefriendlist(WPARAM wParam, LPARAM lParam)\r\n{\r\n\twstring wxUserFileName = L\"UserLists.txt\";\r\n\r\n\t//作为输出文件打开\r\n\tofstream ofile;\r\n\tofile.open(wxUserFileName, ios_base::trunc | ios_base::binary | ios_base::in);\r\n\r\n\t//获取所有行的数量\r\n\tint nRow = m_FriendList.GetItemCount();\r\n\r\n\t//获取所有列的数量\r\n\tint nCol = m_FriendList.GetHeaderCtrl()->GetItemCount();\r\n\r\n\t//开始循环行和列\r\n\tfor (int i = 0; i < nRow; i++)\r\n\t{\r\n\t\tfor (int j = 0; j < nCol; j++)\r\n\t\t{\r\n\t\t\tUSES_CONVERSION;\r\n\t\t\tCString csTemp = m_FriendList.GetItemText(i, j);\n\t\t\tstring sTemp(CW2A(csTemp.GetString()));\n\t\t\tchar const* pos = (char const*)sTemp.c_str();\n\t\t\t//写入文件\n\t\t\tofile.write(pos, sTemp.length());\n\n\t\t\tchar const* cTab = \"\\t\\t\";\n\t\t\tofile.write(cTab, strlen(cTab));\n\t\t}\r\n\n\t\tchar const* cLine = \"\\r\\n\";\n\t\tofile.write(cLine, strlen(cLine));\r\n\t}\r\n\r\n\tofile.flush();\r\n\tofile.close();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CFriendList.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CFriendList 对话框\r\n\r\nclass CFriendList : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CFriendList)\r\n\r\npublic:\r\n\tCFriendList(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CFriendList();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_FRIEND_LIST };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tvirtual BOOL OnInitDialog();\r\n\tCListCtrl m_FriendList;\r\nprotected:\r\n\tafx_msg LRESULT OnShowfriendlist(WPARAM wParam, LPARAM lParam);\r\npublic:\r\n\tafx_msg void OnRclickFriendlist(NMHDR *pNMHDR, LRESULT *pResult);\r\n\tafx_msg void OnClickFriendlist(NMHDR *pNMHDR, LRESULT *pResult);\r\n\tafx_msg void OnSendMsg();\r\n\tafx_msg void OnSetRoomAnnouncement();\r\n\tafx_msg void OnCopyWxid();\r\n\tafx_msg void OnDeleteUser();\r\n\tafx_msg void OnQuitChatRoom();\r\n\tafx_msg void OnAddGroupMember();\r\n\tafx_msg void OnSendXmlCard();\r\n\tafx_msg void OnShowChatRoomMember();\r\n\tafx_msg void OnSetRoomName();\r\n\tafx_msg void OnInviteGroupMember();\r\n\tafx_msg void OnGetFriendInfo();\r\n\tafx_msg void OnBnClickedCheckall();\r\n\tafx_msg void OnBnClickedReversechoose();\r\n\tafx_msg void OnBnClickedCancelall();\r\n\tCString m_GroupSendText;\r\n\tafx_msg void OnBnClickedGroupsend();\r\n\tafx_msg void OnSetRemark();\r\n\tafx_msg void OnTopMsg();\r\n\tafx_msg void OnCancleTopMsg();\r\n\tafx_msg void OnOpenNewMsgNotify();\r\n\tafx_msg void OnMsgNoDisturb();\r\nprotected:\r\n\tafx_msg LRESULT OnSavefriendlist(WPARAM wParam, LPARAM lParam);\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CFunctions.cpp",
    "content": "﻿// CFunctions.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include <direct.h>\r\n#include <stdio.h>\r\n#include \"WeChatRobot.h\"\r\n#include \"CFunctions.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"CInformation.h\"\r\n#include \"CDecryptImage.h\"\r\n#include \"CMultiOpen.h\"\r\n#include \"CAddUser.h\"\r\n#include \"CFriendList.h\"\r\n#include \"COpenUrl.h\"\r\n#include \"CSendXmlAricle.h\"\r\n#include \"CCreateChatRoom.h\"\r\n#include \"CModifyVersion.h\"\r\n#include \"CFollowAccount.h\"\r\n\r\n\r\nextern BOOL isAttentTuLing;\t\t//是否关注聊天机器人\r\nBOOL bAutoChat = FALSE;\t\t\t//自动聊天\r\n\r\n// CFunctions 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CFunctions, CDialogEx)\r\n\r\nCFunctions::CFunctions(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_FUNCTIONS, pParent)\r\n{\r\n\r\n}\r\n\r\nCFunctions::~CFunctions()\r\n{\r\n}\r\n\r\nvoid CFunctions::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CFunctions, CDialogEx)\r\n\tON_BN_CLICKED(IDC_INFORMATION, &CFunctions::OnBnClickedInformation)\r\n\tON_BN_CLICKED(IDC_DECRYPT_PIC, &CFunctions::OnBnClickedDecryptPic)\r\n\tON_BN_CLICKED(IDC_MULTI_OPEN, &CFunctions::OnBnClickedMultiOpen)\r\n\tON_BN_CLICKED(IDC_ADD_USER, &CFunctions::OnBnClickedAddUser)\r\n\tON_BN_CLICKED(IDC_AUTO_CHAT, &CFunctions::OnBnClickedAutoChat)\r\n\tON_BN_CLICKED(IDC_OPEN_URL, &CFunctions::OnBnClickedOpenUrl)\r\n\tON_BN_CLICKED(IDC_SendXmlArticle, &CFunctions::OnBnClickedSendxmlarticle)\r\n\tON_BN_CLICKED(IDC_SendMsgByTimer, &CFunctions::OnBnClickedSendmsgbytimer)\r\n\tON_BN_CLICKED(IDC_CreateRoom, &CFunctions::OnBnClickedCreateroom)\r\n\tON_BN_CLICKED(IDC_ModifyVersion, &CFunctions::OnBnClickedModifyversion)\r\n\tON_BN_CLICKED(IDC_FollowAccount, &CFunctions::OnBnClickedFollowaccount)\r\n\tON_BN_CLICKED(IDC_KeyWordsReply, &CFunctions::OnBnClickedKeywordsreply)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedInformation\r\n// 函数说明: 响应个人信息按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedInformation()\r\n{\r\n\tunique_ptr<CInformation> info(new CInformation);\r\n\tinfo->DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedDecryptPic\r\n// 函数说明: 响应解密图片按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedDecryptPic()\r\n{\r\n\tCDecryptImage decryptimage;\r\n\tdecryptimage.DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedMultiOpen\r\n// 函数说明: 响应无限多开按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedMultiOpen()\r\n{\r\n\tPatchWeChat();\r\n\tOpenWeChat();\r\n}\r\n\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedAddUser\r\n// 函数说明: 响应添加好友按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/13\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedAddUser()\r\n{\r\n\tCAddUser adduser;\r\n\tadduser.DoModal();\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedAutoChat\r\n// 函数说明: 响应自动聊天按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/16\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedAutoChat()\r\n{\r\n\t//检测是否关注聊天机器人\r\n\tif (isAttentTuLing)\r\n\t{\r\n\t\tif (bAutoChat == FALSE)\r\n\t\t{\r\n\t\t\tMessageBoxW(L\"自动聊天已开启\");\r\n\t\t\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\t\t\tCOPYDATASTRUCT autochat;\r\n\t\t\tautochat.dwData = WM_AutoChat;\r\n\t\t\tautochat.cbData = 0;\r\n\t\t\tautochat.lpData = NULL;\r\n\t\t\t//发送消息\r\n\t\t\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&autochat);\r\n\t\t\tbAutoChat = TRUE;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tMessageBoxW(L\"自动聊天已关闭\");\r\n\t\t\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\t\t\tCOPYDATASTRUCT autochat;\r\n\t\t\tautochat.dwData = WM_CancleAutoChat;\r\n\t\t\tautochat.cbData = 0;\r\n\t\t\tautochat.lpData = NULL;\r\n\t\t\t//发送消息\r\n\t\t\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&autochat);\r\n\t\t\tbAutoChat = FALSE;\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\tMessageBoxW(L\"请先关注小冰的宇宙公众号\", L\"提示\", 0);\r\n\t}\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedOpenUrl\r\n// 函数说明: 打开微信浏览器\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/10\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedOpenUrl()\r\n{\r\n\tCOpenUrl openurl;\r\n\topenurl.DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendxmlarticle\r\n// 函数说明: 发送xml文章\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/30\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedSendxmlarticle()\r\n{\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendmsgbytimer\r\n// 函数说明: 定时发送\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedSendmsgbytimer()\r\n{\r\n\t\t\r\n}\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedCreateroom\r\n// 函数说明: 创建群聊\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/22\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedCreateroom()\r\n{\r\n\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedModifyversion\r\n// 函数说明: 修改版本号\r\n// 作    者: GuiShou\r\n// 时    间: 2019/10/28\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedModifyversion()\r\n{\r\n\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedFollowaccount\r\n// 函数说明: 关注公众号\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/19\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedFollowaccount()\r\n{\r\n\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedKeywordsreply\r\n// 函数说明: 开启或关闭关键词回复\r\n// 作    者: GuiShou\r\n// 时    间: 2019/11/20\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CFunctions::OnBnClickedKeywordsreply()\r\n{\r\n\t\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CFunctions.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CFunctions 对话框\r\n\r\nclass CFunctions : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CFunctions)\r\n\r\npublic:\r\n\tCFunctions(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CFunctions();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_FUNCTIONS };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tafx_msg void OnBnClickedInformation();\r\n\tafx_msg void OnBnClickedDecryptPic();\r\n\tafx_msg void OnBnClickedMultiOpen();\r\n\tafx_msg void OnBnClickedAddUser();\r\n\tafx_msg void OnBnClickedAutoChat();\r\n\tafx_msg void OnBnClickedOpenUrl();\r\n\tafx_msg void OnBnClickedSendxmlarticle();\r\n\tafx_msg void OnBnClickedSendmsgbytimer();\r\n\tafx_msg void OnBnClickedCreateroom();\r\n\tafx_msg void OnBnClickedModifyversion();\r\n\tafx_msg void OnBnClickedFollowaccount();\r\n\tafx_msg void OnBnClickedKeywordsreply();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CInformation.cpp",
    "content": "﻿#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CInformation.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n\r\n\r\n// CInformation 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CInformation, CDialogEx)\r\n\r\nCInformation::CInformation(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_INFORMATION, pParent)\r\n\t, m_header(_T(\"\"))\r\n\t, m_city(_T(\"\"))\r\n\t, m_province(_T(\"\"))\r\n\t, m_nation(_T(\"\"))\r\n\t, m_device(_T(\"\"))\r\n\t, m_phone(_T(\"\"))\r\n\t, m_nickname(_T(\"\"))\r\n\t, m_count(_T(\"\"))\r\n\t, m_wxid(_T(\"\"))\r\n\t, m_sex(_T(\"\"))\r\n\t, m_bigheader(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCInformation::~CInformation()\r\n{\r\n}\r\n\r\nvoid CInformation::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_HEADER, m_header);\r\n\tDDX_Text(pDX, IDC_CITY, m_city);\r\n\tDDX_Text(pDX, IDC_PROVINCE, m_province);\r\n\tDDX_Text(pDX, IDC_NATION, m_nation);\r\n\tDDX_Text(pDX, IDC_DEVICE, m_device);\r\n\tDDX_Text(pDX, IDC_PHONE, m_phone);\r\n\tDDX_Text(pDX, IDC_NICKNAME, m_nickname);\r\n\tDDX_Text(pDX, IDC_ACCOUNT, m_count);\r\n\tDDX_Text(pDX, IDC_WXID, m_wxid);\r\n\tDDX_Text(pDX, IDC_SEX, m_sex);\r\n\tDDX_Text(pDX, IDC_HEADER2, m_bigheader);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CInformation, CDialogEx)\r\n\tON_WM_COPYDATA()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CInformation 消息处理程序\r\n\r\n\r\nBOOL CInformation::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT GetInformation;\r\n\t//组装数据\r\n\tGetInformation.dwData = WM_GetInformation;\r\n\tGetInformation.cbData = 0;\r\n\tGetInformation.lpData = NULL;\r\n\t//发送获取个人信息消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&GetInformation);\r\n\r\n\treturn TRUE;  \r\n}\r\n\r\n\r\nBOOL CInformation::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)\r\n{\r\n\t//显示好友列表\r\n\tif (pCopyDataStruct->dwData == WM_GetInformation)\r\n\t{\r\n\t\t//接收消息\r\n\t\tPersonalInformation *info = (PersonalInformation*)pCopyDataStruct->lpData;\r\n\r\n\t\t//显示到控件\r\n\t\tm_wxid = info->wxid;\r\n\t\tm_count = info->wxcount;\r\n\t\tm_nickname = info->nickname;\r\n\t\tm_phone = info->phonenumber;\r\n\t\tm_device = info->device;\r\n\t\tm_nation = info->nation;\r\n\t\tm_city = info->city;\r\n\t\tm_province = info->province;\r\n\t\tm_header = info->smallheader;\r\n\t\tm_bigheader = info->bigheader;\r\n\t\tm_sex = info->wxsex;\r\n\t\tUpdateData(FALSE);\r\n\t}\r\n\treturn CDialogEx::OnCopyData(pWnd, pCopyDataStruct);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CInformation.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CInformation 对话框\r\n\r\nclass CInformation : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CInformation)\r\n\r\npublic:\r\n\tCInformation(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CInformation();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_INFORMATION };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tvirtual BOOL OnInitDialog();\r\n\tafx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);\r\n\tCString m_header;\r\n\tCString m_city;\r\n\tCString m_province;\r\n\tCString m_nation;\r\n\tCString m_device;\r\n\tCString m_phone;\r\n\tCString m_nickname;\r\n\tCString m_count;\r\n\tCString m_wxid;\r\n\tCString m_sex;\r\n\tCString m_bigheader;\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CInjectTools.cpp",
    "content": "#include \"stdafx.h\"\r\n#include \"CInjectTools.h\"\r\n#include <direct.h>\r\n#include <stdlib.h>\r\n#include <TlHelp32.h>\r\n#include <stdio.h>\r\n#pragma comment(lib,\"advapi32\")\r\n\r\n\r\n#define WECHAT_PROCESS_NAME \"WeChat.exe\"\r\n#define DLLNAME \"WeChatHelper.dll\"\r\n\r\n\r\nCString GetAppRegeditPath(CString strAppName)\r\n{\r\n\t//ر\r\n\tHKEY hKey;\r\n\tCString strAppRegeditPath(\"\");\r\n\tTCHAR szProductType[MAX_PATH];\r\n\tmemset(szProductType, 0, sizeof(szProductType));\r\n\r\n\tDWORD dwBuflen = MAX_PATH;\r\n\tLONG lRet = 0;\r\n\r\n\t//Ǵע,ֻд򿪺\r\n\tlRet = RegOpenKeyEx(HKEY_CURRENT_USER, //Ҫ򿪵ĸ\r\n\t\tLPCTSTR(strAppName), //Ҫ򿪵Ӽ\r\n\t\t0, //һΪ0\r\n\t\tKEY_QUERY_VALUE, //ָ򿪷ʽ,Ϊ\r\n\t\t&hKey); //ؾ\r\n\r\n\tif (lRet != ERROR_SUCCESS) //жǷ򿪳ɹ\r\n\t{\r\n\t\treturn strAppRegeditPath;\r\n\t}\r\n\telse\r\n\t{\r\n\t\t//濪ʼѯ\r\n\t\tlRet = RegQueryValueEx(hKey, //עʱصľ\r\n\t\t\tTEXT(\"Wechat\"), //Ҫѯ,ѯװĿ¼\r\n\t\t\tNULL, //һΪNULL0\r\n\t\t\tNULL,\r\n\t\t\t(LPBYTE)szProductType, //ҪĶ\r\n\t\t\t&dwBuflen);\r\n\r\n\t\tif (lRet != ERROR_SUCCESS) //жǷѯɹ\r\n\t\t{\r\n\t\t\treturn strAppRegeditPath;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tRegCloseKey(hKey);\r\n\t\t\t\r\n\t\t\tstrAppRegeditPath = szProductType;\r\n\r\n\t\t\tint nPos = strAppRegeditPath.Find('-');\r\n\r\n\t\t\tif (nPos >= 0)\r\n\t\t\t{\r\n\t\t\t\tCString sSubStr = strAppRegeditPath.Left(nPos - 1);//$,ʱnPos+1\r\n\t\t\t\tstrAppRegeditPath = sSubStr;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn strAppRegeditPath;\r\n}\r\nCString GetAppRegeditPath2(CString strAppName)\r\n{\r\n\t//ر\r\n\tHKEY hKey;\r\n\tCString strAppRegeditPath(\"\");\r\n\tTCHAR szProductType[MAX_PATH];\r\n\tmemset(szProductType, 0, sizeof(szProductType));\r\n\r\n\tDWORD dwBuflen = MAX_PATH;\r\n\tLONG lRet = 0;\r\n\r\n\t//Ǵע,ֻд򿪺\r\n\tlRet = RegOpenKeyEx(HKEY_CURRENT_USER, //Ҫ򿪵ĸ\r\n\t\tLPCTSTR(strAppName), //Ҫ򿪵Ӽ\r\n\t\t0, //һΪ0\r\n\t\tKEY_QUERY_VALUE, //ָ򿪷ʽ,Ϊ\r\n\t\t&hKey); //ؾ\r\n\r\n\tif (lRet != ERROR_SUCCESS) //жǷ򿪳ɹ\r\n\t{\r\n\t\treturn strAppRegeditPath;\r\n\t}\r\n\telse\r\n\t{\r\n\t\t//濪ʼѯ\r\n\t\tlRet = RegQueryValueEx(hKey, //עʱصľ\r\n\t\t\tTEXT(\"InstallPath\"), //Ҫѯ,ѯװĿ¼\r\n\t\t\tNULL, //һΪNULL0\r\n\t\t\tNULL,\r\n\t\t\t(LPBYTE)szProductType, //ҪĶ\r\n\t\t\t&dwBuflen);\r\n\r\n\t\tif (lRet != ERROR_SUCCESS) //жǷѯɹ\r\n\t\t{\r\n\t\t\treturn strAppRegeditPath;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tRegCloseKey(hKey);\r\n\t\t\tstrAppRegeditPath = szProductType;\r\n\r\n\t\t}\r\n\t}\r\n\treturn strAppRegeditPath;\r\n}\r\n//************************************************************\r\n// : ProcessNameFindPID\r\n// ˵: ͨҵID\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : ProcessName \r\n//   ֵ: DWORD PID\r\n//************************************************************\r\nDWORD ProcessNameFindPID(const char* ProcessName)\r\n{\r\n\tPROCESSENTRY32 pe32 = { 0 };\r\n\tpe32.dwSize = sizeof(PROCESSENTRY32);\r\n\tHANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);\r\n\tif (Process32First(hProcess, &pe32) == TRUE)\r\n\t{\r\n\t\tdo\r\n\t\t{\r\n\t\t\tUSES_CONVERSION;\r\n\t\t\tif (strcmp(ProcessName, W2A(pe32.szExeFile)) == 0)\r\n\t\t\t{\r\n\t\t\t\treturn pe32.th32ProcessID;\r\n\t\t\t}\r\n\t\t} while (Process32Next(hProcess, &pe32));\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\n//************************************************************\r\n// : InjectDll\r\n// ˵: עDLL\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : void\r\n//   ֵ: void\r\n//************************************************************\r\nBOOL InjectDll(HANDLE& wxPid)\r\n{\r\n\t//ȡǰĿ¼µdll\r\n\tchar szPath[MAX_PATH] = { 0 };\r\n\tchar* buffer = NULL;\r\n\tif ((buffer = _getcwd(NULL, 0)) == NULL)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"ȡǰĿ¼ʧ\", \"\", 0);\r\n\t\treturn FALSE;\r\n\t}\r\n\tsprintf_s(szPath, \"%s\\\\%s\", buffer, DLLNAME);\r\n\t//ȡ΢Pid\r\n\tDWORD dwPid = ProcessNameFindPID(WECHAT_PROCESS_NAME);\r\n\tif (dwPid == 0)\r\n\t{\r\n\t\tCString wxStrAppName = TEXT(\"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\");\r\n\t\tCString szProductType = GetAppRegeditPath(wxStrAppName);\r\n\r\n\t\tif (szProductType.GetLength()<5)\r\n\t\t{\r\n\t\t\twxStrAppName = TEXT(\"Software\\\\Tencent\\\\WeChat\");\r\n\t\t    szProductType = GetAppRegeditPath2(wxStrAppName);\r\n\t\t\tszProductType.Append(L\"\\\\WeChat.exe\");\r\n\t\t}\r\n\t\tSTARTUPINFO si;\r\n\t\tPROCESS_INFORMATION pi;\r\n\t\tZeroMemory(&si, sizeof(si));\r\n\t\tsi.cb = sizeof(si);\r\n\t\tZeroMemory(&pi, sizeof(pi));\r\n\r\n\t\tsi.dwFlags = STARTF_USESHOWWINDOW;// ָwShowWindowԱЧ\r\n\t\tsi.wShowWindow = TRUE;          // ˳ԱΪTRUEĻʾ½̵ڣ\r\n\t\t\t\t\t\t\t\t\t   // ΪFALSEĻʾ\r\n\r\n\t\tCreateProcess(szProductType, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);\r\n\r\n\t\tHWND  hWechatMainForm = NULL;\r\n\t\t//WeChatLoginWndForPC\r\n\t\twhile (NULL == hWechatMainForm)\r\n\t\t{\r\n\t\t\thWechatMainForm = FindWindow(TEXT(\"WeChatLoginWndForPC\"), NULL);\r\n\t\t\tSleep(500);\r\n\t\t}\r\n\t\tif (NULL == hWechatMainForm)\r\n\t\t{\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\tdwPid = pi.dwProcessId;\r\n\t\twxPid = pi.hProcess;\r\n\t}\r\n\t//dllǷѾע\r\n\tif (CheckIsInject(dwPid))\r\n\t{\r\n\t\t//򿪽\r\n\t\tHANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);\r\n\t\tif (hProcess == NULL)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"̴ʧ\", \"\", 0);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t//΢Žڴ\r\n\t\tLPVOID pAddress = VirtualAllocEx(hProcess, NULL, MAX_PATH, MEM_COMMIT, PAGE_EXECUTE_READWRITE);\r\n\t\tif (pAddress == NULL)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"ڴʧ\", \"\", 0);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t//дdll·΢Ž\r\n\t\tif (WriteProcessMemory(hProcess, pAddress, szPath, MAX_PATH, NULL) == 0)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"·дʧ\", \"\", 0);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\t//ȡLoadLibraryAַ\r\n\t\tFARPROC pLoadLibraryAddress = GetProcAddress(GetModuleHandleA(\"kernel32.dll\"), \"LoadLibraryA\");\r\n\t\tif (pLoadLibraryAddress == NULL)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"ȡLoadLibraryAַʧ\", \"\", 0);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\t\t//Զ߳עdll\r\n\t\tHANDLE hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pLoadLibraryAddress, pAddress, 0, NULL);\r\n\t\tif (hRemoteThread == NULL)\r\n\t\t{\r\n\t\t\tMessageBoxA(NULL, \"Զ߳עʧ\", \"\", 0);\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t\tCloseHandle(hRemoteThread);\r\n\t\tCloseHandle(hProcess);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tMessageBoxA(NULL, \"dllѾע룬ظע\", \"ʾ\", 0);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n//************************************************************\r\n// : CheckIsInject\r\n// ˵: ǷѾעdll\r\n//     : GuiShou\r\n// ʱ    : 2019/6/30\r\n//     : void\r\n//   ֵ: BOOL \r\n//************************************************************\r\nBOOL CheckIsInject(DWORD dwProcessid)\r\n{\r\n\tHANDLE hModuleSnap = INVALID_HANDLE_VALUE;\r\n\t//ʼģϢṹ\r\n\tMODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };\r\n\t//ģ 1  2 ID\r\n\thModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessid);\r\n\t//Чͷfalse\r\n\tif (hModuleSnap == INVALID_HANDLE_VALUE)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"ģʧ\", \"\", MB_OK);\r\n\t\treturn FALSE;\r\n\t}\r\n\t//ͨģվȡһģϢ\r\n\tif (!Module32First(hModuleSnap, &me32))\r\n\t{\r\n\t\tMessageBoxA(NULL, \"ȡһģϢʧ\", \"\", MB_OK);\r\n\t\t//ȡʧرվ\r\n\t\tCloseHandle(hModuleSnap);\r\n\t\treturn FALSE;\r\n\t}\r\n\tdo\r\n\t{\r\n\t\tif (StrCmpW(me32.szModule, L\"WeChatHelper.dll\") == 0)\r\n\t\t{\r\n\t\t\treturn FALSE;\r\n\t\t}\r\n\r\n\t} while (Module32Next(hModuleSnap, &me32));\r\n\treturn TRUE;\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CInjectTools.h",
    "content": "#pragma once\r\n\r\nDWORD ProcessNameFindPID(const char* ProcessName);\t//ͨȡID\r\nBOOL InjectDll(HANDLE& wxPid); //עdll\r\nBOOL CheckIsInject(DWORD dwProcessid);\t//DLLǷѾע\r\n"
  },
  {
    "path": "WeChatRobot/CInviteGroupMember.cpp",
    "content": "﻿// CInviteGroupMember.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CInviteGroupMember.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CInviteGroupMember 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CInviteGroupMember, CDialogEx)\r\n\r\nCInviteGroupMember::CInviteGroupMember(LPCTSTR TempGroupId, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_InviteMember, pParent), m_ChatRoomWxid(TempGroupId)\r\n\t, m_wxid(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCInviteGroupMember::~CInviteGroupMember()\r\n{\r\n}\r\n\r\nvoid CInviteGroupMember::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_wxid);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CInviteGroupMember, CDialogEx)\r\n\tON_BN_CLICKED(IDC_INVITE, &CInviteGroupMember::OnBnClickedInvite)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedInvite\r\n// 函数说明: 响应确定按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/19\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CInviteGroupMember::OnBnClickedInvite()\r\n{\r\n\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CInviteGroupMember.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CInviteGroupMember 对话框\r\n\r\nclass CInviteGroupMember : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CInviteGroupMember)\r\n\r\npublic:\r\n\tCInviteGroupMember(LPCTSTR TempGroupId, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CInviteGroupMember();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_InviteMember };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\npublic:\r\n\tCString m_ChatRoomWxid;\t\t//从好友列表窗口传过来的群ID\r\n\tCString m_wxid;\r\n\tafx_msg void OnBnClickedInvite();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CMain.cpp",
    "content": "﻿// CMain.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CMain.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"CChatRecords.h\"\r\n#include \"CFriendList.h\"\r\n#include \"CFunctions.h\"\r\n#include \"CPay.h\"\r\n#include \"CAboutAuthor.h\"\r\n\r\n\r\nIMPLEMENT_DYNAMIC(CMain, CDialogEx)\r\n\r\nCMain::CMain(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_MAIN, pParent)\r\n{\r\n\r\n}\r\n\r\nCMain::~CMain()\r\n{\r\n}\r\n\r\nvoid CMain::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Control(pDX, IDC_TAB1, m_MyTable);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CMain, CDialogEx)\r\n\tON_COMMAND(ID_32776, &CMain::OnWxLogout)\r\n\tON_WM_COPYDATA()\r\n\tON_COMMAND(ID_32779, &CMain::OnPayAuthor)\r\n\tON_COMMAND(ID_32778, &CMain::OnAboutAuthor)\r\n\tON_COMMAND(ID_32798, &CMain::OnSaveFriendList)\r\n\tON_WM_CLOSE()\r\n\tON_WM_DESTROY()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CMain 消息处理程序\r\n\r\n\r\nBOOL CMain::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\t// TODO:  在此添加额外的初始化\r\n\tTCHAR Name[3][5] = { L\"好友列表\",L\"聊天记录\" , L\"功能大全\" };\r\n\tfor (int i = 0; i < 3; i++)\r\n\t{\r\n\t\tm_MyTable.InsertItem(i, Name[i]);\r\n\t}\r\n\r\n\t//给子窗口指针赋值\r\n\r\n\tm_MyTable.m_Dia[0] = new CFriendList();\r\n\tm_MyTable.m_Dia[1] = new CChatRecords();\r\n\tm_MyTable.m_Dia[2] = new CFunctions();\r\n\r\n\t//创建子窗口\r\n\tUINT DiaIds[3] = { IDD_FRIEND_LIST, IDD_CHAT_RECORDS, IDD_FUNCTIONS};\r\n\tfor (int i = 0; i < 3; i++)\r\n\t{\r\n\t\tm_MyTable.m_Dia[i]->Create(DiaIds[i], &m_MyTable);\r\n\t}\r\n\r\n\r\n\t//控制两个窗口的大小\r\n\tCRect rc;\r\n\tm_MyTable.GetClientRect(rc);\r\n\trc.DeflateRect(2, 23, 2, 2);\r\n\tfor (int i = 0; i < 3; i++)\r\n\t{\r\n\t\tm_MyTable.m_Dia[i]->MoveWindow(rc);\r\n\t}\r\n\r\n\r\n\t//显示第一个子窗口\r\n\tm_MyTable.m_Dia[0]->ShowWindow(SW_SHOW);\r\n\tfor (int i = 1; i < 3; i++)\r\n\t{\r\n\t\tm_MyTable.m_Dia[i]->ShowWindow(SW_HIDE);\r\n\t}\r\n\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnWxLogout\r\n// 函数说明: 响应退出微信菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/6/30\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CMain::OnWxLogout()\r\n{\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT logout;\r\n\tlogout.dwData = WM_Logout;\r\n\tlogout.cbData = 0;\r\n\tlogout.lpData = NULL;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&logout);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCopyData\r\n// 函数说明: 响应CopyData消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/5\r\n// 参    数: CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct\r\n// 返 回 值: BOOL\r\n//***********************************************************\r\nBOOL CMain::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)\r\n{\r\n\t//显示好友列表\r\n\tif (pCopyDataStruct->dwData == WM_GetFriendList)\r\n\t{\r\n\t\tUserInfo *user = (UserInfo*)pCopyDataStruct->lpData;\r\n\t\t//将消息发送给子窗口\r\n\t\tm_MyTable.m_Dia[0]->SendMessage(WM_ShowFriendList, (WPARAM)user, NULL);\r\n\t}\r\n\t//显示聊天记录\r\n\telse if (pCopyDataStruct->dwData == WM_ShowChatRecord)\r\n\t{\r\n\t\tChatMessageData *msg = (ChatMessageData*)pCopyDataStruct->lpData;\r\n\t\t//将消息发送给子窗口\r\n\t\tm_MyTable.m_Dia[1]->SendMessage(WM_ShowMessage, (WPARAM)msg, NULL);\r\n\t}\r\n\t\r\n\r\n\treturn CDialogEx::OnCopyData(pWnd, pCopyDataStruct);\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnPayAuthor\r\n// 函数说明: 响应打赏作者菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CMain::OnPayAuthor()\r\n{\r\n\tCPay pay;\r\n\tpay.DoModal();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnAboutAuthor\r\n// 函数说明: 响应关于作者菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CMain::OnAboutAuthor()\r\n{\r\n\tCAboutAuthor about;\r\n\tabout.DoModal();\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnSaveFriendList\r\n// 函数说明: 响应保存联系人菜单\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/17\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CMain::OnSaveFriendList()\r\n{\r\n\tm_MyTable.m_Dia[0]->SendMessage(SaveFriendList, NULL, NULL);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnClose\r\n// 函数说明: 重载OnClose消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/12/10\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CMain::OnClose()\r\n{\r\n\tif (MessageBoxA(NULL, \"是否退出程序\", \"Tip\", MB_YESNO) == IDYES)\r\n\t{\r\n\t\tEndDialog(0);\r\n\t}\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CMain.h",
    "content": "﻿#pragma once\r\n#include \"CMyTableCtrl.h\"\r\n\r\n// CMain 对话框\r\n\r\nclass CMain : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CMain)\r\n\r\npublic:\r\n\tCMain(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CMain();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_MAIN };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCMyTableCtrl m_MyTable;\r\n\tvirtual BOOL OnInitDialog();\r\n\tafx_msg void OnWxLogout();\r\n\tafx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);\r\n\tafx_msg void OnPayAuthor();\r\n\tafx_msg void OnAboutAuthor();\r\n\tafx_msg void OnSaveFriendList();\r\n\tafx_msg void OnClose();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CModifyVersion.cpp",
    "content": "﻿// CModifyVersion.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CModifyVersion.h\"\r\n#include \"afxdialogex.h\"\r\n#include <atlconv.h>\r\n\r\n\r\n// CModifyVersion 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CModifyVersion, CDialogEx)\r\n\r\nCModifyVersion::CModifyVersion(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_ModifyVersion, pParent)\r\n\t, m_version(_T(\"2.7.1.85\"))\r\n{\r\n\r\n}\r\n\r\nCModifyVersion::~CModifyVersion()\r\n{\r\n}\r\n\r\nvoid CModifyVersion::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_version);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CModifyVersion, CDialogEx)\r\n\tON_BN_CLICKED(IDC_Modify, &CModifyVersion::OnBnClickedModify)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CModifyVersion 消息处理程序\r\n\r\n\r\nvoid CModifyVersion::OnBnClickedModify()\r\n{\r\n\t\r\n}\r\n\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CModifyVersion.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CModifyVersion 对话框\r\n\r\nclass CModifyVersion : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CModifyVersion)\r\n\r\npublic:\r\n\tCModifyVersion(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CModifyVersion();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ModifyVersion };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_version;\r\n\tafx_msg void OnBnClickedModify();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CMultiOpen.cpp",
    "content": "#include \"stdafx.h\"\r\n#include <TlHelp32.h>\r\n#include <Shlwapi.h>\r\n#pragma comment(lib, \"shlwapi\")\r\n#include \"CMultiOpen.h\"\r\n#include <stdio.h>\r\n\r\n\r\ntypedef NTSTATUS(NTAPI *NTQUERYOBJECT)(\r\n\t_In_opt_   HANDLE Handle,\r\n\t_In_       OBJECT_INFORMATION_CLASS ObjectInformationClass,\r\n\t_Out_opt_  PVOID ObjectInformation,\r\n\t_In_       ULONG ObjectInformationLength,\r\n\t_Out_opt_  PULONG ReturnLength\r\n\t);\r\n\r\n\r\ntypedef NTSTATUS\r\n(NTAPI *ZWQUERYSYSTEMINFORMATION)(\r\n\tIN SYSTEM_INFORMATION_CLASS SystemInformationClass,\r\n\tOUT PVOID SystemInformation,\r\n\tIN ULONG SystemInformationLength,\r\n\tOUT PULONG ReturnLength OPTIONAL\r\n\t);\r\nZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(GetModuleHandleA(\"ntdll.dll\"), \"ZwQuerySystemInformation\");\r\nNTQUERYOBJECT    NtQueryObject = (NTQUERYOBJECT)GetProcAddress(GetModuleHandleA(\"ntdll.dll\"), \"NtQueryObject\");\r\n\r\n\r\n//************************************************************\r\n// : ElevatePrivileges\r\n// ˵: Ȩ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : void\r\n//   ֵ: BOOL\r\n//***********************************************************\r\nBOOL ElevatePrivileges()\r\n{\r\n\tHANDLE hToken;\r\n\tTOKEN_PRIVILEGES tkp;\r\n\ttkp.PrivilegeCount = 1;\r\n\tif(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))\r\n\t\treturn FALSE;\r\n\tLookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);\r\n\ttkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\r\n\tif(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))\r\n\t{\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\treturn TRUE;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : DuplicateHandleEx\r\n// ˵: ƾ\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : void\r\n//   ֵ: BOOL\r\n//***********************************************************\r\nHANDLE DuplicateHandleEx(DWORD pid, HANDLE h, DWORD flags)\r\n{\r\n\tHANDLE hHandle = NULL;\r\n\r\n\tHANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);\r\n\tif(hProc)\r\n\t{\r\n\t\tif(!DuplicateHandle(hProc,\r\n\t\t\t(HANDLE)h, GetCurrentProcess(),\r\n\t\t\t&hHandle, 0, FALSE, /*DUPLICATE_SAME_ACCESS*/flags))\r\n\t\t{\r\n\t\t\thHandle = NULL;\r\n\t\t}\r\n\t}\r\n\r\n\tCloseHandle(hProc);\r\n\treturn hHandle;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : GetProcIds\r\n// ˵: ȡPID\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : Name Pids\r\n//   ֵ: int\r\n//***********************************************************\r\nint GetProcIds(LPWSTR Name, DWORD* Pids)\r\n{\r\n\tPROCESSENTRY32 pe32 = {sizeof(pe32)};\r\n\tint num = 0;\r\n\r\n\tHANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\r\n\tif(hSnap)\r\n\t{\r\n\t\tif(Process32First(hSnap, &pe32))\r\n\t\t{\r\n\t\t\tdo {\r\n\t\t\t\tif(!StrCmpW(Name, pe32.szExeFile))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(Pids)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPids[num++] = pe32.th32ProcessID;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} while(Process32Next(hSnap, &pe32));\r\n\t\t}\r\n\t\tCloseHandle(hSnap);\r\n\t}\r\n\r\n\treturn num;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : IsTargetPid\r\n// ˵: ǷĿPID\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : Pid Pids num\r\n//   ֵ: BOOL\r\n//***********************************************************\r\nBOOL IsTargetPid(DWORD Pid, DWORD* Pids, int num)\r\n{\r\n\tfor(int i=0; i<num; i++)\r\n\t{\r\n\t\tif(Pid == Pids[i])\r\n\t\t{\r\n\t\t\treturn TRUE;\r\n\t\t}\r\n\t}\r\n\treturn FALSE;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : PatchWeChat\r\n// ˵: ޸΢\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : void\r\n//   ֵ: int\r\n//***********************************************************\r\nint PatchWeChat()\r\n{\r\n\tDWORD dwSize = 0;\r\n\tPOBJECT_NAME_INFORMATION pNameInfo;\r\n\tPOBJECT_NAME_INFORMATION pNameType;\r\n\tPVOID pbuffer = NULL;\r\n\tNTSTATUS Status;\r\n\tDWORD nIndex = 0;\r\n\tDWORD dwFlags = 0;\r\n\tchar szType[128] = {0};\r\n\tchar szName[512] = {0};\r\n\r\n\tElevatePrivileges();\r\n\r\n\tDWORD Pids[100] = {0};\r\n\r\n\tDWORD Num = GetProcIds(L\"WeChat.exe\", Pids);\r\n\tif(Num == 0)\r\n\t{\r\n\t\treturn 0;\r\n\t}\r\n\t\t\r\n\tif(!ZwQuerySystemInformation)\r\n\t{\r\n\t\tgoto Exit0;\r\n\t}\r\n\r\n\tpbuffer = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);\r\n\r\n\tif(!pbuffer)\r\n\t{\r\n\t\tgoto Exit0;\r\n\t}\r\n\r\n\tStatus = ZwQuerySystemInformation(SystemHandleInformation, pbuffer, 0x1000, &dwSize);\r\n\r\n\tif(!NT_SUCCESS(Status))\r\n\t{\r\n\t\tif (STATUS_INFO_LENGTH_MISMATCH != Status)\r\n\t\t{\r\n\t\t\tgoto Exit0;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t// ҿԱ֤ȷʹѭԺ\r\n\t\t\tif (NULL != pbuffer)\r\n\t\t\t{\r\n\t\t\t\tVirtualFree(pbuffer, 0, MEM_RELEASE);\r\n\t\t\t}\r\n\r\n\t\t\tif (dwSize*2 > 0x4000000)  // MAXSIZE\r\n\t\t\t{\r\n\t\t\t\tgoto Exit0;\r\n\t\t\t}\r\n\r\n\t\t\tpbuffer = VirtualAlloc(NULL, dwSize*2, MEM_COMMIT, PAGE_READWRITE);\r\n\r\n\t\t\tif(!pbuffer)\r\n\t\t\t{\r\n\t\t\t\tgoto Exit0;\r\n\t\t\t}\r\n\r\n\t\t\tStatus = ZwQuerySystemInformation(SystemHandleInformation, pbuffer, dwSize*2, NULL);\r\n\r\n\t\t\tif(!NT_SUCCESS(Status))\r\n\t\t\t{\r\n\t\t\t\tgoto Exit0;    \r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tPSYSTEM_HANDLE_INFORMATION1 pHandleInfo = (PSYSTEM_HANDLE_INFORMATION1)pbuffer;\r\n\r\n\tint nCount = 0;\t\t\t//رվĴ\r\n\tfor(nIndex = 0; nIndex < pHandleInfo->NumberOfHandles; nIndex++)\r\n\t{\r\n\t\tif(IsTargetPid(pHandleInfo->Handles[nIndex].UniqueProcessId, Pids, Num))\r\n\t\t{\r\n\t\t\t//\r\n\t\t\tHANDLE hHandle = DuplicateHandleEx(pHandleInfo->Handles[nIndex].UniqueProcessId, \r\n\t\t\t\t\t\t\t\t\t\t(HANDLE)pHandleInfo->Handles[nIndex].HandleValue,\r\n\t\t\t\t\t\t\t\t\t\tDUPLICATE_SAME_ACCESS\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\tif(hHandle == NULL) continue;\r\n\t\r\n\t\t\tStatus = NtQueryObject(hHandle, ObjectNameInformation, szName, 512, &dwFlags);\r\n\r\n\t\t\tif (!NT_SUCCESS(Status))\r\n\t\t\t{\r\n\t\t\t\tCloseHandle(hHandle);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tStatus = NtQueryObject(hHandle, ObjectTypeInformation, szType, 128, &dwFlags);\r\n\r\n\t\t\tif (!NT_SUCCESS(Status))\r\n\t\t\t{\r\n\t\t\t\tCloseHandle(hHandle);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpNameInfo = (POBJECT_NAME_INFORMATION)szName;\r\n\t\t\tpNameType = (POBJECT_NAME_INFORMATION)szType;\r\n\r\n\t\t\tWCHAR TypName[1024] = {0};\r\n\t\t\tWCHAR Name[1024] = {0};\r\n\r\n\t\t\twcsncpy_s(TypName, (WCHAR*)pNameType->Name.Buffer, pNameType->Name.Length/2);\r\n\t\t\twcsncpy_s(Name, (WCHAR*)pNameInfo->Name.Buffer, pNameInfo->Name.Length/2);\r\n\r\n\t\t\t// ƥǷΪҪرյľ\r\n\t\t\tif (0 == wcscmp(TypName, L\"Mutant\"))\r\n\t\t\t{\r\n\t\t\t\tif (wcsstr(Name, L\"_WeChat_App_Instance_Identity_Mutex_Name\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tCloseHandle(hHandle);\r\n\r\n\t\t\t\t\thHandle = DuplicateHandleEx(pHandleInfo->Handles[nIndex].UniqueProcessId, \r\n\t\t\t\t\t\t(HANDLE)pHandleInfo->Handles[nIndex].HandleValue,\r\n\t\t\t\t\t\tDUPLICATE_CLOSE_SOURCE\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif(hHandle)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tOutputDebugStringA(\"+ Patch wechat success!\\n\");\r\n\t\t\t\t\t\tCloseHandle(hHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tOutputDebugStringA(\"- Patch error\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnCount++;\r\n\t\t\t\t\tif (nCount>=2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tgoto Exit0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tCloseHandle(hHandle);\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\nExit0:\r\n\tif (NULL != pbuffer)\r\n\t{\r\n\t\tVirtualFree(pbuffer, 0, MEM_RELEASE);\r\n\t}\r\n\r\n\treturn 0;\r\n}\r\n\r\n\r\n//************************************************************\r\n// : OpenWeChat\r\n// ˵: ΢\r\n//     : GuiShou\r\n// ʱ    : 2019/7/13\r\n//     : void\r\n//   ֵ: void\r\n//***********************************************************\r\nvoid OpenWeChat()\r\n{\r\n\tHKEY hKey = NULL;\r\n\tif(ERROR_SUCCESS != RegOpenKey(HKEY_CURRENT_USER, L\"Software\\\\Tencent\\\\WeChat\", &hKey))\r\n\t{\r\n\t\treturn;\r\n\t}\r\n\t\r\n\tDWORD Type = REG_SZ;\r\n\tWCHAR Path[MAX_PATH] = {0};\r\n\tDWORD cbData = MAX_PATH*sizeof(WCHAR);\r\n\tif(ERROR_SUCCESS != RegQueryValueEx(hKey, L\"InstallPath\", 0, &Type, (LPBYTE)Path, &cbData))\r\n\t{\r\n\t\tgoto __exit;\r\n\t}\r\n\t\r\n\tPathAppend(Path, L\"WeChat.exe\");\r\n\r\n\tShellExecute(NULL, L\"Open\", Path, NULL, NULL, SW_SHOW);\r\n\t\r\n__exit:\r\n\tif(hKey)\r\n\t{\r\n\t\tRegCloseKey(hKey);\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CMultiOpen.h",
    "content": "#pragma once\r\n\r\n#include <Windows.h>\r\n\r\n/*ͷļ*/\r\ntypedef LONG NTSTATUS;\r\n#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)\r\n#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)\r\n\r\ntypedef enum _SYSTEM_INFORMATION_CLASS {\r\n\tSystemBasicInformation,              // 0        Y        N\r\n\tSystemProcessorInformation,          // 1        Y        N\r\n\tSystemPerformanceInformation,        // 2        Y        N\r\n\tSystemTimeOfDayInformation,          // 3        Y        N\r\n\tSystemNotImplemented1,               // 4        Y        N\r\n\tSystemProcessesAndThreadsInformation, // 5       Y        N\r\n\tSystemCallCounts,                    // 6        Y        N\r\n\tSystemConfigurationInformation,      // 7        Y        N\r\n\tSystemProcessorTimes,                // 8        Y        N\r\n\tSystemGlobalFlag,                    // 9        Y        Y\r\n\tSystemNotImplemented2,               // 10       Y        N\r\n\tSystemModuleInformation,             // 11       Y        N\r\n\tSystemLockInformation,               // 12       Y        N\r\n\tSystemNotImplemented3,               // 13       Y        N\r\n\tSystemNotImplemented4,               // 14       Y        N\r\n\tSystemNotImplemented5,               // 15       Y        N\r\n\tSystemHandleInformation,             // 16       Y        N\r\n\tSystemObjectInformation,             // 17       Y        N\r\n\tSystemPagefileInformation,           // 18       Y        N\r\n\tSystemInstructionEmulationCounts,    // 19       Y        N\r\n\tSystemInvalidInfoClass1,             // 20\r\n\tSystemCacheInformation,              // 21       Y        Y\r\n\tSystemPoolTagInformation,            // 22       Y        N\r\n\tSystemProcessorStatistics,           // 23       Y        N\r\n\tSystemDpcInformation,                // 24       Y        Y\r\n\tSystemNotImplemented6,               // 25       Y        N\r\n\tSystemLoadImage,                     // 26       N        Y\r\n\tSystemUnloadImage,                   // 27       N        Y\r\n\tSystemTimeAdjustment,                // 28       Y        Y\r\n\tSystemNotImplemented7,               // 29       Y        N\r\n\tSystemNotImplemented8,               // 30       Y        N\r\n\tSystemNotImplemented9,               // 31       Y        N\r\n\tSystemCrashDumpInformation,          // 32       Y        N\r\n\tSystemExceptionInformation,          // 33       Y        N\r\n\tSystemCrashDumpStateInformation,     // 34       Y        Y/N\r\n\tSystemKernelDebuggerInformation,     // 35       Y        N\r\n\tSystemContextSwitchInformation,      // 36       Y        N\r\n\tSystemRegistryQuotaInformation,      // 37       Y        Y\r\n\tSystemLoadAndCallImage,              // 38       N        Y\r\n\tSystemPrioritySeparation,            // 39       N        Y\r\n\tSystemNotImplemented10,              // 40       Y        N\r\n\tSystemNotImplemented11,              // 41       Y        N\r\n\tSystemInvalidInfoClass2,             // 42\r\n\tSystemInvalidInfoClass3,             // 43\r\n\tSystemTimeZoneInformation,           // 44       Y        N\r\n\tSystemLookasideInformation,          // 45       Y        N\r\n\tSystemSetTimeSlipEvent,              // 46       N        Y\r\n\tSystemCreateSession,                 // 47       N        Y\r\n\tSystemDeleteSession,                 // 48       N        Y\r\n\tSystemInvalidInfoClass4,             // 49\r\n\tSystemRangeStartInformation,         // 50       Y        N\r\n\tSystemVerifierInformation,           // 51       Y        Y\r\n\tSystemAddVerifier,                   // 52       N        Y\r\n\tSystemSessionProcessesInformation    // 53       Y        N\r\n} SYSTEM_INFORMATION_CLASS;\r\n\r\ntypedef struct _CLIENT_ID\r\n{\r\n\tHANDLE UniqueProcess;\r\n\tHANDLE UniqueThread;\r\n}CLIENT_ID,*PCLIENT_ID;\r\n\r\ntypedef struct\r\n{\r\n\tUSHORT Length;\r\n\tUSHORT MaxLen;\r\n\tUSHORT *Buffer;\r\n}UNICODE_STRING, *PUNICODE_STRING;\r\n\r\ntypedef struct _OBJECT_ATTRIBUTES \r\n{\r\n\tULONG Length;\r\n\tHANDLE RootDirectory;\r\n\tPUNICODE_STRING ObjectName;\r\n\tULONG Attributes;\r\n\tPVOID SecurityDescriptor;\r\n\tPVOID SecurityQualityOfService;\r\n} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; \r\n\r\ntypedef struct _IO_COUNTERSEX {\r\n\tLARGE_INTEGER ReadOperationCount;\r\n\tLARGE_INTEGER WriteOperationCount;\r\n\tLARGE_INTEGER OtherOperationCount;\r\n\tLARGE_INTEGER ReadTransferCount;\r\n\tLARGE_INTEGER WriteTransferCount;\r\n\tLARGE_INTEGER OtherTransferCount;\r\n} IO_COUNTERSEX, *PIO_COUNTERSEX;\r\n\r\ntypedef enum {\r\n\tStateInitialized,\r\n\tStateReady,\r\n\tStateRunning,\r\n\tStateStandby,\r\n\tStateTerminated,\r\n\tStateWait,\r\n\tStateTransition,\r\n\tStateUnknown\r\n} THREAD_STATE;\r\n\r\ntypedef struct _VM_COUNTERS {\r\n\tSIZE_T PeakVirtualSize;\r\n\tSIZE_T VirtualSize;\r\n\tULONG PageFaultCount;\r\n\tSIZE_T PeakWorkingSetSize;\r\n\tSIZE_T WorkingSetSize;\r\n\tSIZE_T QuotaPeakPagedPoolUsage;\r\n\tSIZE_T QuotaPagedPoolUsage;\r\n\tSIZE_T QuotaPeakNonPagedPoolUsage;\r\n\tSIZE_T QuotaNonPagedPoolUsage;\r\n\tSIZE_T PagefileUsage;\r\n\tSIZE_T PeakPagefileUsage;\r\n} VM_COUNTERS;\r\ntypedef VM_COUNTERS *PVM_COUNTERS;\r\n\r\ntypedef struct _SYSTEM_THREADS {\r\n\tLARGE_INTEGER KernelTime;\r\n\tLARGE_INTEGER UserTime;\r\n\tLARGE_INTEGER CreateTime;\r\n\tULONG WaitTime;\r\n\tPVOID StartAddress;\r\n\tCLIENT_ID ClientId;\r\n\tULONG Priority;\r\n\tULONG BasePriority;\r\n\tULONG ContextSwitchCount;\r\n\tTHREAD_STATE State;\r\n\tULONG WaitReason;\r\n} SYSTEM_THREADS, *PSYSTEM_THREADS;\r\n\r\ntypedef struct _SYSTEM_PROCESSES { // Information Class 5\r\n\tULONG NextEntryDelta;\r\n\tULONG ThreadCount;\r\n\tULONG Reserved1[6];\r\n\tLARGE_INTEGER CreateTime;\r\n\tLARGE_INTEGER UserTime;\r\n\tLARGE_INTEGER KernelTime;\r\n\tUNICODE_STRING ProcessName;\r\n\tULONG BasePriority;\r\n\tULONG ProcessId;\r\n\tULONG InheritedFromProcessId;\r\n\tULONG HandleCount;\r\n\tULONG Reserved2[2];\r\n\tVM_COUNTERS VmCounters;\r\n\tIO_COUNTERSEX IoCounters;  // Windows 2000 only\r\n\tSYSTEM_THREADS Threads[1];\r\n} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;\r\n\r\ntypedef struct _SYSTEM_HANDLE_INFORMATION\r\n{\r\n\tULONG            ProcessId;\r\n\tUCHAR            ObjectTypeNumber;\r\n\tUCHAR            Flags;\r\n\tUSHORT            Handle;\r\n\tPVOID            Object;\r\n\tACCESS_MASK        GrantedAccess;\r\n} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;\r\n\r\ntypedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {\r\n\tUSHORT UniqueProcessId;\r\n\tUSHORT CreatorBackTraceIndex;\r\n\tUCHAR ObjectTypeIndex;\r\n\tUCHAR HandleAttributes;\r\n\tUSHORT HandleValue;\r\n\tPVOID Object;\r\n\tULONG GrantedAccess;\r\n} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;\r\n\r\ntypedef struct _SYSTEM_HANDLE_INFORMATION1 {\r\n\tULONG NumberOfHandles;\r\n\tSYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[ 1 ];\r\n} SYSTEM_HANDLE_INFORMATION1, *PSYSTEM_HANDLE_INFORMATION1;\r\n\r\ntypedef enum _OBJECT_INFORMATION_CLASS {\r\n\tObjectBasicInformation,\r\n\tObjectNameInformation,\r\n\tObjectTypeInformation,\r\n\tObjectAllInformation,\r\n\tObjectDataInformation\r\n} OBJECT_INFORMATION_CLASS;\r\n\r\ntypedef struct _OBJECT_NAME_INFORMATION {\r\n\tUNICODE_STRING Name;\r\n} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;\r\n\r\n\r\n\r\nvoid OpenWeChat();\r\nint PatchWeChat();\r\nBOOL IsTargetPid(DWORD Pid, DWORD* Pids, int num);\r\nint GetProcIds(LPWSTR Name, DWORD* Pids);\r\nHANDLE DuplicateHandleEx(DWORD pid, HANDLE h, DWORD flags);\r\nBOOL ElevatePrivileges();"
  },
  {
    "path": "WeChatRobot/CMyTableCtrl.cpp",
    "content": "﻿// CMyTableCtrl.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CMyTableCtrl.h\"\r\n\r\n\r\n// CMyTableCtrl\r\n\r\nIMPLEMENT_DYNAMIC(CMyTableCtrl, CTabCtrl)\r\n\r\nCMyTableCtrl::CMyTableCtrl()\r\n{\r\n\r\n}\r\n\r\nCMyTableCtrl::~CMyTableCtrl()\r\n{\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CMyTableCtrl, CTabCtrl)\r\n\tON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTableCtrl::OnTcnSelchange)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n\r\n// CMyTableCtrl 消息处理程序\r\n\r\n\r\n\r\n\r\nvoid CMyTableCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)\r\n{\r\n\tint nNum = GetCurSel();\r\n\tfor (int i = 0; i < 3; i++)\r\n\t{\r\n\t\tif (i == nNum)\r\n\t\t{\r\n\t\t\tm_Dia[i]->ShowWindow(SW_SHOW);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tm_Dia[i]->ShowWindow(SW_HIDE);\r\n\t\t}\r\n\t}\r\n\t*pResult = 0;\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CMyTableCtrl.h",
    "content": "#pragma once\r\n\r\n\r\n// CMyTableCtrl\r\n\r\nclass CMyTableCtrl : public CTabCtrl\r\n{\r\n\tDECLARE_DYNAMIC(CMyTableCtrl)\r\n\r\npublic:\r\n\tCMyTableCtrl();\r\n\tvirtual ~CMyTableCtrl();\r\n\tCDialogEx* m_Dia[3];\r\n\r\nprotected:\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tafx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);\r\n};\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/COpenUrl.cpp",
    "content": "﻿// COpenUrl.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"COpenUrl.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// COpenUrl 对话框\r\n\r\nIMPLEMENT_DYNAMIC(COpenUrl, CDialogEx)\r\n\r\nCOpenUrl::COpenUrl(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_OpenUrl, pParent)\r\n\t, m_urls(_T(\"www.baidu.com\"))\r\n{\r\n\r\n}\r\n\r\nCOpenUrl::~COpenUrl()\r\n{\r\n}\r\n\r\nvoid COpenUrl::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_urls);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(COpenUrl, CDialogEx)\r\n\tON_BN_CLICKED(IDC_OPEN, &COpenUrl::OnBnClickedOpen)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// COpenUrl 消息处理程序\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedOpen\r\n// 函数说明: 打开浏览器按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/10\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid COpenUrl::OnBnClickedOpen()\r\n{\r\n\tUpdateData(TRUE);\r\n\tif (m_urls==\"\")\r\n\t{\r\n\t\tMessageBoxA(NULL,\"url不能为空\", \"Tip\", MB_OK);\r\n\t\treturn;\r\n\t}\r\n\r\n\twchar_t urls[500] = { 0 };\r\n\twcscpy_s(urls, wcslen(m_urls) + 1, m_urls);\r\n\r\n\r\n\t//点击按钮 拿到url 发送给控制端\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT openurl;\r\n\topenurl.dwData = WM_OpenUrl;\r\n\topenurl.cbData = (wcslen(urls) + 1) * 2;\r\n\topenurl.lpData = urls;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&openurl);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/COpenUrl.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// COpenUrl 对话框\r\n\r\nclass COpenUrl : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(COpenUrl)\r\n\r\npublic:\r\n\tCOpenUrl(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~COpenUrl();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_OpenUrl };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_urls;\r\n\tafx_msg void OnBnClickedOpen();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CPay.cpp",
    "content": "﻿// CPay.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CPay.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CPay 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CPay, CDialogEx)\r\n\r\nCPay::CPay(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_PAY, pParent)\r\n{\r\n\r\n}\r\n\r\nCPay::~CPay()\r\n{\r\n}\r\n\r\nvoid CPay::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CPay, CDialogEx)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CPay 消息处理程序\r\n"
  },
  {
    "path": "WeChatRobot/CPay.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CPay 对话框\r\n\r\nclass CPay : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CPay)\r\n\r\npublic:\r\n\tCPay(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CPay();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_PAY };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CRoomAnnouncement.cpp",
    "content": "﻿// CRoomAnnouncement.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CRoomAnnouncement.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CRoomAnnouncement 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CRoomAnnouncement, CDialogEx)\r\n\r\nCRoomAnnouncement::CRoomAnnouncement(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_ROOMANNOUNCE, pParent), m_ChatRoomWxid(TempWxid)\r\n\t, m_Announcement(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCRoomAnnouncement::~CRoomAnnouncement()\r\n{\r\n}\r\n\r\nvoid CRoomAnnouncement::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_Announcement);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CRoomAnnouncement, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SendRoomAnnouncement, &CRoomAnnouncement::OnBnClickedSendroomannouncement)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CRoomAnnouncement 消息处理程序\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendroomannouncement\r\n// 函数说明: 响应发送群公告按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CRoomAnnouncement::OnBnClickedSendroomannouncement()\r\n{\r\n\t//将控件的值更新到变量\r\n\tUpdateData(TRUE);\r\n\r\n\t//构造发送的数据\r\n\tMessageStruct* pMessage = new MessageStruct(m_ChatRoomWxid, m_Announcement);\r\n\r\n\t//发送到服务端\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT chatroommsg;\r\n\tchatroommsg.dwData = WM_SetRoomAnnouncement;\r\n\tchatroommsg.cbData = sizeof(MessageStruct);\r\n\tchatroommsg.lpData = pMessage;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&chatroommsg);\r\n\r\n\tdelete pMessage;\r\n\tm_Announcement = \"\";\r\n\tUpdateData(FALSE);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CRoomAnnouncement.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CRoomAnnouncement 对话框\r\n\r\nclass CRoomAnnouncement : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CRoomAnnouncement)\r\n\r\npublic:\r\n\tCRoomAnnouncement(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CRoomAnnouncement();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ROOMANNOUNCE };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_Announcement;\r\n\tafx_msg void OnBnClickedSendroomannouncement();\r\n\r\n\tCString m_ChatRoomWxid;\t\t//从好友列表窗口传过来的群ID\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSendChatRoomAt.cpp",
    "content": "﻿// CSendChatRoomAt.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSendChatRoomAt.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CSendChatRoomAt 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSendChatRoomAt, CDialogEx)\r\n\r\nCSendChatRoomAt::CSendChatRoomAt(LPCTSTR TempWxid, LPCTSTR TempNickName, LPCTSTR TempChatRoomid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SENDAT, pParent), m_MemberWxid(TempWxid), m_MemberNickName(TempNickName), m_ChatRoomid(TempChatRoomid)\r\n\t, m_msg(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSendChatRoomAt::~CSendChatRoomAt()\r\n{\r\n}\r\n\r\nvoid CSendChatRoomAt::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_msg);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSendChatRoomAt, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SendAt, &CSendChatRoomAt::OnBnClickedSendat)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CSendChatRoomAt 消息处理程序\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendat\r\n// 函数说明: 响应发送按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/23\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSendChatRoomAt::OnBnClickedSendat()\r\n{\r\n\tUpdateData(TRUE);\r\n\tunique_ptr<AtMsg> msg(new AtMsg);\r\n\twcscpy_s(msg->chatroomid, wcslen(m_ChatRoomid) + 1, m_ChatRoomid);\r\n\twcscpy_s(msg->memberwxid, wcslen(m_MemberWxid) + 1, m_MemberWxid);\r\n\twcscpy_s(msg->membernickname, wcslen(m_MemberNickName) + 1, m_MemberNickName);\r\n\twcscpy_s(msg->msgcontent, wcslen(m_msg) + 1, m_msg);\r\n\r\n\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT atmsgdata;\r\n\tatmsgdata.dwData = WM_SendAtMsg;\r\n\tatmsgdata.cbData = sizeof(AtMsg);\r\n\tatmsgdata.lpData = msg.get();\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&atmsgdata);\r\n\r\n\tm_msg = \"\";\r\n\tUpdateData(FALSE);\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatRobot/CSendChatRoomAt.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSendChatRoomAt 对话框\r\n\r\nclass CSendChatRoomAt : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSendChatRoomAt)\r\n\r\npublic:\r\n\tCSendChatRoomAt(LPCTSTR TempWxid, LPCTSTR TempNickName, LPCTSTR TempChatRoomid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSendChatRoomAt();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SENDAT };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_msg;\r\n\tafx_msg void OnBnClickedSendat();\r\n\r\n\r\n\tCString m_MemberWxid;\t\t//从好友列表窗口传过来的微信ID\r\n\tCString m_MemberNickName;\t\t//从好友列表窗口传过来的微信昵称\r\n\tCString m_ChatRoomid;\t\t//从好友列表窗口传过来的群ID\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSendMsg.cpp",
    "content": "﻿// CSendMsg.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSendMsg.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n#define 文本 0\r\n#define 文件 1\r\n#define 图片 2\r\n#define 视频 3\r\n#define Gif 4\r\n\r\n\r\n// CSendMsg 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSendMsg, CDialogEx)\r\n\r\nCSendMsg::CSendMsg(LPCTSTR TempWxid,CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SendMsg, pParent), m_wxid(TempWxid)\r\n\t, m_Radio(0)\r\n\t, m_Content(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSendMsg::~CSendMsg()\r\n{\r\n}\r\n\r\nvoid CSendMsg::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Radio(pDX, IDC_RADIO1, m_Radio);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_Content);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSendMsg, CDialogEx)\r\n\r\n\tON_BN_CLICKED(IDC_Send, &CSendMsg::OnBnClickedSend)\r\n\tON_BN_CLICKED(IDC_RADIO1, &CSendMsg::OnBnClickedRadio1)\r\n\tON_BN_CLICKED(IDC_RADIO2, &CSendMsg::OnBnClickedRadio1)\r\n\tON_BN_CLICKED(IDC_RADIO3, &CSendMsg::OnBnClickedRadio1)\r\n\tON_BN_CLICKED(IDC_RADIO4, &CSendMsg::OnBnClickedRadio1)\r\n\tON_WM_DROPFILES()\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CSendMsg 消息处理程序\r\n\r\n\r\nBOOL CSendMsg::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\r\n\treturn TRUE;  // return TRUE unless you set the focus to a control\r\n\t\t\t\t  // 异常: OCX 属性页应返回 FALSE\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSend\r\n// 函数说明: 响应发送按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSendMsg::OnBnClickedSend()\r\n{\r\n\t//同步控件数据到变量\r\n\tUpdateData(TRUE);\r\n\r\n\tif (m_Content == \"\")\r\n\t{\r\n\t\tMessageBoxW(L\"消息不能为空\", L\"Tip\", 0);\r\n\t\treturn;\r\n\t}\r\n\r\n\r\n\t//不是发送文本消息 检查文件是否存在\r\n\tif (m_Radio!=文本)\r\n\t{\r\n\t\t\r\n\t\tif (GetFileAttributes(m_Content) == INVALID_FILE_ATTRIBUTES)\r\n\t\t{\r\n\t\t\tMessageBox(L\"文件不存在 请重试\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t//填充数据到结构体\r\n\tMessageStruct* message = new MessageStruct(m_wxid, m_Content);\r\n\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT MessageData;\r\n\r\n\t//如果是文本就发送文本消息 如果是文件就发送文件消息\r\n\tif (m_Radio == 文本)\r\n\t{\r\n\t\tMessageData.dwData = WM_SendTextMessage;\r\n\t}\r\n\telse if (m_Radio == 文件)\r\n\t{\r\n\r\n\t\t//发送文件消息\r\n\t\tMessageData.dwData = WM_SendFileMessage;\r\n\t}\r\n\telse if (m_Radio == 图片)\r\n\t{\r\n\t\t//发送图片消息\r\n\t\tMessageData.dwData = WM_SendImageMessage;\r\n\t}\r\n\telse if (m_Radio == 视频)\r\n\t{\r\n\t\t//发送视频消息\r\n\t\tMessageData.dwData = WM_SendVideoMessage;\r\n\t}\r\n\telse if (m_Radio == Gif)\r\n\t{\r\n\t\t//发送Gif消息\r\n\t\tMessageData.dwData = WM_SendGifMessage;\r\n\t}\r\n\r\n\tMessageData.cbData = sizeof(MessageStruct);\r\n\tMessageData.lpData = message;\r\n\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&MessageData);\r\n\r\n\t//清空文本\r\n\tm_Content = \"\";\r\n\tdelete message;\r\n\tUpdateData(FALSE);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedRadio1\r\n// 函数说明: 响应点击单选框\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/6\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSendMsg::OnBnClickedRadio1()\r\n{\r\n\t// TODO: 在此添加控件通知处理程序代码\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnDropFiles \r\n// 函数说明: 响应拖拽文件\r\n// 作\t 者: GuiShou\r\n// 时\t 间: 2019/7/6\r\n// 参\t 数: HDROP hDropInfo 拖拽文件句柄\r\n// 返 回 值: void\r\n//************************************************************\r\nvoid CSendMsg::OnDropFiles(HDROP hDropInfo)\r\n{\r\n\t//获取文件路径\r\n\tTCHAR szPath[MAX_PATH] = { 0 };\r\n\tDragQueryFile(hDropInfo, 0, szPath, MAX_PATH);\r\n\r\n\t//显示到控件\r\n\tm_Content = szPath;\r\n\r\n\tUpdateData(FALSE);\r\n\r\n\tCDialogEx::OnDropFiles(hDropInfo);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CSendMsg.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSendMsg 对话框\r\n\r\nclass CSendMsg : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSendMsg)\r\n\r\npublic:\r\n\tCSendMsg(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSendMsg();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SendMsg };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\npublic: \r\n\tCString m_wxid;\t\t//从好友列表窗口传过来的微信ID\r\n\tvirtual BOOL OnInitDialog();\r\n\tafx_msg void OnBnClickedSend();\r\n\tint m_Radio;\r\n\tafx_msg void OnBnClickedRadio1();\r\n\r\n\tCString m_Content;\r\n\tafx_msg void OnDropFiles(HDROP hDropInfo);\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSendXmlAricle.cpp",
    "content": "﻿// CSendXmlAricle.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSendXmlAricle.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CSendXmlAricle 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSendXmlAricle, CDialogEx)\r\n\r\nCSendXmlAricle::CSendXmlAricle(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SendXmlArticle, pParent)\r\n\t, m_selfwxid(_T(\"\"))\r\n\t, m_recverwxid(_T(\"\"))\r\n\t, m_title(_T(\"\"))\r\n\t, m_subtitle(_T(\"\"))\r\n\t, m_linkurl(_T(\"\"))\r\n\t, m_picpath(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSendXmlAricle::~CSendXmlAricle()\r\n{\r\n}\r\n\r\nvoid CSendXmlAricle::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_selfwxid);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_recverwxid);\r\n\tDDX_Text(pDX, IDC_EDIT6, m_title);\r\n\tDDX_Text(pDX, IDC_EDIT7, m_subtitle);\r\n\tDDX_Text(pDX, IDC_EDIT8, m_linkurl);\r\n\tDDX_Text(pDX, IDC_EDIT9, m_picpath);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSendXmlAricle, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SendXmlArticle, &CSendXmlAricle::OnBnClickedSendxmlarticle)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CSendXmlAricle 消息处理程序\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendxmlarticle\r\n// 函数说明: 发送xml文章按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/9/30\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSendXmlAricle::OnBnClickedSendxmlarticle()\r\n{\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CSendXmlAricle.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSendXmlAricle 对话框\r\n\r\nclass CSendXmlAricle : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSendXmlAricle)\r\n\r\npublic:\r\n\tCSendXmlAricle(CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSendXmlAricle();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SendXmlArticle };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tCString m_selfwxid;\r\n\tCString m_recverwxid;\r\n\tCString m_title;\r\n\tCString m_subtitle;\r\n\tCString m_linkurl;\r\n\tCString m_picpath;\r\n\tafx_msg void OnBnClickedSendxmlarticle();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSendXmlCard.cpp",
    "content": "﻿// CSendXmlCard.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSendXmlCard.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CSendXmlCard 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSendXmlCard, CDialogEx)\r\n\r\nCSendXmlCard::CSendXmlCard(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SendCard, pParent), m_Wxid(TempWxid)\r\n\t, m_SendWxid(_T(\"\"))\r\n\t, m_SendNickName(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSendXmlCard::~CSendXmlCard()\r\n{\r\n}\r\n\r\nvoid CSendXmlCard::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_SendWxid);\r\n\tDDX_Text(pDX, IDC_EDIT2, m_SendNickName);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSendXmlCard, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SendCard, &CSendXmlCard::OnBnClickedSendcard)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSendcard\r\n// 函数说明: 响应发送按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/10\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSendXmlCard::OnBnClickedSendcard()\r\n{\r\n\tUpdateData(TRUE);\r\n\r\n\tunique_ptr<XmlCardMessage> pCardMessage(new XmlCardMessage);\r\n\twcscpy_s(pCardMessage->RecverWxid, wcslen(m_Wxid) + 1, m_Wxid);\r\n\twcscpy_s(pCardMessage->SendWxid, wcslen(m_SendWxid) + 1, m_SendWxid);\r\n\twcscpy_s(pCardMessage->NickName, wcslen(m_SendNickName) + 1, m_SendNickName);\r\n\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT sendcard;\r\n\tsendcard.dwData = WM_SendXmlCard;\r\n\tsendcard.cbData = sizeof(XmlCardMessage);\r\n\tsendcard.lpData = pCardMessage.get();\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&sendcard);\r\n\r\n\tm_SendWxid = \"\";\r\n\tm_SendNickName = \"\";\r\n\tUpdateData(FALSE);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CSendXmlCard.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSendXmlCard 对话框\r\n\r\nclass CSendXmlCard : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSendXmlCard)\r\n\r\npublic:\r\n\tCSendXmlCard(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSendXmlCard();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SendCard };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\n\tCString m_Wxid;\t\t//从好友列表窗口传过来的微信ID\r\npublic:\r\n\tCString m_SendWxid;\r\n\tCString m_SendNickName;\r\n\tafx_msg void OnBnClickedSendcard();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSetRemark.cpp",
    "content": "﻿// CSetRemark.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSetRemark.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n// CSetRemark 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSetRemark, CDialogEx)\r\n\r\nCSetRemark::CSetRemark(LPCTSTR TempWxid, CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SetRemark, pParent), m_wxid(TempWxid)\r\n\t, m_remark(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSetRemark::~CSetRemark()\r\n{\r\n}\r\n\r\nvoid CSetRemark::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_remark);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSetRemark, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SetRemark, &CSetRemark::OnBnClickedSetremark)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CSetRemark 消息处理程序\r\n\r\n\r\nvoid CSetRemark::OnBnClickedSetremark()\r\n{\r\n\t\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CSetRemark.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSetRemark 对话框\r\n\r\nclass CSetRemark : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSetRemark)\r\n\r\npublic:\r\n\tCSetRemark(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSetRemark();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SetRemark };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\npublic:\r\n\tCString m_wxid;\t\t//从好友列表窗口传过来的微信ID\r\n\tCString m_remark;\r\n\tafx_msg void OnBnClickedSetremark();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/CSetRoomName.cpp",
    "content": "﻿// CSetRoomName.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"CSetRoomName.h\"\r\n#include \"afxdialogex.h\"\r\n\r\n\r\n// CSetRoomName 对话框\r\n\r\nIMPLEMENT_DYNAMIC(CSetRoomName, CDialogEx)\r\n\r\nCSetRoomName::CSetRoomName(LPCTSTR TempWxid,CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_SET_ROOM_NAME, pParent), m_ChatRoomWxid(TempWxid)\r\n\t, m_roomname(_T(\"\"))\r\n{\r\n\r\n}\r\n\r\nCSetRoomName::~CSetRoomName()\r\n{\r\n}\r\n\r\nvoid CSetRoomName::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n\tDDX_Text(pDX, IDC_EDIT1, m_roomname);\r\n}\r\n\r\n\r\nBEGIN_MESSAGE_MAP(CSetRoomName, CDialogEx)\r\n\tON_BN_CLICKED(IDC_SetRoomName, &CSetRoomName::OnBnClickedSetroomname)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CSetRoomName 消息处理程序\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedSetroomname\r\n// 函数说明: 响应修改群名称按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/14\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CSetRoomName::OnBnClickedSetroomname()\r\n{\r\n\tUpdateData(TRUE);\r\n\r\n\tMessageStruct* roomname = new MessageStruct(m_ChatRoomWxid, m_roomname);\r\n\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT setroomnamedata;\r\n\tsetroomnamedata.dwData = WM_SetRoomName;\r\n\tsetroomnamedata.cbData = sizeof(MessageStruct);\r\n\tsetroomnamedata.lpData = roomname;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&setroomnamedata);\r\n\r\n\tm_roomname = \"\";\r\n\tdelete roomname;\r\n\tUpdateData(FALSE);\r\n}\r\n"
  },
  {
    "path": "WeChatRobot/CSetRoomName.h",
    "content": "﻿#pragma once\r\n\r\n\r\n// CSetRoomName 对话框\r\n\r\nclass CSetRoomName : public CDialogEx\r\n{\r\n\tDECLARE_DYNAMIC(CSetRoomName)\r\n\r\npublic:\r\n\tCSetRoomName(LPCTSTR TempWxid, CWnd* pParent = nullptr);   // 标准构造函数\r\n\tvirtual ~CSetRoomName();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_SET_ROOM_NAME };\r\n#endif\r\n\r\nprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n\r\npublic:\r\n\tCString m_ChatRoomWxid;\t\t//从好友列表窗口传过来的群ID\r\n\tCString m_roomname;\r\n\tafx_msg void OnBnClickedSetroomname();\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/WeChatRobot.cpp",
    "content": "﻿\r\n// WeChatRobot.cpp: 定义应用程序的类行为。\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"WeChatRobotDlg.h\"\r\n\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#endif\r\n\r\n\r\n// CWeChatRobotApp\r\n\r\nBEGIN_MESSAGE_MAP(CWeChatRobotApp, CWinApp)\r\n\tON_COMMAND(ID_HELP, &CWinApp::OnHelp)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CWeChatRobotApp 构造\r\n\r\nCWeChatRobotApp::CWeChatRobotApp()\r\n{\r\n\t// 支持重新启动管理器\r\n\tm_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;\r\n\r\n\t// TODO: 在此处添加构造代码，\r\n\t// 将所有重要的初始化放置在 InitInstance 中\r\n}\r\n\r\n\r\n// 唯一的 CWeChatRobotApp 对象\r\n\r\nCWeChatRobotApp theApp;\r\n\r\n\r\n// CWeChatRobotApp 初始化\r\n\r\nBOOL CWeChatRobotApp::InitInstance()\r\n{\r\n\t// 如果一个运行在 Windows XP 上的应用程序清单指定要\r\n\t// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式，\r\n\t//则需要 InitCommonControlsEx()。  否则，将无法创建窗口。\r\n\tINITCOMMONCONTROLSEX InitCtrls;\r\n\tInitCtrls.dwSize = sizeof(InitCtrls);\r\n\t// 将它设置为包括所有要在应用程序中使用的\r\n\t// 公共控件类。\r\n\tInitCtrls.dwICC = ICC_WIN95_CLASSES;\r\n\tInitCommonControlsEx(&InitCtrls);\r\n\r\n\tCWinApp::InitInstance();\r\n\r\n\r\n\tAfxEnableControlContainer();\r\n\r\n\t// 创建 shell 管理器，以防对话框包含\r\n\t// 任何 shell 树视图控件或 shell 列表视图控件。\r\n\tCShellManager *pShellManager = new CShellManager;\r\n\r\n\t// 激活“Windows Native”视觉管理器，以便在 MFC 控件中启用主题\r\n\tCMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));\r\n\r\n\t// 标准初始化\r\n\t// 如果未使用这些功能并希望减小\r\n\t// 最终可执行文件的大小，则应移除下列\r\n\t// 不需要的特定初始化例程\r\n\t// 更改用于存储设置的注册表项\r\n\t// TODO: 应适当修改该字符串，\r\n\t// 例如修改为公司或组织名\r\n\tSetRegistryKey(_T(\"应用程序向导生成的本地应用程序\"));\r\n\r\n\tCWeChatRobotDlg dlg;\r\n\tm_pMainWnd = &dlg;\r\n\tINT_PTR nResponse = dlg.DoModal();\r\n\tif (nResponse == IDOK)\r\n\t{\r\n\t\t// TODO: 在此放置处理何时用\r\n\t\t//  “确定”来关闭对话框的代码\r\n\t}\r\n\telse if (nResponse == IDCANCEL)\r\n\t{\r\n\t\t// TODO: 在此放置处理何时用\r\n\t\t//  “取消”来关闭对话框的代码\r\n\t}\r\n\telse if (nResponse == -1)\r\n\t{\r\n\t\tTRACE(traceAppMsg, 0, \"警告: 对话框创建失败，应用程序将意外终止。\\n\");\r\n\t\tTRACE(traceAppMsg, 0, \"警告: 如果您在对话框上使用 MFC 控件，则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\\n\");\r\n\t}\r\n\r\n\t// 删除上面创建的 shell 管理器。\r\n\tif (pShellManager != nullptr)\r\n\t{\r\n\t\tdelete pShellManager;\r\n\t}\r\n\r\n#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)\r\n\tControlBarCleanUp();\r\n#endif\r\n\r\n\t// 由于对话框已关闭，所以将返回 FALSE 以便退出应用程序，\r\n\t//  而不是启动应用程序的消息泵。\r\n\treturn FALSE;\r\n}\r\n\r\n"
  },
  {
    "path": "WeChatRobot/WeChatRobot.h",
    "content": "﻿\r\n// WeChatRobot.h: PROJECT_NAME 应用程序的主头文件\r\n//\r\n\r\n#pragma once\r\n\r\n\r\n#ifndef __AFXWIN_H__\r\n\t#error \"在包含此文件之前包含“stdafx.h”以生成 PCH 文件\"\r\n#endif\r\n\r\n#include \"resource.h\"\t\t// 主符号\r\n\r\n\r\n// CWeChatRobotApp:\r\n// 有关此类的实现，请参阅 WeChatRobot.cpp\r\n//\r\n\r\nclass CWeChatRobotApp : public CWinApp\r\n{\r\npublic:\r\n\tCWeChatRobotApp();\r\n\r\n// 重写\r\npublic:\r\n\tvirtual BOOL InitInstance();\r\n\r\n// 实现\r\n\r\n\tDECLARE_MESSAGE_MAP()\r\n};\r\n\r\nextern CWeChatRobotApp theApp;\r\n"
  },
  {
    "path": "WeChatRobot/WeChatRobot.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>15.0</VCProjectVersion>\r\n    <ProjectGuid>{155FAB13-5BFA-4845-A8B3-4CA5F9659347}</ProjectGuid>\r\n    <Keyword>MFCProj</Keyword>\r\n    <RootNamespace>WeChatRobot</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Static</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Dynamic</UseOfMfc>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <UseOfMfc>Dynamic</UseOfMfc>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <IncludePath>..\\openssl-1.0.2l-win32-msvc100\\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <ValidateAllParameters>true</ValidateAllParameters>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <ValidateAllParameters>true</ValidateAllParameters>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <AdditionalDependencies>windowscodecs.lib</AdditionalDependencies>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <ValidateAllParameters>true</ValidateAllParameters>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>Use</PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n    <Midl>\r\n      <MkTypLibCompatible>false</MkTypLibCompatible>\r\n      <ValidateAllParameters>true</ValidateAllParameters>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n    </Midl>\r\n    <ResourceCompile>\r\n      <Culture>0x0804</Culture>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n    </ResourceCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"CAboutAuthor.h\" />\r\n    <ClInclude Include=\"CAddChatRoomMember.h\" />\r\n    <ClInclude Include=\"CAddUser.h\" />\r\n    <ClInclude Include=\"CChatRecords.h\" />\r\n    <ClInclude Include=\"CChatRoomMember.h\" />\r\n    <ClInclude Include=\"CCreateChatRoom.h\" />\r\n    <ClInclude Include=\"CDecryptImage.h\" />\r\n    <ClInclude Include=\"CFollowAccount.h\" />\r\n    <ClInclude Include=\"CFriendInfo.h\" />\r\n    <ClInclude Include=\"CFriendList.h\" />\r\n    <ClInclude Include=\"CFunctions.h\" />\r\n    <ClInclude Include=\"CInformation.h\" />\r\n    <ClInclude Include=\"CInjectTools.h\" />\r\n    <ClInclude Include=\"CInviteGroupMember.h\" />\r\n    <ClInclude Include=\"CMain.h\" />\r\n    <ClInclude Include=\"CModifyVersion.h\" />\r\n    <ClInclude Include=\"CMultiOpen.h\" />\r\n    <ClInclude Include=\"CMyTableCtrl.h\" />\r\n    <ClInclude Include=\"COpenUrl.h\" />\r\n    <ClInclude Include=\"CPay.h\" />\r\n    <ClInclude Include=\"CRoomAnnouncement.h\" />\r\n    <ClInclude Include=\"CSendChatRoomAt.h\" />\r\n    <ClInclude Include=\"CSendMsg.h\" />\r\n    <ClInclude Include=\"CSendXmlAricle.h\" />\r\n    <ClInclude Include=\"CSendXmlCard.h\" />\r\n    <ClInclude Include=\"CSetRemark.h\" />\r\n    <ClInclude Include=\"CSetRoomName.h\" />\r\n    <ClInclude Include=\"data.h\" />\r\n    <ClInclude Include=\"message.h\" />\r\n    <ClInclude Include=\"Resource.h\" />\r\n    <ClInclude Include=\"stdafx.h\" />\r\n    <ClInclude Include=\"targetver.h\" />\r\n    <ClInclude Include=\"WeChatRobot.h\" />\r\n    <ClInclude Include=\"WeChatRobotDlg.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"CAboutAuthor.cpp\" />\r\n    <ClCompile Include=\"CAddChatRoomMember.cpp\" />\r\n    <ClCompile Include=\"CAddUser.cpp\" />\r\n    <ClCompile Include=\"CChatRecords.cpp\" />\r\n    <ClCompile Include=\"CChatRoomMember.cpp\" />\r\n    <ClCompile Include=\"CCreateChatRoom.cpp\" />\r\n    <ClCompile Include=\"CDecryptImage.cpp\" />\r\n    <ClCompile Include=\"CFollowAccount.cpp\" />\r\n    <ClCompile Include=\"CFriendInfo.cpp\" />\r\n    <ClCompile Include=\"CFriendList.cpp\" />\r\n    <ClCompile Include=\"CFunctions.cpp\" />\r\n    <ClCompile Include=\"CInformation.cpp\" />\r\n    <ClCompile Include=\"CInjectTools.cpp\" />\r\n    <ClCompile Include=\"CInviteGroupMember.cpp\" />\r\n    <ClCompile Include=\"CMain.cpp\" />\r\n    <ClCompile Include=\"CModifyVersion.cpp\" />\r\n    <ClCompile Include=\"CMultiOpen.cpp\" />\r\n    <ClCompile Include=\"CMyTableCtrl.cpp\" />\r\n    <ClCompile Include=\"COpenUrl.cpp\" />\r\n    <ClCompile Include=\"CPay.cpp\" />\r\n    <ClCompile Include=\"CRoomAnnouncement.cpp\" />\r\n    <ClCompile Include=\"CSendChatRoomAt.cpp\" />\r\n    <ClCompile Include=\"CSendMsg.cpp\" />\r\n    <ClCompile Include=\"CSendXmlAricle.cpp\" />\r\n    <ClCompile Include=\"CSendXmlCard.cpp\" />\r\n    <ClCompile Include=\"CSetRemark.cpp\" />\r\n    <ClCompile Include=\"CSetRoomName.cpp\" />\r\n    <ClCompile Include=\"stdafx.cpp\">\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">Create</PrecompiledHeader>\r\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">Create</PrecompiledHeader>\r\n    </ClCompile>\r\n    <ClCompile Include=\"WeChatRobot.cpp\" />\r\n    <ClCompile Include=\"WeChatRobotDlg.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"WeChatRobot.rc\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"res\\WeChatRobot.rc2\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Image Include=\"res\\pay.bmp\" />\r\n    <Image Include=\"res\\WeChat.ico\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "WeChatRobot/WeChatRobot.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"源文件\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"头文件\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"资源文件\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"注入器\">\r\n      <UniqueIdentifier>{193408ff-e557-4e8f-a7f7-14adeb59a41c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"登陆窗口\">\r\n      <UniqueIdentifier>{2a2cdfc5-e48a-46dc-a9d6-1c6a1c1da7a5}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"主窗口\">\r\n      <UniqueIdentifier>{e972c32d-5869-46fe-b699-7294185d45db}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\">\r\n      <UniqueIdentifier>{4b8d265e-eb85-4bc0-b70b-94f16ada0131}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"聊天记录\">\r\n      <UniqueIdentifier>{1434472e-7d72-4ace-9c79-2de3a3719841}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\">\r\n      <UniqueIdentifier>{cf13cba3-0048-4828-9832-53b1fa18d624}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"选项卡\">\r\n      <UniqueIdentifier>{87653f1f-3e27-49a5-9f2c-91b13f46eb81}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\发送消息\">\r\n      <UniqueIdentifier>{ce3d11ea-50a8-4102-8fcc-c78b434c93e6}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\个人信息\">\r\n      <UniqueIdentifier>{1893610a-444d-43b3-9d38-ac949a886f2c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\好友列表\">\r\n      <UniqueIdentifier>{57cae96b-b9d4-43d4-9876-e35d0bb96af6}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\群公告\">\r\n      <UniqueIdentifier>{fff76411-4c4e-45e2-9f78-4f1415ed1b51}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\功能窗口\">\r\n      <UniqueIdentifier>{1c2d0d7d-9764-4d79-b880-cb4516cb9b2c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\解密图片\">\r\n      <UniqueIdentifier>{8e6a5c4b-f36e-4bfc-8bd8-dda5fa0613ab}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\添加群成员\">\r\n      <UniqueIdentifier>{8a5c963d-2c38-41e6-9a59-03463cb86c13}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\发送名片\">\r\n      <UniqueIdentifier>{d73b7219-e423-4e13-b7d9-891557925620}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\查看群成员\">\r\n      <UniqueIdentifier>{04f0e374-4481-4bc2-8bb2-1953a1f1081f}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\无限多开\">\r\n      <UniqueIdentifier>{744c6196-1c9e-4599-84a0-174a0cad9551}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"菜单栏\">\r\n      <UniqueIdentifier>{6e5d0c2d-2b48-4085-973d-e23069646a4c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"菜单栏\\打赏作者\">\r\n      <UniqueIdentifier>{77a5f69c-2e7d-48be-aeb9-17376dc0dafd}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"菜单栏\\关于作者\">\r\n      <UniqueIdentifier>{e4db8bb4-32bd-4353-8af5-dacb3efea7cc}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\添加好友\">\r\n      <UniqueIdentifier>{e631ad46-5b2a-4b1b-a64a-89521bc01283}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\修改群名称\">\r\n      <UniqueIdentifier>{c056225b-cdec-4635-b153-e64128b4878b}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\查看群成员\\发送艾特消息\">\r\n      <UniqueIdentifier>{e6129c08-a16f-4b2b-a5d6-6956224e905c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\查看群成员\\查看群成员\">\r\n      <UniqueIdentifier>{f3300f15-5b33-45cd-9fda-d0ed9bd2efdd}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\打开微信浏览器\">\r\n      <UniqueIdentifier>{29b883c2-a143-4bbf-b2db-db10231b897e}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\邀请群成员\">\r\n      <UniqueIdentifier>{e6d57d6c-f891-4a43-a781-d47f3df64449}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\发送xml文章\">\r\n      <UniqueIdentifier>{539d852d-cee7-47be-9de2-a7b7af203d5b}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\好友信息\">\r\n      <UniqueIdentifier>{cda48e5c-30ae-4717-97cb-9a83ba6ccf5e}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"好友列表\\修改备注\">\r\n      <UniqueIdentifier>{d49002ed-e818-43d2-84a5-43ea14b4e447}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\创建群聊\">\r\n      <UniqueIdentifier>{86d25358-824c-41fe-8532-395e15cd5e8c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\修改版本号\">\r\n      <UniqueIdentifier>{5e1adde2-8b7d-44e6-9338-a9b96af7784e}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\">\r\n      <UniqueIdentifier>{30fd4e88-1105-4b17-bcd8-44367b7c946c}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\\自定义消息\">\r\n      <UniqueIdentifier>{4c32c906-f9de-4503-be4f-b64ad0614daf}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"自定义数据\\结构体\">\r\n      <UniqueIdentifier>{ab603aa1-5935-4fc4-af16-5720f654f8c6}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"功能大全\\关注公众号\">\r\n      <UniqueIdentifier>{2645c386-2125-40da-9e8f-65c425dbc699}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"WeChatRobot.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"stdafx.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"targetver.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"Resource.h\">\r\n      <Filter>头文件</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"WeChatRobotDlg.h\">\r\n      <Filter>登陆窗口</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CInjectTools.h\">\r\n      <Filter>注入器</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"message.h\">\r\n      <Filter>自定义数据\\自定义消息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CChatRecords.h\">\r\n      <Filter>聊天记录</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CMain.h\">\r\n      <Filter>主窗口</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CMyTableCtrl.h\">\r\n      <Filter>选项卡</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSendMsg.h\">\r\n      <Filter>好友列表\\发送消息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CInformation.h\">\r\n      <Filter>功能大全\\个人信息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CFriendList.h\">\r\n      <Filter>好友列表\\好友列表</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CRoomAnnouncement.h\">\r\n      <Filter>好友列表\\群公告</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CFunctions.h\">\r\n      <Filter>功能大全\\功能窗口</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CDecryptImage.h\">\r\n      <Filter>功能大全\\解密图片</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CAddChatRoomMember.h\">\r\n      <Filter>好友列表\\添加群成员</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSendXmlCard.h\">\r\n      <Filter>好友列表\\发送名片</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CMultiOpen.h\">\r\n      <Filter>功能大全\\无限多开</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CPay.h\">\r\n      <Filter>菜单栏\\打赏作者</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CAboutAuthor.h\">\r\n      <Filter>菜单栏\\关于作者</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CAddUser.h\">\r\n      <Filter>功能大全\\添加好友</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSetRoomName.h\">\r\n      <Filter>好友列表\\修改群名称</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSendChatRoomAt.h\">\r\n      <Filter>好友列表\\查看群成员\\发送艾特消息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CChatRoomMember.h\">\r\n      <Filter>好友列表\\查看群成员\\查看群成员</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"COpenUrl.h\">\r\n      <Filter>功能大全\\打开微信浏览器</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CInviteGroupMember.h\">\r\n      <Filter>好友列表\\邀请群成员</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSendXmlAricle.h\">\r\n      <Filter>功能大全\\发送xml文章</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CFriendInfo.h\">\r\n      <Filter>好友列表\\好友信息</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CSetRemark.h\">\r\n      <Filter>好友列表\\修改备注</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CCreateChatRoom.h\">\r\n      <Filter>功能大全\\创建群聊</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CModifyVersion.h\">\r\n      <Filter>功能大全\\修改版本号</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"data.h\">\r\n      <Filter>自定义数据\\结构体</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"CFollowAccount.h\">\r\n      <Filter>功能大全\\关注公众号</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"WeChatRobot.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"stdafx.cpp\">\r\n      <Filter>源文件</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"WeChatRobotDlg.cpp\">\r\n      <Filter>登陆窗口</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CInjectTools.cpp\">\r\n      <Filter>注入器</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CChatRecords.cpp\">\r\n      <Filter>聊天记录</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CMain.cpp\">\r\n      <Filter>主窗口</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CMyTableCtrl.cpp\">\r\n      <Filter>选项卡</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSendMsg.cpp\">\r\n      <Filter>好友列表\\发送消息</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CInformation.cpp\">\r\n      <Filter>功能大全\\个人信息</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CFriendList.cpp\">\r\n      <Filter>好友列表\\好友列表</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CRoomAnnouncement.cpp\">\r\n      <Filter>好友列表\\群公告</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CFunctions.cpp\">\r\n      <Filter>功能大全\\功能窗口</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CDecryptImage.cpp\">\r\n      <Filter>功能大全\\解密图片</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CAddChatRoomMember.cpp\">\r\n      <Filter>好友列表\\添加群成员</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSendXmlCard.cpp\">\r\n      <Filter>好友列表\\发送名片</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CMultiOpen.cpp\">\r\n      <Filter>功能大全\\无限多开</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CPay.cpp\">\r\n      <Filter>菜单栏\\打赏作者</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CAboutAuthor.cpp\">\r\n      <Filter>菜单栏\\关于作者</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CAddUser.cpp\">\r\n      <Filter>功能大全\\添加好友</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSetRoomName.cpp\">\r\n      <Filter>好友列表\\修改群名称</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSendChatRoomAt.cpp\">\r\n      <Filter>好友列表\\查看群成员\\发送艾特消息</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CChatRoomMember.cpp\">\r\n      <Filter>好友列表\\查看群成员\\查看群成员</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"COpenUrl.cpp\">\r\n      <Filter>功能大全\\打开微信浏览器</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CInviteGroupMember.cpp\">\r\n      <Filter>好友列表\\邀请群成员</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSendXmlAricle.cpp\">\r\n      <Filter>功能大全\\发送xml文章</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CFriendInfo.cpp\">\r\n      <Filter>好友列表\\好友信息</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CSetRemark.cpp\">\r\n      <Filter>好友列表\\修改备注</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CCreateChatRoom.cpp\">\r\n      <Filter>功能大全\\创建群聊</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CModifyVersion.cpp\">\r\n      <Filter>功能大全\\修改版本号</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"CFollowAccount.cpp\">\r\n      <Filter>功能大全\\关注公众号</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"WeChatRobot.rc\">\r\n      <Filter>资源文件</Filter>\r\n    </ResourceCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"res\\WeChatRobot.rc2\">\r\n      <Filter>资源文件</Filter>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Image Include=\"res\\WeChat.ico\">\r\n      <Filter>资源文件</Filter>\r\n    </Image>\r\n    <Image Include=\"res\\pay.bmp\">\r\n      <Filter>资源文件</Filter>\r\n    </Image>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "WeChatRobot/WeChatRobot.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <RESOURCE_FILE>WeChatRobot.rc</RESOURCE_FILE>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "WeChatRobot/WeChatRobotDlg.cpp",
    "content": "﻿\r\n// WeChatRobotDlg.cpp: 实现文件\r\n//\r\n\r\n#include \"stdafx.h\"\r\n#include \"WeChatRobot.h\"\r\n#include \"WeChatRobotDlg.h\"\r\n#include \"afxdialogex.h\"\r\n#include \"CInjectTools.h\"\r\n#include \"CMain.h\"\r\n\r\nHANDLE wxPid = NULL;\t\t//微信的PID\r\n\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#endif\r\n\r\n\r\n// 用于应用程序“关于”菜单项的 CAboutDlg 对话框\r\n\r\nclass CAboutDlg : public CDialogEx\r\n{\r\npublic:\r\n\tCAboutDlg();\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_ABOUTBOX };\r\n#endif\r\n\r\n\tprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持\r\n\r\n// 实现\r\nprotected:\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n};\r\n\r\nCAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)\r\n{\r\n}\r\n\r\nvoid CAboutDlg::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n}\r\n\r\nBEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CWeChatRobotDlg 对话框\r\n\r\n\r\n\r\nCWeChatRobotDlg::CWeChatRobotDlg(CWnd* pParent /*=nullptr*/)\r\n\t: CDialogEx(IDD_WECHATROBOT_DIALOG, pParent)\r\n{\r\n\tm_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);\r\n}\r\n\r\nvoid CWeChatRobotDlg::DoDataExchange(CDataExchange* pDX)\r\n{\r\n\tCDialogEx::DoDataExchange(pDX);\r\n}\r\n\r\nBEGIN_MESSAGE_MAP(CWeChatRobotDlg, CDialogEx)\r\n\tON_WM_SYSCOMMAND()\r\n\tON_WM_PAINT()\r\n\tON_WM_QUERYDRAGICON()\r\n\tON_WM_COPYDATA()\r\n\tON_BN_CLICKED(IDC_SHOW_QRPIC, &CWeChatRobotDlg::OnBnClickedShowQrpic)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n// CWeChatRobotDlg 消息处理程序\r\n\r\nBOOL CWeChatRobotDlg::OnInitDialog()\r\n{\r\n\tCDialogEx::OnInitDialog();\r\n\r\n\t// 将“关于...”菜单项添加到系统菜单中。\r\n\r\n\t// IDM_ABOUTBOX 必须在系统命令范围内。\r\n\tASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);\r\n\tASSERT(IDM_ABOUTBOX < 0xF000);\r\n\r\n\tCMenu* pSysMenu = GetSystemMenu(FALSE);\r\n\tif (pSysMenu != nullptr)\r\n\t{\r\n\t\tBOOL bNameValid;\r\n\t\tCString strAboutMenu;\r\n\t\tbNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);\r\n\t\tASSERT(bNameValid);\r\n\t\tif (!strAboutMenu.IsEmpty())\r\n\t\t{\r\n\t\t\tpSysMenu->AppendMenu(MF_SEPARATOR);\r\n\t\t\tpSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);\r\n\t\t}\r\n\t}\r\n\r\n\t// 设置此对话框的图标。  当应用程序主窗口不是对话框时，框架将自动\r\n\t//  执行此操作\r\n\tSetIcon(m_hIcon, TRUE);\t\t\t// 设置大图标\r\n\tSetIcon(m_hIcon, FALSE);\t\t// 设置小图标\r\n\r\n\t//防多开\r\n\tRunSingle();\r\n\r\n\r\n\r\n\tif (InjectDll(wxPid)==FALSE)\r\n\t{\r\n\t\tExitProcess(-1);\r\n\t}\r\n\r\n\treturn TRUE;  // 除非将焦点设置到控件，否则返回 TRUE\r\n}\r\n\r\nvoid CWeChatRobotDlg::OnSysCommand(UINT nID, LPARAM lParam)\r\n{\r\n\tif ((nID & 0xFFF0) == IDM_ABOUTBOX)\r\n\t{\r\n\t\tCAboutDlg dlgAbout;\r\n\t\tdlgAbout.DoModal();\r\n\t}\r\n\telse if ((nID & 0xFFF0) == SC_CLOSE)//对话框关闭 消息\r\n\t{\r\n\t\tTerminateProcess(wxPid, 0);\r\n\t\tCDialogEx::OnSysCommand(nID, lParam);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tCDialogEx::OnSysCommand(nID, lParam);\r\n\t}\r\n}\r\n\r\n// 如果向对话框添加最小化按钮，则需要下面的代码\r\n//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序，\r\n//  这将由框架自动完成。\r\n\r\nvoid CWeChatRobotDlg::OnPaint()\r\n{\r\n\tif (IsIconic())\r\n\t{\r\n\t\tCPaintDC dc(this); // 用于绘制的设备上下文\r\n\r\n\t\tSendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);\r\n\r\n\t\t// 使图标在工作区矩形中居中\r\n\t\tint cxIcon = GetSystemMetrics(SM_CXICON);\r\n\t\tint cyIcon = GetSystemMetrics(SM_CYICON);\r\n\t\tCRect rect;\r\n\t\tGetClientRect(&rect);\r\n\t\tint x = (rect.Width() - cxIcon + 1) / 2;\r\n\t\tint y = (rect.Height() - cyIcon + 1) / 2;\r\n\r\n\t\t// 绘制图标\r\n\t\tdc.DrawIcon(x, y, m_hIcon);\r\n\t}\r\n\telse\r\n\t{\r\n\t\tCDialogEx::OnPaint();\r\n\t}\r\n}\r\n\r\n//当用户拖动最小化窗口时系统调用此函数取得光标\r\n//显示。\r\nHCURSOR CWeChatRobotDlg::OnQueryDragIcon()\r\n{\r\n\treturn static_cast<HCURSOR>(m_hIcon);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnCopyData\r\n// 函数说明: 接收CopyData消息\r\n// 作    者: GuiShou\r\n// 时    间: 2019/6/30\r\n// 参    数: CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct\r\n// 返 回 值: BOOL\r\n//***********************************************************\r\nBOOL CWeChatRobotDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)\r\n{\r\n\tif (pCopyDataStruct->dwData==WM_Login)\r\n\t{\r\n\t\tEndDialog(0);\r\n\t\tCMain mainWindow;\r\n\t\tmainWindow.DoModal();\r\n\t}\r\n\telse if (pCopyDataStruct->dwData == WM_AlreadyLogin)\r\n\t{\r\n\t\tMessageBoxA(NULL, \"已经登陆微信 请重启微信 在未登录状态下运行程序\", \"Tip\", 0);\r\n\t\tExitProcess(-1);\r\n\t}\r\n\r\n\treturn CDialogEx::OnCopyData(pWnd, pCopyDataStruct);\r\n}\r\n\r\n\r\n\r\n//************************************************************\r\n// 函数名称: OnBnClickedShowQrpic\r\n// 函数说明: 响应显示二维码按钮\r\n// 作    者: GuiShou\r\n// 时    间: 2019/6/30\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CWeChatRobotDlg::OnBnClickedShowQrpic()\r\n{\r\n\t//查找窗口\r\n\tCWnd *pWnd = CWnd::FindWindow(NULL, L\"WeChatHelper\");\r\n\tCOPYDATASTRUCT show_qrpic;\r\n\tshow_qrpic.dwData = WM_ShowQrPicture;\r\n\tshow_qrpic.cbData = 0;\r\n\tshow_qrpic.lpData = NULL;\r\n\t//发送消息\r\n\tpWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&show_qrpic);\r\n\r\n\tSleep(200);\r\n\t//显示图片\r\n\tShowPicture();\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: ShowPicture\r\n// 函数说明: 显示二维码\r\n// 作    者: GuiShou\r\n// 时    间: 2019/6/30\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CWeChatRobotDlg::ShowPicture()\r\n{\r\n\tchar szTempPath[MAX_PATH] = { 0 };\r\n\tchar szPicturePath[MAX_PATH] = { 0 };\r\n\r\n\t//获取Temp目录\r\n\tGetTempPathA(MAX_PATH, szTempPath);\r\n\t//拼接图片完整路径\r\n\tsprintf_s(szPicturePath, \"%s%s\", szTempPath, \"qrcode.png\");\r\n\r\n\tUSES_CONVERSION;\r\n\tCImage QrPic;\r\n\tQrPic.Load(A2W(szPicturePath));\r\n\tCRect rect;\r\n\tCWnd *pWnd = GetDlgItem(IDC_QRPIC);\r\n\tCDC *pDC = pWnd->GetDC();\r\n\tpWnd->GetClientRect(&rect);\r\n\tpDC->SetStretchBltMode(STRETCH_HALFTONE);\r\n\tQrPic.Draw(pDC->m_hDC, rect);\r\n\tReleaseDC(pDC);\r\n\tQrPic.Destroy();\r\n\r\n\t//删除临时文件夹下的图片\r\n\tDeleteFileA(szPicturePath);\r\n}\r\n\r\n\r\n//************************************************************\r\n// 函数名称: RunSingle\r\n// 函数说明: 防多开\r\n// 作    者: GuiShou\r\n// 时    间: 2019/7/9\r\n// 参    数: void\r\n// 返 回 值: void\r\n//***********************************************************\r\nvoid CWeChatRobotDlg::RunSingle()\r\n{\r\n\tHANDLE hMutex = NULL;\r\n\thMutex = CreateMutexA(NULL, FALSE, \"GuiShou\");\r\n\tif (hMutex)\r\n\t{\r\n\t\tif (GetLastError() == ERROR_ALREADY_EXISTS)\r\n\t\t{\r\n\t\t\tExitProcess(-1);\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "WeChatRobot/WeChatRobotDlg.h",
    "content": "﻿\r\n// WeChatRobotDlg.h: 头文件\r\n//\r\n\r\n#pragma once\r\n\r\n\r\n// CWeChatRobotDlg 对话框\r\nclass CWeChatRobotDlg : public CDialogEx\r\n{\r\n// 构造\r\npublic:\r\n\tCWeChatRobotDlg(CWnd* pParent = nullptr);\t// 标准构造函数\r\n\r\n// 对话框数据\r\n#ifdef AFX_DESIGN_TIME\r\n\tenum { IDD = IDD_WECHATROBOT_DIALOG };\r\n#endif\r\n\r\n\tprotected:\r\n\tvirtual void DoDataExchange(CDataExchange* pDX);\t// DDX/DDV 支持\r\n\r\n\r\n// 实现\r\nprotected:\r\n\tHICON m_hIcon;\r\n\r\n\t// 生成的消息映射函数\r\n\tvirtual BOOL OnInitDialog();\r\n\tafx_msg void OnSysCommand(UINT nID, LPARAM lParam);\r\n\tafx_msg void OnPaint();\r\n\tafx_msg HCURSOR OnQueryDragIcon();\r\n\tDECLARE_MESSAGE_MAP()\r\npublic:\r\n\tafx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);\r\n\tafx_msg void OnBnClickedShowQrpic();\r\n\r\n\r\n\tvoid ShowPicture();\t\t//显示图片\r\n\tvoid RunSingle();\t\t//防多开\r\n};\r\n"
  },
  {
    "path": "WeChatRobot/data.h",
    "content": "#pragma once\r\n\r\n//ͨϢṹ\r\nstruct MessageStruct\r\n{\r\n\twchar_t msgdata1[MAX_PATH];\r\n\twchar_t msgdata2[MAX_PATH];\r\n\r\n\tMessageStruct(wchar_t* pString1, wchar_t* pString2)\r\n\t{\r\n\t\twcscpy_s(msgdata1, wcslen(pString1) + 1, pString1);\r\n\t\twcscpy_s(msgdata2, wcslen(pString2) + 1, pString2);\r\n\t}\r\n\r\n\tMessageStruct(CString pString1, CString pString2)\r\n\t{\r\n\t\twcscpy_s(msgdata1, wcslen(pString1) + 1, pString1);\r\n\t\twcscpy_s(msgdata2, wcslen(pString2) + 1, pString2);\r\n\t}\r\n};\r\n\r\n\r\n//¼Ϣṹ\r\nstruct ChatMessageData\r\n{\r\n\tDWORD dwtype;\t\t\t\t//Ϣ\r\n\twchar_t sztype[0x20];\t\t\t//Ϣ\r\n\twchar_t source[0x400];\t\t\t//ϢԴ\r\n\twchar_t wxid[0x40];\t\t\t//΢ID/ȺID\r\n\twchar_t wxname[0x200];\t\t\t//΢/Ⱥ\r\n\twchar_t sender[0x100];\t\t\t//Ϣ\r\n\twchar_t sendername[0x100];\t\t//Ϣǳ\r\n\twchar_t content[0x5000];\t//Ϣ\r\n};\r\n\r\n//ƬϢṹ\r\nstruct XmlCardMessage\r\n{\r\n\twchar_t RecverWxid[50];\t\t//ߵ΢ID\r\n\twchar_t SendWxid[50];\t\t//Ҫ͵΢ID\r\n\twchar_t NickName[50];\t\t//ǳ\r\n};\r\n//ͰϢ\r\nstruct AtMsg\r\n{\r\n\twchar_t chatroomid[50] = { 0 };\r\n\twchar_t memberwxid[50] = { 0 };\r\n\twchar_t membernickname[50] = { 0 };\r\n\twchar_t msgcontent[100] = { 0 };\r\n};\r\n//XMLϢ\r\nstruct SendXmlArticleStruct\r\n{\r\n\twchar_t title[50];\r\n\twchar_t subtitle[50];\r\n\twchar_t urllink[200];\r\n\twchar_t picpath[260];\r\n\twchar_t selfwxid[50];\r\n\twchar_t recverwxid[50];\r\n};\r\n\r\n\r\n//ϢĽṹ\r\nstruct PersonalInformation\r\n{\r\n\twchar_t wxid[40];\t\t\t//΢ID\r\n\twchar_t wxcount[40];\t\t//΢˺\r\n\twchar_t v1[150];\t\t\t//V1\r\n\twchar_t nickname[50];\t\t//΢ǳ\r\n\twchar_t remark[50];\t\t\t//ע\r\n\twchar_t wxsex[10];\t\t\t//Ա\r\n\twchar_t phonenumber[30];\t//ֻ\r\n\twchar_t device[20];\t\t\t//½豸\r\n\twchar_t nation[20];\t\t\t//\r\n\twchar_t province[20];\t\t//ʡ\r\n\twchar_t city[20];\t\t\t//\r\n\twchar_t area[20];\t\t\t//\r\n\twchar_t language[10];\t\t//\r\n\twchar_t bigheader[0x100];\t//ͷ\r\n\twchar_t smallheader[0x100];\t//Сͷ\r\n\twchar_t signature[50];\t\t//ǩ\r\n\twchar_t background[0x100];\t//Ȧ\r\n\twchar_t cachedir[MAX_PATH];\t//Ŀ¼\r\n\twchar_t startdir[MAX_PATH];\t//Ŀ¼\r\n};\r\n\r\n\r\n//бûϢ\r\nstruct UserInfo\r\n{\r\n\twchar_t UserId[80];\r\n\twchar_t UserNumber[80];\r\n\twchar_t UserRemark[80];\r\n\twchar_t UserNickName[80];\r\n};\r\n\r\n//ȺԱϢṹ\r\nstruct ChatRoomMemberInfo\r\n{\r\n\twchar_t UserId[0x100];\r\n\twchar_t UserNumber[0x100];\r\n\twchar_t UserNickName[0x100];\r\n};\r\n\r\n//ϸϢṹ\r\nstruct UserInfoDetail\r\n{\r\n\twchar_t UserId[50];\t\t\t//΢ID\r\n\twchar_t UserNumber[50];\t\t//΢˺\r\n\twchar_t V1[200];\t\t\t\t//V1\r\n\twchar_t Remark[50];\t\t\t//ע\r\n\twchar_t UserNickName[50];\t//΢ǳ\r\n\twchar_t smallHeader[1024];\t//Сͷ\r\n\twchar_t bigHeader[1024];\t//ͷ\r\n};"
  },
  {
    "path": "WeChatRobot/message.h",
    "content": "#pragma once\r\n\r\n//ͻ˺ͷͨѶϢ\r\n#define WM_Login 0\r\n#define WM_ShowQrPicture 1\r\n#define WM_Logout 2\r\n#define WM_GetFriendList 3\r\n#define WM_ShowChatRecord 4\r\n#define WM_SendTextMessage 5\r\n#define WM_SendFileMessage 6\r\n#define WM_GetInformation 7\r\n#define WM_SendImageMessage 8\r\n#define WM_SetRoomAnnouncement 9\r\n#define WM_DeleteUser 10\r\n#define WM_QuitChatRoom 11\r\n#define WM_AddGroupMember 12\r\n#define WM_SendXmlCard 13\r\n#define WM_ShowChatRoomMembers 14\r\n#define WM_ShowChatRoomMembersDone 15\r\n#define WM_DecryptDatabase 16\r\n#define WM_AddUser 17\r\n#define WM_SetRoomName 18\r\n#define WM_AutoChat 19\r\n#define WM_CancleAutoChat 20\r\n#define WM_AlreadyLogin 21\r\n#define WM_SendAtMsg 22\r\n#define WM_DelRoomMember 23\r\n#define WM_OpenUrl 24\r\n#define WM_InviteGroupMember 26\r\n#define WM_SendXmlArticle 27\r\n#define WM_GetFriendInfomations 28\r\n#define WM_TimerToSend 29\r\n#define WM_CancelTimerToSend 30\r\n#define WM_SetRemark 31\r\n#define WM_CreateChatRoom 32\r\n#define WM_ModifyVersion 33\r\n#define WM_DecodeImage 34\r\n#define WM_SendVideoMessage 35\r\n#define WM_SendGifMessage 36\r\n#define WM_TopMsg 37\r\n#define WM_CancleTopMsg 38\r\n#define WM_OpenNewMsgNotify 39\r\n#define WM_MsgNoDisturb 40\r\n#define WM_FollowPublicAccount 41\r\n#define WM_KeywordsReplyOpen 43\r\n#define WM_KeywordsReplyClose 44\r\n\r\n\r\n//ͨѶԶϢ\r\n#define WM_ShowFriendList WM_USER+100\r\n#define WM_ShowMessage WM_USER+101\r\n#define SaveFriendList WM_USER+102\r\n\r\n//΢ID\r\n#define ChatRobotWxID L\"gh_f0e9306d8d03\""
  },
  {
    "path": "WeChatRobot/resource.h",
    "content": "﻿//{{NO_DEPENDENCIES}}\r\n// Microsoft Visual C++ 生成的包含文件。\r\n// 供 WeChatRobot.rc 使用\r\n//\r\n#define IDM_ABOUTBOX                    0x0010\r\n#define IDD_ABOUTBOX                    100\r\n#define IDS_ABOUTBOX                    101\r\n#define IDD_WECHATROBOT_DIALOG          102\r\n#define IDR_MAINFRAME                   128\r\n#define IDI_ICON1                       129\r\n#define IDD_MAIN                        131\r\n#define IDD_FRIEND_LIST                 133\r\n#define IDD_CHAT_RECORDS                135\r\n#define IDD_FUNCTIONS                   137\r\n#define IDR_MENU1                       141\r\n#define IDR_MENU2                       142\r\n#define IDD_SendMsg                     143\r\n#define IDI_ICON2                       145\r\n#define IDD_INFORMATION                 146\r\n#define IDD_ROOMANNOUNCE                148\r\n#define IDD_DECRYPT_IMAGE               150\r\n#define IDD_ADD_MEMBER                  152\r\n#define IDD_SEND_ROOM_MSG               154\r\n#define IDD_SendCard                    156\r\n#define IDD_CHATROOM_MEMBER             158\r\n#define IDD_PAY                         162\r\n#define IDB_BITMAP1                     166\r\n#define IDD_ABOUT_AUTHOR                167\r\n#define IDD_ADD_USER                    169\r\n#define IDD_SET_ROOM_NAME               171\r\n#define IDD_SENDAT                      173\r\n#define IDD_OpenUrl                     175\r\n#define IDD_InviteMember                177\r\n#define IDD_SendXmlArticle              179\r\n#define IDD_FRIENDINFO                  181\r\n#define IDD_SetRemark                   183\r\n#define IDD_CreateChatRoom              185\r\n#define IDD_ModifyVersion               187\r\n#define IDD_FollowAccount               189\r\n#define IDC_INJECT_DLL                  1000\r\n#define IDC_UNLOAD_DLL                  1001\r\n#define IDC_SHOW_QRPIC                  1003\r\n#define IDC_QRPIC                       1004\r\n#define IDC_TAB1                        1005\r\n#define IDC_FRIENDLIST                  1006\r\n#define IDC_LIST1                       1007\r\n#define IDC_RADIO1                      1008\r\n#define IDC_RADIO2                      1009\r\n#define IDC_RADIO3                      1010\r\n#define IDC_EDIT1                       1011\r\n#define IDC_Send                        1012\r\n#define IDC_EDIT2                       1012\r\n#define IDC_INFORMATION                 1013\r\n#define IDC_ACCOUNT                     1013\r\n#define IDC_EDIT6                       1013\r\n#define IDC_DECRYPT_PIC                 1014\r\n#define IDC_NICKNAME                    1014\r\n#define IDC_EDIT3                       1014\r\n#define IDC_EDIT7                       1014\r\n#define IDC_PHONE                       1015\r\n#define IDC_EDIT4                       1015\r\n#define IDC_EDIT8                       1015\r\n#define IDC_DEVICE                      1016\r\n#define IDC_EDIT5                       1016\r\n#define IDC_EDIT9                       1016\r\n#define IDC_PROVINCE                    1017\r\n#define IDC_EDIT10                      1017\r\n#define IDC_CITY                        1018\r\n#define IDC_HEADER                      1019\r\n#define IDC_NATION                      1020\r\n#define IDC_WXID                        1021\r\n#define IDC_SEX                         1022\r\n#define IDC_HEADER2                     1023\r\n#define IDC_SendRoomAnnouncement        1024\r\n#define IDC_HEADER3                     1024\r\n#define IDC_DecryptImage                1025\r\n#define IDC_HEADER4                     1025\r\n#define IDC_MAKE_SURE                   1026\r\n#define IDC_HEADER5                     1026\r\n#define IDC_ChatRoomWXID                1027\r\n#define IDC_SendChatRoomMsg             1029\r\n#define IDC_SendCard                    1030\r\n#define IDC_MULTI_OPEN                  1031\r\n#define IDC_DECRYPT_DB                  1032\r\n#define IDC_ADD_USER                    1033\r\n#define IDC_AUTO_CHAT                   1034\r\n#define IDC_GET_EXPRESSION              1035\r\n#define IDC_SetRoomName                 1036\r\n#define IDC_OPEN_URL                    1036\r\n#define IDC_SendAt                      1037\r\n#define IDC_SendXmlArticle              1037\r\n#define IDC_OPEN                        1038\r\n#define IDC_SendMsgByTimer              1038\r\n#define IDC_INVITE                      1039\r\n#define IDC_CreateRoom                  1039\r\n#define IDC_BUTTON1                     1040\r\n#define IDC_CheckAll                    1040\r\n#define IDC_SetRemark                   1040\r\n#define IDC_CreateChatRoom              1040\r\n#define IDC_ModifyVersion               1040\r\n#define IDC_Modify                      1040\r\n#define IDC_FOLLOW                      1040\r\n#define IDC_ReverseChoose               1041\r\n#define IDC_FollowAccount               1041\r\n#define IDC_CancelAll                   1042\r\n#define IDC_KeyWordsReply               1042\r\n#define IDC_GroupSend                   1044\r\n#define IDC_RADIO4                      1045\r\n#define IDC_RADIO5                      1046\r\n#define ID_32775                        32775\r\n#define ID_32776                        32776\r\n#define ID_32777                        32777\r\n#define ID_32778                        32778\r\n#define ID_32779                        32779\r\n#define ID_32780                        32780\r\n#define ID_32781                        32781\r\n#define ID_32782                        32782\r\n#define ID_32783                        32783\r\n#define ID_32784                        32784\r\n#define ID_32785                        32785\r\n#define ID_32786                        32786\r\n#define ID_32787                        32787\r\n#define ID_32788                        32788\r\n#define ID_32789                        32789\r\n#define ID_32790                        32790\r\n#define ID_32791                        32791\r\n#define ID_32792                        32792\r\n#define ID_32793                        32793\r\n#define ID_32794                        32794\r\n#define ID_32795                        32795\r\n#define ID_32796                        32796\r\n#define ID_32797                        32797\r\n#define ID_32798                        32798\r\n#define ID_32799                        32799\r\n#define ID_32800                        32800\r\n#define ID_32801                        32801\r\n#define ID_32802                        32802\r\n#define ID_32803                        32803\r\n#define ID_32804                        32804\r\n#define ID_32805                        32805\r\n#define ID_32806                        32806\r\n#define ID_32807                        32807\r\n#define ID_32808                        32808\r\n#define ID_32809                        32809\r\n#define ID_32810                        32810\r\n#define ID_32811                        32811\r\n#define ID_32812                        32812\r\n#define ID_32813                        32813\r\n#define ID_32814                        32814\r\n#define ID_32815                        32815\r\n#define ID_32816                        32816\r\n\r\n// Next default values for new objects\r\n// \r\n#ifdef APSTUDIO_INVOKED\r\n#ifndef APSTUDIO_READONLY_SYMBOLS\r\n#define _APS_NEXT_RESOURCE_VALUE        191\r\n#define _APS_NEXT_COMMAND_VALUE         32817\r\n#define _APS_NEXT_CONTROL_VALUE         1047\r\n#define _APS_NEXT_SYMED_VALUE           101\r\n#endif\r\n#endif\r\n"
  },
  {
    "path": "WeChatRobot/stdafx.cpp",
    "content": "﻿\r\n// stdafx.cpp : 只包括标准包含文件的源文件\r\n// WeChatRobot.pch 将作为预编译标头\r\n// stdafx.obj 将包含预编译类型信息\r\n\r\n#include \"stdafx.h\"\r\n\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/stdafx.h",
    "content": "﻿\r\n// stdafx.h : 标准系统包含文件的包含文件，\r\n// 或是经常使用但不常更改的\r\n// 特定于项目的包含文件\r\n\r\n#pragma once\r\n\r\n#ifndef VC_EXTRALEAN\r\n#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料\r\n#endif\r\n\r\n#include \"targetver.h\"\r\n#define _CRT_SECURE_NO_DEPRECATE 0\r\n\r\n#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的\r\n\r\n// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏\r\n#define _AFX_ALL_WARNINGS\r\n\r\n#include <afxwin.h>         // MFC 核心组件和标准组件\r\n#include <afxext.h>         // MFC 扩展\r\n\r\n\r\n#include <afxdisp.h>        // MFC 自动化类\r\n\r\n\r\n\r\n#ifndef _AFX_NO_OLE_SUPPORT\r\n#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持\r\n#endif\r\n#ifndef _AFX_NO_AFXCMN_SUPPORT\r\n#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持\r\n#endif // _AFX_NO_AFXCMN_SUPPORT\r\n\r\n#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支持\r\n\r\n\r\n#include <windows.h>\r\n#include <atlconv.h>\r\n#include <memory>\r\nusing namespace std;\r\n#include \"message.h\"\r\n#include \"data.h\"\r\n\r\n\r\n\r\n#include <afxcontrolbars.h>\r\n#include <afxcmn.h>\r\n#include <afxcontrolbars.h>\r\n#include <afxcontrolbars.h>\r\n#include <afxcontrolbars.h>\r\n#include <afxcontrolbars.h>\r\n#include <afxcontrolbars.h>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n#ifdef _UNICODE\r\n#if defined _M_IX86\r\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\r\n#elif defined _M_X64\r\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\r\n#else\r\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\r\n#endif\r\n#endif\r\n\r\n\r\n"
  },
  {
    "path": "WeChatRobot/targetver.h",
    "content": "﻿#pragma once\r\n\r\n// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。\r\n\r\n// 如果要为以前的 Windows 平台生成应用程序，请包括 WinSDKVer.h，并将\r\n// 将 _WIN32_WINNT 宏设置为要支持的平台，然后再包括 SDKDDKVer.h。\r\n\r\n#include <SDKDDKVer.h>\r\n"
  },
  {
    "path": "WeChatRobot.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.28307.572\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"WeChatRobot\", \"WeChatRobot\\WeChatRobot.vcxproj\", \"{155FAB13-5BFA-4845-A8B3-4CA5F9659347}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"WeChatHelper\", \"WeChatHelper\\WeChatHelper.vcxproj\", \"{6B65B0BF-7949-4C08-904B-5F51D8D3988F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Debug|x86.Build.0 = Debug|Win32\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Release|x64.Build.0 = Release|x64\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{155FAB13-5BFA-4845-A8B3-4CA5F9659347}.Release|x86.Build.0 = Release|Win32\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Debug|x86.ActiveCfg = Debug|Win32\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Debug|x86.Build.0 = Debug|Win32\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Release|x64.Build.0 = Release|x64\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Release|x86.ActiveCfg = Release|Win32\r\n\t\t{6B65B0BF-7949-4C08-904B-5F51D8D3988F}.Release|x86.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {BC222587-D35B-45CC-9761-F3D1DD2B775A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  }
]