diff --git a/.gitignore b/.gitignore
index b932c49cd21e47cfcc677738a629c0cbbf8d02bd..0b691d05733497faca9bcc9b683e9afe47db0155 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,25 +1,26 @@
-/Debug
-*.exp
-*.pdb
-*.lib
-*/Debug/
-*/Release/
-*/SOCKET_Debug/
-*/SOCKET_Release/
-*/Win32/
-*/x64/
+build/
+Debug/
+!/Release
+Release/
+SOCKET_Debug/
+SOCKET_Release/
+Win32/
+x64/
*.rar
-/.vs/
-/x64
-*/obj/
-/wxRobot/bin/Debug/
-/wxRobot/bin/Release/*.pdb
-*/__pycache__/
-packages
+obj/
+packages/
+
mongoose.c
mongoose.h
json.hpp
+# py
+__pycache__/
+# Visual Studio
+.vs
+*.exp
+*.pdb
+*.lib
# VSCode
.vscode
# JetBrians IDE
diff --git a/CWeChatRobot/WeChatRobotCOM.vcxproj b/CWeChatRobot/WeChatRobotCOM.vcxproj
index 6eb1e11b501e7077e14d80646263c2c99745d13d..f0c6a3c0e54463571a4e6834827a0a1b65a54a88 100644
--- a/CWeChatRobot/WeChatRobotCOM.vcxproj
+++ b/CWeChatRobot/WeChatRobotCOM.vcxproj
@@ -71,6 +71,8 @@
true
true
+ false
+ false
true
@@ -79,6 +81,7 @@
true
false
+ true
true
@@ -114,6 +117,10 @@
Windows
true
+
+
+
+
@@ -177,6 +184,9 @@
true
true
+
+ xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\com\"
+
@@ -337,4 +347,4 @@
-
\ No newline at end of file
+
diff --git a/ComWeChatRobot.sln b/ComWeChatRobot.sln
index 0cfc740cb37b6c74316b121f26aeabaafffe5b42..c7ca181059bfc2533388b9fa344b611736697487 100644
--- a/ComWeChatRobot.sln
+++ b/ComWeChatRobot.sln
@@ -5,21 +5,8 @@ VisualStudioVersion = 16.0.31605.320
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CWeChatRobot", "CWeChatRobot\WeChatRobotCOM.vcxproj", "{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatTools", "WeChatTools\WeChatTools.vcxproj", "{3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DWeChatRobot", "DWeChatRobot\DWeChatRobot.vcxproj", "{C0FC8DAB-0590-46AC-9270-6FEA45D52390}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wxRobot", "wxRobot", "{8E5B7B88-AB21-4B97-BAC1-956A35E33671}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{9533FA77-5AB8-473D-83D5-55E07137401E}"
- ProjectSection(SolutionItems) = preProject
- Python\wxRobot.py = Python\wxRobot.py
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{4DE1F624-3F17-44E8-9B1F-28D88285D25F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "wxRobot", "wxRobot\wxRobot.csproj", "{10504CFA-6D19-4A97-8728-11BCE6C2499F}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxDriver", "wxDriver\wxDriver.vcxproj", "{B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}"
EndProject
Global
@@ -60,28 +47,6 @@ Global
{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x64.Build.0 = Release|x64
{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x86.ActiveCfg = Release|Win32
{F54A8A7E-C2C0-4FD8-B625-59C77FF613BA}.SOCKET_Release|x86.Build.0 = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.ActiveCfg = Debug|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x64.Build.0 = Debug|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x86.ActiveCfg = Debug|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Debug|x86.Build.0 = Debug|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|Any CPU.ActiveCfg = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x64.ActiveCfg = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x64.Build.0 = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.ActiveCfg = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.Release|x86.Build.0 = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|Any CPU.ActiveCfg = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|Any CPU.Build.0 = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x64.ActiveCfg = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x64.Build.0 = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x86.ActiveCfg = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_DEBUG|x86.Build.0 = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|Any CPU.ActiveCfg = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|Any CPU.Build.0 = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x64.ActiveCfg = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x64.Build.0 = Release|x64
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x86.ActiveCfg = Release|Win32
- {3F7198C7-68D1-4BBA-9BF2-B7FC67A9426E}.SOCKET_Release|x86.Build.0 = Release|Win32
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|Any CPU.ActiveCfg = Debug|Win32
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.ActiveCfg = Debug|x64
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.Debug|x64.Build.0 = Debug|x64
@@ -102,30 +67,6 @@ Global
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x64.Build.0 = SOCKET_Release|x64
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x86.ActiveCfg = SOCKET_Release|Win32
{C0FC8DAB-0590-46AC-9270-6FEA45D52390}.SOCKET_Release|x86.Build.0 = SOCKET_Release|Win32
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x64.Build.0 = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Debug|x86.Build.0 = Debug|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|Any CPU.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x64.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x64.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x86.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.Release|x86.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|Any CPU.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|Any CPU.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x64.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x64.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x86.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_DEBUG|x86.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|Any CPU.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|Any CPU.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x64.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x64.Build.0 = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x86.ActiveCfg = Release|Any CPU
- {10504CFA-6D19-4A97-8728-11BCE6C2499F}.SOCKET_Release|x86.Build.0 = Release|Any CPU
{B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|Any CPU.ActiveCfg = Debug|Win32
{B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|x64.ActiveCfg = Debug|x64
{B8740C2A-CBE7-4873-9669-E0DFEC4A3B8D}.Debug|x64.Build.0 = Debug|x64
@@ -152,11 +93,6 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {9533FA77-5AB8-473D-83D5-55E07137401E} = {8E5B7B88-AB21-4B97-BAC1-956A35E33671}
- {4DE1F624-3F17-44E8-9B1F-28D88285D25F} = {8E5B7B88-AB21-4B97-BAC1-956A35E33671}
- {10504CFA-6D19-4A97-8728-11BCE6C2499F} = {4DE1F624-3F17-44E8-9B1F-28D88285D25F}
- EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {20BD2B3B-13AA-4C38-8216-127895041F93}
EndGlobalSection
diff --git a/DWeChatRobot/DWeChatRobot.vcxproj b/DWeChatRobot/DWeChatRobot.vcxproj
index 287ff4a00c8f225b7c62c7cf9186b601e92d845d..8e2b58bdb6ffdf98b3a112faa57aa762bbdb9ebe 100644
--- a/DWeChatRobot/DWeChatRobot.vcxproj
+++ b/DWeChatRobot/DWeChatRobot.vcxproj
@@ -140,12 +140,14 @@
false
$(ProjectName)
+ true
false
SWeChatRobot
$(Configuration)\
$(SolutionDir)Release\socket\
+ true
true
@@ -208,6 +210,10 @@
true
false
+
+ xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\com\"
+xcopy /y /d "$(OutDir)..\Python\com\wxRobot.py" "$(SolutionDir)build\com\"
+
@@ -228,6 +234,10 @@
true
false
+
+ xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\"
+xcopy /y /d "$(OutDir)..\..\Python\http\wxDriver.py" "$(SolutionDir)build\http\"
+
diff --git a/DWeChatRobot/ReceiveMessage.cpp b/DWeChatRobot/ReceiveMessage.cpp
index 75d1f06a6343b55a388f69a5ac0ab114d0770207..8619442410da894067dc66a2ea2560be01dc1fd4 100644
--- a/DWeChatRobot/ReceiveMessage.cpp
+++ b/DWeChatRobot/ReceiveMessage.cpp
@@ -142,7 +142,7 @@ static void dealMessage(DWORD messageAddr)
string jstr = jMsg.dump() + '\n';
#ifdef USE_COM
// 通过连接点,将消息广播给客户端
- VARIANT vsaValue = (_variant_t)jstr.c_str();
+ VARIANT vsaValue = (_variant_t)utf8_to_unicode(jstr.c_str()).c_str();
PostComMessage(jMsg["pid"].get(), WX_MESSAGE, msgid, &vsaValue);
#endif
// 为保证线程安全,需要手动管理内存
diff --git a/Python/requirements.txt b/Python/com/requirements.txt
similarity index 54%
rename from Python/requirements.txt
rename to Python/com/requirements.txt
index 2857e849a83a6db14a46f6f568f30e2a8926eb27..2113b7a363325c80d45b4bc7cb5bf11a5a0928a1 100644
--- a/Python/requirements.txt
+++ b/Python/com/requirements.txt
@@ -1,2 +1,2 @@
-comtypes==1.1.11
-psutil==5.9.0
\ No newline at end of file
+comtypes==1.1.11
+psutil==5.9.0
diff --git a/Python/test.py b/Python/com/test.py
similarity index 100%
rename from Python/test.py
rename to Python/com/test.py
diff --git "a/Python/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" "b/Python/com/test/\346\265\213\350\257\225\345\233\276\347\211\207.png"
similarity index 100%
rename from "Python/test/\346\265\213\350\257\225\345\233\276\347\211\207.png"
rename to "Python/com/test/\346\265\213\350\257\225\345\233\276\347\211\207.png"
diff --git "a/Python/test/\346\265\213\350\257\225\346\226\207\344\273\266" "b/Python/com/test/\346\265\213\350\257\225\346\226\207\344\273\266"
similarity index 100%
rename from "Python/test/\346\265\213\350\257\225\346\226\207\344\273\266"
rename to "Python/com/test/\346\265\213\350\257\225\346\226\207\344\273\266"
diff --git a/Python/wxRobot.py b/Python/com/wxRobot.py
similarity index 100%
rename from Python/wxRobot.py
rename to Python/com/wxRobot.py
diff --git a/Python/http/wxDriver.py b/Python/http/wxDriver.py
new file mode 100644
index 0000000000000000000000000000000000000000..b65ca66f71994906ac0486a90036e27cf594f899
--- /dev/null
+++ b/Python/http/wxDriver.py
@@ -0,0 +1,306 @@
+import ctypes
+import json
+import copy
+import threading
+import requests
+import base64
+import socketserver
+
+if ctypes.sizeof(ctypes.c_void_p) == ctypes.sizeof(ctypes.c_ulonglong):
+ driver = ctypes.cdll.LoadLibrary('./wxDriver64.dll')
+else:
+ driver = ctypes.cdll.LoadLibrary('./wxDriver.dll')
+
+new_wechat = driver.new_wechat
+new_wechat.argtypes = None
+new_wechat.restype = ctypes.c_int
+
+start_listen = driver.start_listen
+start_listen.argtypes = [ctypes.c_int,ctypes.c_int]
+start_listen.restype = ctypes.c_int
+
+stop_listen = driver.stop_listen
+stop_listen.argtypes = [ctypes.c_int]
+stop_listen.restype = ctypes.c_int
+
+class WECHAT_HTTP_APIS:
+ # login check
+ WECHAT_IS_LOGIN = 0 # 鐧诲綍妫鏌
+
+ # self info
+ WECHAT_GET_SELF_INFO = 1 # 鑾峰彇涓汉淇℃伅
+
+ # send message
+ WECHAT_MSG_SEND_TEXT = 2 # 鍙戦佹枃鏈
+ WECHAT_MSG_SEND_AT = 3 # 鍙戦佺兢鑹剧壒
+ WECHAT_MSG_SEND_CARD = 4 # 鍒嗕韩濂藉弸鍚嶇墖
+ WECHAT_MSG_SEND_IMAGE = 5 # 鍙戦佸浘鐗
+ WECHAT_MSG_SEND_FILE = 6 # 鍙戦佹枃浠
+ WECHAT_MSG_SEND_ARTICLE = 7 # 鍙戦亁ml鏂囩珷
+ WECHAT_MSG_SEND_APP = 8 # 鍙戦佸皬绋嬪簭
+
+ # receive message
+ WECHAT_MSG_START_HOOK = 9 # 寮鍚帴鏀舵秷鎭疕OOK锛屽彧鏀寔socket鐩戝惉
+ WECHAT_MSG_STOP_HOOK = 10 # 鍏抽棴鎺ユ敹娑堟伅HOOK
+ WECHAT_MSG_START_IMAGE_HOOK = 11 # 寮鍚浘鐗囨秷鎭疕OOK
+ WECHAT_MSG_STOP_IMAGE_HOOK = 12 # 鍏抽棴鍥剧墖娑堟伅HOOK
+ WECHAT_MSG_START_VOICE_HOOK = 13 # 寮鍚闊虫秷鎭疕OOK
+ WECHAT_MSG_STOP_VOICE_HOOK = 14 # 鍏抽棴璇煶娑堟伅HOOK
+
+ # contact
+ WECHAT_CONTACT_GET_LIST = 15 # 鑾峰彇鑱旂郴浜哄垪琛
+ WECHAT_CONTACT_CHECK_STATUS = 16 # 妫鏌ユ槸鍚﹁濂藉弸鍒犻櫎
+ WECHAT_CONTACT_DEL = 17 # 鍒犻櫎濂藉弸
+ WECHAT_CONTACT_SEARCH_BY_CACHE = 18 # 浠庡唴瀛樹腑鑾峰彇濂藉弸淇℃伅
+ WECHAT_CONTACT_SEARCH_BY_NET = 19 # 缃戠粶鎼滅储鐢ㄦ埛淇℃伅
+ WECHAT_CONTACT_ADD_BY_WXID = 20 # wxid鍔犲ソ鍙
+ WECHAT_CONTACT_ADD_BY_V3 = 21 # v3鏁版嵁鍔犲ソ鍙
+ WECHAT_CONTACT_ADD_BY_PUBLIC_ID = 22 # 鍏虫敞鍏紬鍙
+ WECHAT_CONTACT_VERIFY_APPLY = 23 # 閫氳繃濂藉弸璇锋眰
+ WECHAT_CONTACT_EDIT_REMARK = 24 # 淇敼澶囨敞
+
+ # chatroom
+ WECHAT_CHATROOM_GET_MEMBER_LIST = 25 # 鑾峰彇缇ゆ垚鍛樺垪琛
+ WECHAT_CHATROOM_GET_MEMBER_NICKNAME = 26 # 鑾峰彇鎸囧畾缇ゆ垚鍛樻樀绉
+ WECHAT_CHATROOM_DEL_MEMBER = 27 # 鍒犻櫎缇ゆ垚鍛
+ WECHAT_CHATROOM_ADD_MEMBER = 28 # 娣诲姞缇ゆ垚鍛
+ WECHAT_CHATROOM_SET_ANNOUNCEMENT = 29 # 璁剧疆缇ゅ叕鍛
+ WECHAT_CHATROOM_SET_CHATROOM_NAME = 30 # 璁剧疆缇よ亰鍚嶇О
+ WECHAT_CHATROOM_SET_SELF_NICKNAME = 31 # 璁剧疆缇ゅ唴涓汉鏄电О
+
+ # database
+ WECHAT_DATABASE_GET_HANDLES = 32 # 鑾峰彇鏁版嵁搴撳彞鏌
+ WECHAT_DATABASE_BACKUP = 33 # 澶囦唤鏁版嵁搴
+ WECHAT_DATABASE_QUERY = 34 # 鏁版嵁搴撴煡璇
+
+ # version
+ WECHAT_SET_VERSION = 35 # 淇敼寰俊鐗堟湰鍙
+
+ # log
+ WECHAT_LOG_START_HOOK = 36 # 寮鍚棩蹇椾俊鎭疕OOK
+ WECHAT_LOG_STOP_HOOK = 37 # 鍏抽棴鏃ュ織淇℃伅HOOK
+
+APIS = WECHAT_HTTP_APIS
+
+# http api 鍙傛暟妯℃澘
+class WECHAT_HTTP_API_PARAM_TEMPLATES:
+ __HTTP_API_PARAM_TEMPLATE = {
+ # login check
+ APIS.WECHAT_IS_LOGIN: {},
+
+
+ # self info
+ APIS.WECHAT_GET_SELF_INFO: {},
+
+
+ # send message
+ APIS.WECHAT_MSG_SEND_TEXT: {"wxid": "",
+ "msg": ""},
+ # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3`
+ APIS.WECHAT_MSG_SEND_AT: {"chatroom_id":"",
+ "wxids": "",
+ "msg": "",
+ "auto_nickname": 1},
+ APIS.WECHAT_MSG_SEND_CARD: {"receiver":"",
+ "shared_wxid":"",
+ "nickname":""},
+ APIS.WECHAT_MSG_SEND_IMAGE: {"receiver":"",
+ "img_path":""},
+ APIS.WECHAT_MSG_SEND_FILE: {"receiver":"",
+ "file_path":""},
+ APIS.WECHAT_MSG_SEND_ARTICLE: {"wxid":"",
+ "title":"",
+ "abstract":"",
+ "url":"",
+ "img_path":""},
+ APIS.WECHAT_MSG_SEND_APP: {"wxid":"",
+ "appid":""},
+
+
+ # receive message
+ APIS.WECHAT_MSG_START_HOOK: {"port": 10808},
+ APIS.WECHAT_MSG_STOP_HOOK: {},
+ APIS.WECHAT_MSG_START_IMAGE_HOOK: {"save_path":""},
+ APIS.WECHAT_MSG_STOP_IMAGE_HOOK: {},
+ APIS.WECHAT_MSG_START_VOICE_HOOK: {"save_path":""},
+ APIS.WECHAT_MSG_STOP_VOICE_HOOK: {},
+
+
+ # contact
+ APIS.WECHAT_CONTACT_GET_LIST: {},
+ APIS.WECHAT_CONTACT_CHECK_STATUS: {"wxid":""},
+ APIS.WECHAT_CONTACT_DEL: {"wxid":""},
+ APIS.WECHAT_CONTACT_SEARCH_BY_CACHE: {"wxid":""},
+ APIS.WECHAT_CONTACT_SEARCH_BY_NET: {"keyword":""},
+ APIS.WECHAT_CONTACT_ADD_BY_WXID: {"wxid":"",
+ "msg":""},
+ APIS.WECHAT_CONTACT_ADD_BY_V3: {"v3":"",
+ "msg":"",
+ "add_type": 0x6},
+ APIS.WECHAT_CONTACT_ADD_BY_PUBLIC_ID: {"public_id":""},
+ APIS.WECHAT_CONTACT_VERIFY_APPLY: {"v3":"",
+ "v4":""},
+ APIS.WECHAT_CONTACT_EDIT_REMARK: {"wxid":"",
+ "remark":""},
+
+
+ # chatroom
+ APIS.WECHAT_CHATROOM_GET_MEMBER_LIST: {"chatroom_id":""},
+ APIS.WECHAT_CHATROOM_GET_MEMBER_NICKNAME: {"chatroom_id":"",
+ "wxid":""},
+ # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3`
+ APIS.WECHAT_CHATROOM_DEL_MEMBER: {"chatroom_id":"",
+ "wxids":""},
+ # wxids闇瑕佷互`,`鍒嗛殧锛屼緥濡俙wxid1,wxid2,wxid3`
+ APIS.WECHAT_CHATROOM_ADD_MEMBER: {"chatroom_id":"",
+ "wxids":""},
+ APIS.WECHAT_CHATROOM_SET_ANNOUNCEMENT: {"chatroom_id":"",
+ "announcement":""},
+ APIS.WECHAT_CHATROOM_SET_CHATROOM_NAME: {"chatroom_id":"",
+ "chatroom_name":""},
+ APIS.WECHAT_CHATROOM_SET_SELF_NICKNAME: {"chatroom_id":"",
+ "nickname":""},
+
+
+ # database
+ APIS.WECHAT_DATABASE_GET_HANDLES: {},
+ APIS.WECHAT_DATABASE_BACKUP: {"db_handle":0,
+ "save_path":""},
+ APIS.WECHAT_DATABASE_QUERY: {"db_handle":0,
+ "sql":""},
+
+
+ # version
+ APIS.WECHAT_SET_VERSION: {"version": "3.7.0.30"},
+
+
+ # log
+ APIS.WECHAT_LOG_START_HOOK: {},
+ APIS.WECHAT_LOG_STOP_HOOK: {},
+ }
+
+ def get_http_template(self, api_number):
+ try:
+ return copy.deepcopy(self.__HTTP_API_PARAM_TEMPLATE[api_number])
+ except KeyError:
+ raise ValueError("There is no interface numbered %s." % api_number)
+
+get_http_template = WECHAT_HTTP_API_PARAM_TEMPLATES().get_http_template
+
+class ReceiveMsgSocketServer(socketserver.BaseRequestHandler):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ def handle(self):
+ conn = self.request
+ while True:
+ try:
+ ptr_data = b""
+ while True:
+ data = conn.recv(1024)
+ ptr_data += data
+ if len(data) == 0 or data[-1] == 0xA:
+ break
+ msg = json.loads(ptr_data.decode('utf-8'))
+ ReceiveMsgSocketServer.msg_callback(msg)
+ except OSError:
+ break
+ except json.JSONDecodeError:
+ pass
+ conn.sendall("200 OK".encode())
+ conn.close()
+
+ @staticmethod
+ def msg_callback(msg):
+ # 闄勫姞淇℃伅鏄痯rotobuf鏍煎紡锛岄渶瑕佽嚜琛屽鐞
+ msg['extrainfo'] = base64.b64decode(msg['extrainfo'])
+ # TODO: 鍦ㄨ繖閲屽啓棰濆鐨勬秷鎭鐞嗛昏緫
+
+ print(msg)
+
+def post_wechat_http_api(api,port,data = {}):
+ url = "http://127.0.0.1:{}/api/?type={}".format(port,api)
+ resp = requests.post(url = url,data = json.dumps(data))
+ return resp.json()
+
+def get_wechat_http_api(api,port,data = {}):
+ url = "http://127.0.0.1:{}/api/?type={}".format(port,api)
+ resp = requests.get(url = url,params = data)
+ return resp.json()
+
+def get_wechat_pid_list() -> list:
+ import psutil
+ pid_list = []
+ process_list = psutil.pids()
+ for pid in process_list:
+ try:
+ if psutil.Process(pid).name() == 'WeChat.exe':
+ pid_list.append(pid)
+ except psutil.NoSuchProcess:
+ pass
+ return pid_list
+
+def start_socket_server(port: int = 10808,
+ request_handler = ReceiveMsgSocketServer,
+ main_thread: bool = True) -> int or None:
+ ip_port = ("127.0.0.1", port)
+ try:
+ s = socketserver.ThreadingTCPServer(ip_port, request_handler)
+ if main_thread:
+ s.serve_forever()
+ else:
+ socket_server = threading.Thread(target=s.serve_forever)
+ socket_server.setDaemon(True)
+ socket_server.start()
+ return socket_server.ident
+ except KeyboardInterrupt:
+ pass
+ except Exception as e:
+ print(e)
+ return None
+
+def test(test_port):
+ post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,port = test_port)
+ if post_wechat_http_api(APIS.WECHAT_IS_LOGIN,port = test_port)["is_login"] == 1:
+ print(post_wechat_http_api(APIS.WECHAT_GET_SELF_INFO,port = test_port))
+
+ data = {"wxid":"filehelper","msg":"hello http"}
+ post_wechat_http_api(APIS.WECHAT_MSG_SEND_TEXT,data = data,port = test_port)
+
+ data = {"receiver":'filehelper',"shared_wxid":"filehelper","nickname":"鏂囦欢浼犺緭鍔╂墜"}
+ post_wechat_http_api(APIS.WECHAT_MSG_SEND_CARD,data = data,port = test_port)
+
+ data = {"receiver":'filehelper',"img_path":r"D:\VS2019C++\MyWeChatRobot\test\娴嬭瘯鍥剧墖.png"}
+ post_wechat_http_api(APIS.WECHAT_MSG_SEND_IMAGE,data = data,port = test_port)
+
+ data = {"receiver":'filehelper',"file_path":r"D:\VS2019C++\MyWeChatRobot\test\娴嬭瘯鏂囦欢"}
+ post_wechat_http_api(APIS.WECHAT_MSG_SEND_FILE,data = data,port = test_port)
+
+ data = {"wxid":'filehelper',
+ "title":"鐧惧害",
+ "abstract":"鐧惧害涓涓嬶紝浣犲氨鐭ラ亾",
+ "url":"https://www.baidu.com/",
+ "img_path":""}
+ post_wechat_http_api(APIS.WECHAT_MSG_SEND_ARTICLE,data = data,port = test_port)
+
+ print(post_wechat_http_api(APIS.WECHAT_CONTACT_GET_LIST,port = test_port))
+ data = {"wxid":"filehelper"}
+ print(post_wechat_http_api(APIS.WECHAT_CONTACT_CHECK_STATUS,data = data,port = test_port))
+ dbs = post_wechat_http_api(APIS.WECHAT_DATABASE_GET_HANDLES,port = test_port)
+ db_handle = dbs['data'][0]['handle']
+ sql = "select * from Contact limit 1;"
+ data = {"db_handle":db_handle,"sql":sql}
+ res = post_wechat_http_api(APIS.WECHAT_DATABASE_QUERY,data = data,port = test_port)
+ print(res)
+ post_wechat_http_api(APIS.WECHAT_LOG_STOP_HOOK,port = test_port)
+
+if __name__ == '__main__':
+ port = 8000
+ pids = get_wechat_pid_list()
+ if len(pids) == 0:
+ pids.append(new_wechat())
+ start_listen(pids[0],port)
+ post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,8000)
+ post_wechat_http_api(APIS.WECHAT_MSG_START_HOOK,8000,{"port":10808})
+ start_socket_server()
+ stop_listen(pids[0])
diff --git a/README.md b/README.md
index 6635bedb98d35175fc060e4140cff3879187a311..430e4ac9a946206044e7fcd8322d93c086533610 100644
--- a/README.md
+++ b/README.md
@@ -32,14 +32,14 @@ PC寰俊鏈哄櫒浜猴紝瀹炵幇浠ヤ笅鍔熻兘锛
# 鐩綍璇存槑
`./CWeChatRobot`锛欳OM缁勪欢鐨勫疄鐜颁唬鐮
`./DWeChatRobot`锛氭敞鍏ョ殑DLL瀹炵幇浠g爜锛屾牴鎹钩鍙伴厤缃彲缂栬瘧鍑簊ocket鐗堝拰COM鐗
-`./wxRobot`: 鍖呭惈C#鐨勮皟鐢ㄧず渚
+`./old_projects`: 鍖呭惈C#鐨勮皟鐢ㄧず渚嬩互鍙3.7.0.26鐗堟湰鐨凟璇█璋冪敤
`./Python`锛歱ython绀轰緥鍜屾帴鍙f祴璇曟枃浠
`./wxDriver`锛歞river鐨勫疄鐜颁唬鐮侊紝鏈変簺鍑芥暟鍏锋湁涓瀹氱殑瀛︿範鎰忎箟
`./Release/CWeChatRobot.exe`锛氱紪璇戠殑COM缁勪欢
`./Release/DWeChatRobot.dll`锛氱紪璇戠殑DLL鏂囦欢
`./Release/socket`锛氬寘鍚玾xDriver.dll鍜宻ocket鎺ュ彛鐨凞LL
`./Release/WeChatTools.exe`锛氱敤浜庤皟璇曟椂娉ㄥ叆鎴栧嵏杞紻LL绋嬪簭锛屽叿浣撳弬闃呯浉鍏充唬鐮
-# 娉ㄥ唽COM
+# 蹇熷惎鍔
浠ョ鐞嗗憳鏉冮檺鎵ц浠ヤ笅鍛戒护锛
```shell
# 瀹夎
@@ -49,11 +49,11 @@ CWeChatRobot.exe /unregserver
```
# 璋冪敤
**Python锛**
-鍙傝僛wxRobot.py](/Python/wxRobot.py)
+鍙傝僛wxRobot.py](/Python/com/wxRobot.py)
**C#锛**
鍙傝僛ComWechatRobotCsharp](https://github.com/RingoStudio/ComWechatRobotCsharp)锛屾劅璋RingoStudio 鐨勮础鐚
**鏄撹瑷锛**
-鍙傝僛ESDK](/ESDK)锛屾劅璋lovezm 鐨勮础鐚
+鍙傝僛ESDK](/old_projects/ESDK)锛屾劅璋lovezm 鐨勮础鐚
# 鏇村鍔熻兘
1. 灏濊瘯娣诲姞issue涓殑鍔熻兘
@@ -118,11 +118,11 @@ CWeChatRobot.exe /unregserver
2. 閲嶆瀯COM涓殑閮ㄥ垎瀹炵幇
## 2022.08.13
1. 鐜板湪娑堟伅HOOK鍐呭鍖呭惈娑堟伅ID
-2. 瀹屾垚鍙戦佹秷鎭殑http鎺ュ彛锛屽彲鍙傝僛wxDriver.py](/Release/socket/wxDriver.py)锛屽叾浠栨帴鍙h繕闇瑕佷竴鐐规椂闂
+2. 瀹屾垚鍙戦佹秷鎭殑http鎺ュ彛锛屽彲鍙傝僛wxDriver.py](/Python/http/wxDriver.py)锛屽叾浠栨帴鍙h繕闇瑕佷竴鐐规椂闂
3. 鏂板椤圭洰閰嶇疆鏂囦欢锛屾劅璋amchii 鎻愪緵鐨勬柟娉
## 2022.08.21
1. 鎵鏈夊姛鑳絟ttp鎺ュ彛灏佽瀹屾垚锛屽彲鎺ュ彈get銆乸ost璇锋眰
-2. 鎻愪緵http鎺ュ彛璋冪敤绀轰緥锛屽弬鑰僛wxDriver.py](/Release/socket/wxDriver.py)
+2. 鎻愪緵http鎺ュ彛璋冪敤绀轰緥锛屽弬鑰僛wxDriver.py](/Python/http/wxDriver.py)
## 2022.08.25
1. 鎺ユ敹娑堟伅鏍煎紡淇敼涓簀son锛岀幇鍦ㄤ篃鍙互鑾峰彇鍒版墿灞曚俊鎭紝鍙粠鎵╁睍淇℃伅涓幏鍙栧埌鏂囦欢淇濆瓨璺緞鎴栬鑹剧壒浜簑xid
2. 浼樺寲鑾峰彇涓汉淇℃伅锛岃幏鍙栧ソ鍙嬩俊鎭帴鍙
diff --git a/Release/CWeChatRobot.exe b/Release/CWeChatRobot.exe
index e628e019752e9872a4e492f26ca6c7eda94ff1b5..c2c78b3884ab0400dd46ac1053e1dbae1b9fcca5 100644
Binary files a/Release/CWeChatRobot.exe and b/Release/CWeChatRobot.exe differ
diff --git a/Release/DWeChatRobot.dll b/Release/DWeChatRobot.dll
index fa807ed9f92ba66df2c8b04ffaeef72be9a27f7a..17de4284dcc6e8f12e30648560e8453c0a02ea85 100644
Binary files a/Release/DWeChatRobot.dll and b/Release/DWeChatRobot.dll differ
diff --git a/Release/socket/SWeChatRobot.dll b/Release/socket/SWeChatRobot.dll
index 895c2238b75ed246bb11e26f9fad3574cdf0bd3a..7c59fd54a612b0cc28f643f5105f27b6f3c75c48 100644
Binary files a/Release/socket/SWeChatRobot.dll and b/Release/socket/SWeChatRobot.dll differ
diff --git a/Release/socket/wxDriver.dll b/Release/socket/wxDriver.dll
index 7dad9332b465ffd825d6f49fc64ba431d9844338..200967164952f0339cf4800293533adf539354ff 100644
Binary files a/Release/socket/wxDriver.dll and b/Release/socket/wxDriver.dll differ
diff --git a/Release/socket/wxDriver64.dll b/Release/socket/wxDriver64.dll
index c1fe9d73a2d0505b80c622afa5e506c4c1581928..f1650adab76b7f9eb7bbcaa50a24d573b610d409 100644
Binary files a/Release/socket/wxDriver64.dll and b/Release/socket/wxDriver64.dll differ
diff --git a/WeChatTools/main.h b/WeChatTools/main.h
deleted file mode 100644
index 7b5dfc1e5fdfcdb0f032aa8c0ea069fa036da4e1..0000000000000000000000000000000000000000
--- a/WeChatTools/main.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-#include "base.h"
\ No newline at end of file
diff --git "a/ESDK/HOOK\347\233\221\345\220\254.e" "b/old_projects/ESDK/HOOK\347\233\221\345\220\254.e"
similarity index 100%
rename from "ESDK/HOOK\347\233\221\345\220\254.e"
rename to "old_projects/ESDK/HOOK\347\233\221\345\220\254.e"
diff --git a/ESDK/HPSocket4C.dll b/old_projects/ESDK/HPSocket4C.dll
similarity index 100%
rename from ESDK/HPSocket4C.dll
rename to old_projects/ESDK/HPSocket4C.dll
diff --git a/ESDK/HP_Socket.ec b/old_projects/ESDK/HP_Socket.ec
similarity index 100%
rename from ESDK/HP_Socket.ec
rename to old_projects/ESDK/HP_Socket.ec
diff --git "a/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e" "b/old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e"
similarity index 100%
rename from "ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e"
rename to "old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.e"
diff --git "a/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec" "b/old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec"
similarity index 100%
rename from "ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec"
rename to "old_projects/ESDK/VX3.7.0.26HOOK\346\250\241\345\235\227.ec"
diff --git "a/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e" "b/old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e"
similarity index 100%
rename from "ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e"
rename to "old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227_\350\277\234\347\250\213\347\272\277\347\250\213\350\260\203\347\224\250.e"
diff --git "a/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e" "b/old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e"
similarity index 100%
rename from "ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e"
rename to "old_projects/ESDK/VX3.7.0.30\346\250\241\345\235\227\350\260\203\347\224\250\344\276\213\347\250\213.e"
diff --git a/ESDK/test.e b/old_projects/ESDK/test.e
similarity index 100%
rename from ESDK/test.e
rename to old_projects/ESDK/test.e
diff --git a/WeChatTools/Inject.cpp b/old_projects/WeChatTools/Inject.cpp
similarity index 82%
rename from WeChatTools/Inject.cpp
rename to old_projects/WeChatTools/Inject.cpp
index 85e0f42d07416c1b510a2515275a2a1748d2fa69..062cc692d48cabb77a9b1f1f3046a15f7a90cc39 100644
--- a/WeChatTools/Inject.cpp
+++ b/old_projects/WeChatTools/Inject.cpp
@@ -1,7 +1,8 @@
#include "base.h"
HANDLE hProcess = NULL;
-bool isFileExists_stat(string& name) {
+bool isFileExists_stat(string &name)
+{
struct stat buffer;
return (stat(name.c_str(), &buffer) == 0);
}
@@ -9,23 +10,24 @@ bool isFileExists_stat(string& name) {
string wstring2string(wstring wstr)
{
std::string result;
- //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的
+ //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的
int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
- char* buffer = new char[len + 1];
- //宽字节编码转换成多字节编码
+ char *buffer = new char[len + 1];
+ //宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
buffer[len] = '\0';
- //删除缓冲区并返回值
+ //删除缓冲区并返回值
result.append(buffer);
delete[] buffer;
return result;
}
-bool InjectDll(DWORD dwId, WCHAR* szPath)//参数1:目标进程PID 参数2:DLL路径
+bool InjectDll(DWORD dwId, WCHAR *szPath) //参数1:目标进程PID 参数2:DLL路径
{
if (!hProcess)
return 1;
- if (GetWeChatRobotBase() != 0) {
+ if (GetWeChatRobotBase() != 0)
+ {
printf("请勿重复注入\n");
return 1;
}
@@ -44,17 +46,20 @@ bool InjectDll(DWORD dwId, WCHAR* szPath)//
{
WriteProcessMemory(hProcess, pRemoteAddress, szPath, wcslen(szPath) * 2 + 2, &dwWriteSize);
}
- else {
+ else
+ {
printf("写入失败!\n");
return 1;
}
//三、 创建一个远程线程,让目标进程调用LoadLibrary
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pRemoteAddress, NULL, NULL);
- if (hThread) {
- WaitForSingleObject(hThread, -1);
+ if (hThread)
+ {
+ WaitForSingleObject(hThread, -1);
}
- else {
+ else
+ {
printf("调用失败!\n");
return 1;
}
@@ -64,13 +69,15 @@ bool InjectDll(DWORD dwId, WCHAR* szPath)//
return 0;
}
-void Inject(DWORD dwPid, wchar_t* wStr) {
+void Inject(DWORD dwPid, wchar_t *wStr)
+{
wchar_t dllpath[MAX_PATH];
wchar_t workPath[MAX_PATH];
- wchar_t* pworkPath = _wgetcwd(workPath, MAX_PATH);
+ wchar_t *pworkPath = _wgetcwd(workPath, MAX_PATH);
swprintf_s(dllpath, MAX_PATH, L"%ws%ws%ws", pworkPath, L"\\", wStr);
string name = wstring2string((wstring)dllpath);
- if (!isFileExists_stat(name)) {
+ if (!isFileExists_stat(name))
+ {
wstring info = L"请检查目标文件路径!";
MessageBox(NULL, info.c_str(), _T("警告"), MB_ICONWARNING);
return;
@@ -79,38 +86,44 @@ void Inject(DWORD dwPid, wchar_t* wStr) {
InjectDll(dwPid, dllpath);
}
-BOOL RemoveDll(DWORD dwId) {
+BOOL RemoveDll(DWORD dwId)
+{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwId);
LPVOID pRemoteAddress = VirtualAllocEx(hProcess, NULL, 1, MEM_COMMIT, PAGE_READWRITE);
DWORD dwWriteSize = 0;
HANDLE hThread = NULL;
DWORD dwHandle, dwID;
LPVOID pFunc = NULL;
- if(pRemoteAddress)
+ if (pRemoteAddress)
WriteProcessMemory(hProcess, pRemoteAddress, dllname, wcslen(dllname) * 2 + 2, &dwWriteSize);
- else {
+ else
+ {
printf("写入失败!\n");
return 1;
}
pFunc = GetModuleHandleW;
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, &dwID);
- if (hThread) {
+ if (hThread)
+ {
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, &dwHandle);
}
- else {
+ else
+ {
printf("GetModuleHandleW调用失败!\n");
return 1;
}
CloseHandle(hThread);
-
+
// 释放console窗口,不然关闭console的同时微信也会退出
pFunc = FreeConsole;
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, NULL, 0, &dwID);
- if (hThread) {
+ if (hThread)
+ {
WaitForSingleObject(hThread, INFINITE);
}
- else {
+ else
+ {
printf("FreeConsole调用失败!\n");
return 1;
}
@@ -119,10 +132,12 @@ BOOL RemoveDll(DWORD dwId) {
// 使目标进程调用FreeLibrary,卸载DLL
pFunc = FreeLibrary;
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID);
- if (hThread) {
+ if (hThread)
+ {
WaitForSingleObject(hThread, INFINITE);
}
- else {
+ else
+ {
printf("FreeLibrary调用失败!\n");
return 1;
}
diff --git a/WeChatTools/WeChatTools.vcxproj b/old_projects/WeChatTools/WeChatTools.vcxproj
similarity index 99%
rename from WeChatTools/WeChatTools.vcxproj
rename to old_projects/WeChatTools/WeChatTools.vcxproj
index 014152ebc18b4892a7c3d7ed24320ee9c026bbac..3a8d1625cee84fcb498d0413ac30c9151ff5d7fb 100644
--- a/WeChatTools/WeChatTools.vcxproj
+++ b/old_projects/WeChatTools/WeChatTools.vcxproj
@@ -151,4 +151,4 @@
-
\ No newline at end of file
+
diff --git a/WeChatTools/WeChatTools.vcxproj.filters b/old_projects/WeChatTools/WeChatTools.vcxproj.filters
similarity index 99%
rename from WeChatTools/WeChatTools.vcxproj.filters
rename to old_projects/WeChatTools/WeChatTools.vcxproj.filters
index a00d99763538c9721ebbd435b262eba4a4251982..a981004d2da9fc77654f4fc32d662e9a8eeb89cc 100644
--- a/WeChatTools/WeChatTools.vcxproj.filters
+++ b/old_projects/WeChatTools/WeChatTools.vcxproj.filters
@@ -34,4 +34,4 @@
閫氱敤鍑芥暟
-
\ No newline at end of file
+
diff --git a/WeChatTools/WeChatTools.vcxproj.user b/old_projects/WeChatTools/WeChatTools.vcxproj.user
similarity index 93%
rename from WeChatTools/WeChatTools.vcxproj.user
rename to old_projects/WeChatTools/WeChatTools.vcxproj.user
index 88a550947edbc3c5003a41726f0749201fdb6822..98dadff166c0120fcc54719062d9068d77e550d5 100644
--- a/WeChatTools/WeChatTools.vcxproj.user
+++ b/old_projects/WeChatTools/WeChatTools.vcxproj.user
@@ -1,4 +1,4 @@
锘
-
\ No newline at end of file
+
diff --git a/WeChatTools/base.cpp b/old_projects/WeChatTools/base.cpp
similarity index 91%
rename from WeChatTools/base.cpp
rename to old_projects/WeChatTools/base.cpp
index 617e76d83f2e7c5af1b7187b62195447a92abb11..aa85cca383e8bf4a0a144ed6833603d006408a8e 100644
--- a/WeChatTools/base.cpp
+++ b/old_projects/WeChatTools/base.cpp
@@ -1,6 +1,7 @@
#include "base.h"
-DWORD GetWeChatRobotBase() {
+DWORD GetWeChatRobotBase()
+{
if (!hProcess)
return 0;
DWORD dwWriteSize = 0;
@@ -12,14 +13,16 @@ DWORD GetWeChatRobotBase() {
DWORD dwHandle, dwID;
LPVOID pFunc = GetModuleHandleW;
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, pRemoteAddress, 0, &dwID);
- if (hThread) {
+ if (hThread)
+ {
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread, &dwHandle);
}
- else {
+ else
+ {
return 0;
}
CloseHandle(hThread);
VirtualFreeEx(hProcess, pRemoteAddress, 0, MEM_RELEASE);
return dwHandle;
-}
\ No newline at end of file
+}
diff --git a/WeChatTools/base.h b/old_projects/WeChatTools/base.h
similarity index 78%
rename from WeChatTools/base.h
rename to old_projects/WeChatTools/base.h
index 899f5f0cba2f488b92a274781910f9558d8d8127..91f64806186c8f162e27795266c556fa8d0e4747 100644
--- a/WeChatTools/base.h
+++ b/old_projects/WeChatTools/base.h
@@ -13,12 +13,12 @@
using namespace std;
-void Inject(DWORD dwPid, wchar_t* wStr);
-bool isFileExists_stat(string& name);
+void Inject(DWORD dwPid, wchar_t *wStr);
+bool isFileExists_stat(string &name);
string wstring2string(wstring wstr);
BOOL RemoveDll(DWORD dwId);
extern HANDLE hProcess;
DWORD GetWeChatRobotBase();
#define dllname L"DWeChatRobot.dll"
-#define SendImageOffset 0x000110BE
\ No newline at end of file
+#define SendImageOffset 0x000110BE
diff --git a/WeChatTools/main.cpp b/old_projects/WeChatTools/main.cpp
similarity index 68%
rename from WeChatTools/main.cpp
rename to old_projects/WeChatTools/main.cpp
index 4a2141cb64166d58d0cb27000ae5d36fea16f9f3..2ad5ab94ec3b7a8ac68f6bfb7f927910ccb68dba 100644
--- a/WeChatTools/main.cpp
+++ b/old_projects/WeChatTools/main.cpp
@@ -1,29 +1,32 @@
#include "main.h"
-
-int _tmain(int nargv, WCHAR* argvs[])
+int _tmain(int nargv, WCHAR *argvs[])
{
DWORD dwId = 0;
HWND hCalc = FindWindow(NULL, L"微信");
DWORD dwPid = 0;
DWORD dwRub = GetWindowThreadProcessId(hCalc, &dwPid);
- if (!dwPid) {
+ if (!dwPid)
+ {
wstring info = L"请先启动目标进程!";
MessageBox(NULL, info.c_str(), _T("警告"), MB_ICONWARNING);
return 1;
}
- wchar_t* wStr = NULL;
-
- if (nargv == 1) {
+ wchar_t *wStr = NULL;
+
+ if (nargv == 1)
+ {
return 1;
}
- else if (nargv == 2) {
+ else if (nargv == 2)
+ {
wStr = argvs[1];
Inject(dwPid, argvs[1]);
}
- else if (nargv == 3 && !((wstring)argvs[1]).compare(L"-r")) {
+ else if (nargv == 3 && !((wstring)argvs[1]).compare(L"-r"))
+ {
wStr = argvs[2];
RemoveDll(dwPid);
}
return 0;
-}
\ No newline at end of file
+}
diff --git a/old_projects/WeChatTools/main.h b/old_projects/WeChatTools/main.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8f455b48b5abe682aa9ff1fd81943803042ba95
--- /dev/null
+++ b/old_projects/WeChatTools/main.h
@@ -0,0 +1,2 @@
+#pragma once
+#include "base.h"
diff --git a/wxRobot/App.config b/old_projects/wxRobot/App.config
similarity index 83%
rename from wxRobot/App.config
rename to old_projects/wxRobot/App.config
index 56efbc7b5f15b5166cc89dae0406895b57de0b67..359541cfa8fd42a51225a674e16cd97b8ca69872 100644
--- a/wxRobot/App.config
+++ b/old_projects/wxRobot/App.config
@@ -1,6 +1,6 @@
锘
-
+
-
\ No newline at end of file
+
diff --git a/wxRobot/Program.cs b/old_projects/wxRobot/Program.cs
similarity index 98%
rename from wxRobot/Program.cs
rename to old_projects/wxRobot/Program.cs
index 9f9fb68105a8bd1b8ae4c27b3da8eb2ec5f375d3..68b8172ec609fbeeaab6c8e0565baf8542fd2abd 100644
--- a/wxRobot/Program.cs
+++ b/old_projects/wxRobot/Program.cs
@@ -83,10 +83,9 @@ namespace wxRobot
wx.CStopReceiveMessage();
}
-
System.Object[,,] FriendList = wx.CGetFriendList() as System.Object[,,];
int length = FriendList.GetLength(0);
- for (int i = 0; i < 1/*length*/; i++)
+ for (int i = 0; i < 1 /*length*/; i++)
{
Console.WriteLine(FriendList[i, 1, 1]);
}
@@ -126,7 +125,6 @@ namespace wxRobot
Subscription = 3,
}
-
public class WxUserInfo
{
///
diff --git a/wxRobot/Properties/AssemblyInfo.cs b/old_projects/wxRobot/Properties/AssemblyInfo.cs
similarity index 58%
rename from wxRobot/Properties/AssemblyInfo.cs
rename to old_projects/wxRobot/Properties/AssemblyInfo.cs
index 895fb9264a9bb58b6677233af714bccd312e90f2..59843f4fe34b5e90b5b1e0ed6ce72be8c9ecf975 100644
--- a/wxRobot/Properties/AssemblyInfo.cs
+++ b/old_projects/wxRobot/Properties/AssemblyInfo.cs
@@ -5,24 +5,24 @@ using System.Runtime.InteropServices;
// 鏈夊叧绋嬪簭闆嗙殑涓鑸俊鎭敱浠ヤ笅
// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
-[assembly: AssemblyTitle("wxRobot")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("wxRobot")]
-[assembly: AssemblyCopyright("Copyright 漏 2022")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
+[assembly:AssemblyTitle("wxRobot")]
+[assembly:AssemblyDescription("")]
+[assembly:AssemblyConfiguration("")]
+[assembly:AssemblyCompany("")]
+[assembly:AssemblyProduct("wxRobot")]
+[assembly:AssemblyCopyright("Copyright 漏 2022")]
+[assembly:AssemblyTrademark("")]
+[assembly:AssemblyCulture("")]
// 灏 ComVisible 璁剧疆涓 false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
//瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规ц缃负 true銆
-[assembly: ComVisible(false)]
+[assembly:ComVisible(false)]
// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
-[assembly: Guid("10504cfa-6d19-4a97-8728-11bce6c2499f")]
+[assembly:Guid("10504cfa-6d19-4a97-8728-11bce6c2499f")]
-// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓肩粍鎴:
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓肩粍鎴:
//
// 涓荤増鏈
// 娆$増鏈
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
//鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊
//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly:AssemblyVersion("1.0.0.0")]
+[assembly:AssemblyFileVersion("1.0.0.0")]
diff --git a/wxRobot/packages.config b/old_projects/wxRobot/packages.config
similarity index 91%
rename from wxRobot/packages.config
rename to old_projects/wxRobot/packages.config
index 5eaa239b49e08a8e2a83565b69aadf65161c6e35..d4c69254478c9990580dfd9b86d8b2da0a520426 100644
--- a/wxRobot/packages.config
+++ b/old_projects/wxRobot/packages.config
@@ -1,4 +1,4 @@
锘
-
\ No newline at end of file
+
diff --git a/wxRobot/wxRobot.csproj b/old_projects/wxRobot/wxRobot.csproj
similarity index 99%
rename from wxRobot/wxRobot.csproj
rename to old_projects/wxRobot/wxRobot.csproj
index 295224444141de8f2d1ee56e5c4705cc33a55723..6b8d8aa102c82e0daf62ee4b968b1675c1de73a4 100644
--- a/wxRobot/wxRobot.csproj
+++ b/old_projects/wxRobot/wxRobot.csproj
@@ -65,4 +65,4 @@
-
\ No newline at end of file
+
diff --git "a/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" "b/test/\346\265\213\350\257\225\345\233\276\347\211\207.png"
deleted file mode 100644
index 83ec3c6f4e02dd823414ad891a456bf18ccb1536..0000000000000000000000000000000000000000
Binary files "a/test/\346\265\213\350\257\225\345\233\276\347\211\207.png" and /dev/null differ
diff --git "a/test/\346\265\213\350\257\225\346\226\207\344\273\266" "b/test/\346\265\213\350\257\225\346\226\207\344\273\266"
deleted file mode 100644
index 9df64990f7be3c1f7194a0c22852a1ab3a09f3c5..0000000000000000000000000000000000000000
Binary files "a/test/\346\265\213\350\257\225\346\226\207\344\273\266" and /dev/null differ
diff --git a/wxDriver/wxDriver.vcxproj b/wxDriver/wxDriver.vcxproj
index 1c1112b5d88b3e1339e1493254ae621328f425fb..884af810e80c790b97fcb2883e65e42fd4961c0b 100644
--- a/wxDriver/wxDriver.vcxproj
+++ b/wxDriver/wxDriver.vcxproj
@@ -79,6 +79,7 @@
false
$(Platform)\$(Configuration)\
$(SolutionDir)$(Configuration)\socket\
+ true
true
@@ -89,6 +90,7 @@
false
$(ProjectName)64
$(SolutionDir)$(Configuration)\socket\
+ true
@@ -123,6 +125,10 @@
true
false
+
+ xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\"
+xcopy /y /d "$(OutDir)$(TargetName).lib" "$(SolutionDir)build\http\"
+
@@ -157,6 +163,10 @@
true
false
+
+ xcopy /y /d "$(TargetPath)" "$(SolutionDir)build\http\"
+xcopy /y /d "$(OutDir)$(TargetName).lib" "$(SolutionDir)build\http\"
+
@@ -182,4 +192,4 @@
-
\ No newline at end of file
+
diff --git a/wxRobot/bin/Release/wxRobot.exe b/wxRobot/bin/Release/wxRobot.exe
deleted file mode 100644
index fb130d9d6d1f61d153c2163644505db96be0a3b1..0000000000000000000000000000000000000000
Binary files a/wxRobot/bin/Release/wxRobot.exe and /dev/null differ
diff --git a/wxRobot/bin/Release/wxRobot.exe.config b/wxRobot/bin/Release/wxRobot.exe.config
deleted file mode 100644
index 56efbc7b5f15b5166cc89dae0406895b57de0b67..0000000000000000000000000000000000000000
--- a/wxRobot/bin/Release/wxRobot.exe.config
+++ /dev/null
@@ -1,6 +0,0 @@
-锘
-
-
-
-
-
\ No newline at end of file