diff --git a/docs/sdk.md b/docs/sdk.md
index ba9e093..a4b9c57 100644
--- a/docs/sdk.md
+++ b/docs/sdk.md
@@ -8,23 +8,24 @@
`WeChatSDK.dll`内部通过`RPC`通信和注入到微信进程的`WeChatSDKCore.dll`进行功能调用,支持多开微信功能的调用,微信间互不影响。
+在新版本(`1.3.0`)中,`WeChatRs`、`WeChatRc`是虚拟模块,代码何如到`WeChatSDKCore`和`WeChatSDK`中,并且实现了RPC双向通信,用于支持`WeChatSDK`设置回调。
+
## WeChatSDK使用
复制`WeChatSDK`目录中的`sdk.h`、`WeChatSDK.dll`以及`WeChatSDK.lib`(或者显示调用接口)到自己项目中,然后调用`sdk.h`中的接口定义进行代码开发即可。
-发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`,`WeChatRs.dll`,`WeChatRc.dll`。
+发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`(**新版已经将另外两个模块合并**)。
+~~发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`,`WeChatRs.dll`,`WeChatRc.dll`。~~
**源码目录介绍**
```
bin //老版本
docs //文档
-sdk //vs2017 x86编译完成的sdk模块
+sdk //vs2017 x86编译完成的sdk模块,其他语言的sdk
src
|- common //公共目录
|- WeChatSDK //WeChatSDK.dll
- |- WeChatRc //WeChatRs.dll
- |- WeChatRs //WeChatRc.dll
|- WeChatSDKCore //WeChatSDKCore.dll
|- WeChatSDKTest //SDK示例,普通用户多开工具
```
@@ -32,7 +33,7 @@ src
编译顺序(vs2017 x86):
```
-WeChatRs -> WeChatRc -> WeChatSDK -> WeChatSDKCore
+WeChatSDKCore -> WeChatSDK
```
## WeChatSDK接口
@@ -54,7 +55,7 @@ bool WXIsWechatSDKOk(DWORD pid);
检查初始化WeChatSDK是否成功。在检查到成功之后才能调用其他接口,否则SDK无法正常工作。pid是WXOpenWechat返回值。返回true表示成功。
int WXAntiRevokeMsg(DWORD pid);
-开启防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。
+开启防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。在1.3.0版本中更换实现方式,增加撤销提示,防止出现某些不可预见情况。
int WXUnAntiRevokeMsg(DWORD pid);
关闭防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。
@@ -68,6 +69,17 @@ int WXUnSaveVoiceMsg(DWORD pid);
int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg);
发送文字消息接口,支持表情[x]。pid是WXOpenWechat返回值,wxid指定要发送对象的wxid,msg指定要发送内容。返回0表示成功。后续会提供通过微信名或昵称获取wxid接口。
+int WXGetWechat(const wchar_t* wxid);
+通过wxid找到已经打开的微信的pid,实现不完整,不建议使用。
+
+typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg);
+int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr);
+设置接受文字消息的回调函数,在回调函数中自行处理消息。pid是WXOpenWechat返回值,funptr是回调函数,PFNRECVTEXTMSG_CALLBACK是回调接口声明。
+
+int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
+int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
+设置支付相关回调接口。
+
//void WXSendGroupTextMsg(); //暂不支持
//void WXSendImageMsg(); //暂不支持
//void WXSendVoiceMsg(); //暂不支持
@@ -80,7 +92,7 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg);
详细请参考`WeChatSDKTest`使用方法。
-其他语言接口请看[文档](sdkmore.md),目前已经发布`Python`,`Java`接口。
+其他语言接口请看[文档](sdkmore.md),目前已经发布`Python`,`Java`, `C#`接口。
## TODO
diff --git a/docs/sdkmore.md b/docs/sdkmore.md
index 9bcceba..06b9194 100644
--- a/docs/sdkmore.md
+++ b/docs/sdkmore.md
@@ -3,7 +3,7 @@
## Python
-发布`Python`版本的接口,具体使用见`src/WeChatSDKPy/sdk.py`。
+发布`Python`版本的接口,具体使用见`sdk/WeChatSDK.py`。
```
//需管理员运行python
@@ -19,7 +19,7 @@ print(wxsdk.WXSendTextMsg("wxid_n11111", "This is a python sdk test msg"))
## Java
-发布`Java`版本的接口,具体使用见`src/WeChatSDKJava/WeChatSDK.java`和`TestJavaSDK.java`。
+发布`Java`版本的接口,具体使用见`sdk/WeChatSDK.java`和`TestJavaSDK.java`。
由于`Java`接口使用了`jna`,所以需要下载[jna.jar](http://repo1.maven.org/maven2/net/java/dev/jna/jna/5.2.0/jna-5.2.0.jar),具体编译方法请查找`Java`相关文章。
@@ -51,3 +51,55 @@ public class TestJavaSDK {
}
```
+## C#
+
+发布`Java`版本的接口,具体使用见`sdk/WeChatSDK.cs`和`TestSDK.cs`。
+
+```
+//需管理员运行
+using static WeChatSDK.WeChatSDK;
+
+namespace ConsoleApp1
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ try
+ {
+ uint pid = WXOpenWechat();
+ Console.WriteLine("WXOpenWechat pid:" + pid);
+
+ while (!WXIsWechatAlive(pid))
+ {
+ Console.Write(".");
+ Thread.Sleep(100);
+ }
+ Console.WriteLine("initialize sdk...");
+ Console.WriteLine(WXInitialize(pid));
+ while (!WXIsWechatSDKOk(pid))
+ {
+ Console.Write(".");
+ Thread.Sleep(100);
+ }
+ Console.WriteLine("sdk ok...");
+ WXAntiRevokeMsg(pid);
+ WXSaveVoiceMsg(pid, "c:\\wxmsg");
+
+ WXRecvPayMsg(pid, RecvPayMsg);
+
+ Console.ReadLine();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ }
+ }
+ static int RecvMoneyMsg(UInt32 pid, string wxid, string id, string msg)
+ {
+ Console.WriteLine(wxid + ":" + msg);
+ return 0;
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/docs/update.md b/docs/update.md
index d870a84..964b696 100644
--- a/docs/update.md
+++ b/docs/update.md
@@ -1,4 +1,10 @@
# 更新日志
+
+**2019年3月8日**
+1. 发布Python、Java、C#的SDK,版本1.3.0
+2. 升级防撤消功能,有撤销提醒
+3. 增加接受消息接口(3种)
+
**2019年2月24日**
1. 开放WeChatSDK,提供丰富的操作微信的接口
2. 保留v1.1.3老版本,[下载地址](https://github.com/anhkgg/SuperWeChatPC/tree/master/bin)
diff --git a/readme.md b/readme.md
index d625885..7b32bf7 100644
--- a/readme.md
+++ b/readme.md
@@ -5,14 +5,15 @@
Ϊ˷ܹ`PC`飬ָıĿṩԲͬȺĹܡ
-1. ͨûȻֱʹԭĶߣ֧ؿִгɡ[صַ](https://github.com/anhkgg/SuperWeChatPC/archive/v1.1.3.zip)ϸʹ÷뿴[ͨûʹSuperWeChatPC](docs/normal.md)
+1. ͨûȻֱʹԭĶߣֱؿִгɡ[صַ](https://github.com/anhkgg/SuperWeChatPC/archive/v1.1.3.zip)ϸʹ÷뿴[ͨûʹSuperWeChatPC](docs/normal.md)
2. Կߣṩ`WeChatSDK`ŲŵĸֽӿڣԽжοʹ÷뿴[WeChatSDKָ](docs/sdk.md)
`SuperWeChatPC`ֹ֧ܣ
1. ȫ汾
-2. Ϣ`>=2.6.6.25`
+2. Ϣгʾ`>=2.6.7.40`
3. Ϣݣ`>=2.6.6.28`
4. Ϣͽӿڣ`>=2.6.6.44`
+5. Ϣӿڣ3Ϣ`>=2.6.7.40`)
**`WeChatSDK`ĿǰѾ`C++``Python``Java`ӿڡ** 뿴[WeChatSDKָ](docs/sdk.md)
@@ -35,6 +36,10 @@
ӭPRṩ顣
+**л**
+
+1. [https://github.com/martona/mhook](https://github.com/martona/mhook)
+
###
****
diff --git "a/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat" "b/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat"
new file mode 100644
index 0000000..31f607a
--- /dev/null
+++ "b/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat"
@@ -0,0 +1,3 @@
+@echo off
+
+SuperWeChat.exe c:\wxmsg
\ No newline at end of file
diff --git a/sdk/SuperWeChat.exe b/sdk/SuperWeChat.exe
index f8d1f5c..782c042 100644
Binary files a/sdk/SuperWeChat.exe and b/sdk/SuperWeChat.exe differ
diff --git a/sdk/SuperWeChat.zip b/sdk/SuperWeChat.zip
index 6740905..11640ad 100644
Binary files a/sdk/SuperWeChat.zip and b/sdk/SuperWeChat.zip differ
diff --git a/src/WeChatSDKJava/TestJavaSDK.java b/sdk/TestJavaSDK.java
similarity index 100%
rename from src/WeChatSDKJava/TestJavaSDK.java
rename to sdk/TestJavaSDK.java
diff --git a/sdk/TestSDK.cs b/sdk/TestSDK.cs
new file mode 100644
index 0000000..9b61c24
--- /dev/null
+++ b/sdk/TestSDK.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+
+using static WeChatSDK.WeChatSDK;
+
+namespace ConsoleApp1
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ try
+ {
+ uint pid = WXOpenWechat();
+ Console.WriteLine("WXOpenWechat pid:" + pid);
+
+ while (!WXIsWechatAlive(pid))
+ {
+ Console.Write(".");
+ Thread.Sleep(100);
+ }
+
+ Console.WriteLine("initialize sdk...");
+
+ Console.WriteLine(WXInitialize(pid));
+
+ while (!WXIsWechatSDKOk(pid))
+ {
+ Console.Write(".");
+ Thread.Sleep(100);
+ }
+
+ Console.WriteLine("sdk ok...");
+
+ WXAntiRevokeMsg(pid);
+ WXSaveVoiceMsg(pid, "c:\\wxmsg");
+
+ WXRecvPayMsg(pid, RecvMoneyMsg);
+
+ Console.ReadLine();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ }
+ }
+
+ static int RecvMoneyMsg(UInt32 pid, string wxid, string id, string msg)
+ {
+ Console.WriteLine(wxid + ":" + msg);
+ return 0;
+ }
+ }
+}
diff --git a/sdk/WeChatRc.dll b/sdk/WeChatRc.dll
deleted file mode 100644
index a60a2fd..0000000
Binary files a/sdk/WeChatRc.dll and /dev/null differ
diff --git a/sdk/WeChatRs.dll b/sdk/WeChatRs.dll
deleted file mode 100644
index 4b88746..0000000
Binary files a/sdk/WeChatRs.dll and /dev/null differ
diff --git a/sdk/WeChatSDK.cs b/sdk/WeChatSDK.cs
new file mode 100644
index 0000000..08f9b25
--- /dev/null
+++ b/sdk/WeChatSDK.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace WeChatSDK
+{
+ class WeChatSDK
+ {
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public uint WXOpenWechat();
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public bool WXIsWechatAlive(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXInitialize(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXUninitialize(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public bool WXIsWechatSDKOk(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXGetWechat(string wxid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXAntiRevokeMsg(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXUnAntiRevokeMsg(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
+ extern static public int WXSaveVoiceMsg(uint pid, string path);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXUnSaveVoiceMsg(uint pid);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
+ extern static public int WXSendTextMsg(uint pid, string wxid, string msg);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
+ public delegate int RecvMsgCallback(uint pid, string wxid, string msg);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
+ public delegate int RecvPayMsgCallback(uint pid, string wxid, string id, string msg);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXRecvTextMsg(uint pid, RecvMsgCallback funptr);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXRecvTransferMsg(uint pid, RecvPayMsgCallback funptr);
+
+ [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)]
+ extern static public int WXRecvPayMsg(uint pid, RecvPayMsgCallback funptr);
+ }
+}
\ No newline at end of file
diff --git a/sdk/WeChatSDK.dll b/sdk/WeChatSDK.dll
index f68f2e8..06e8b29 100644
Binary files a/sdk/WeChatSDK.dll and b/sdk/WeChatSDK.dll differ
diff --git a/src/WeChatSDKJava/WeChatSDK.java b/sdk/WeChatSDK.java
similarity index 100%
rename from src/WeChatSDKJava/WeChatSDK.java
rename to sdk/WeChatSDK.java
diff --git a/src/WeChatSDKPy/sdk.py b/sdk/WeChatSDK.py
similarity index 100%
rename from src/WeChatSDKPy/sdk.py
rename to sdk/WeChatSDK.py
diff --git a/sdk/WeChatSDKCore.dll b/sdk/WeChatSDKCore.dll
index 5c10f59..bd400e6 100644
Binary files a/sdk/WeChatSDKCore.dll and b/sdk/WeChatSDKCore.dll differ
diff --git a/sdk/sdk.h b/sdk/sdk.h
index 148c68e..933055d 100644
--- a/sdk/sdk.h
+++ b/sdk/sdk.h
@@ -6,12 +6,22 @@ int WXInitialize(DWORD pid);
int WXUninitialize(DWORD pid);
bool WXIsWechatSDKOk(DWORD pid);
+int WXGetWechat(const wchar_t* wxid);//Ѿ
+
int WXAntiRevokeMsg(DWORD pid);
int WXUnAntiRevokeMsg(DWORD pid);
int WXSaveVoiceMsg(DWORD pid, const wchar_t* path);
int WXUnSaveVoiceMsg(DWORD pid);
int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg);
+int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path);
+
+typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg);
+int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr);
+
+typedef int(*PFNRECVMONEYMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* tid, wchar_t* msg);
+int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
+int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
void WXSendGroupTextMsg();
void WXSendImageMsg();
diff --git a/src/WeChatRc/WeCharRc.def b/src/WeChatRc/WeCharRc.def
deleted file mode 100644
index 5d1418a..0000000
--- a/src/WeChatRc/WeCharRc.def
+++ /dev/null
@@ -1,4 +0,0 @@
-EXPORTS
- ConnectSDKServer
- DisconnectSDKServer
- GetSDKInterface
\ No newline at end of file
diff --git a/src/WeChatRc/WeChatRc.aps b/src/WeChatRc/WeChatRc.aps
deleted file mode 100644
index 70b5433..0000000
Binary files a/src/WeChatRc/WeChatRc.aps and /dev/null differ
diff --git a/src/WeChatRc/WeChatRc.rc b/src/WeChatRc/WeChatRc.rc
deleted file mode 100644
index a0b4e14..0000000
Binary files a/src/WeChatRc/WeChatRc.rc and /dev/null differ
diff --git a/src/WeChatRc/WeChatRc.vcxproj b/src/WeChatRc/WeChatRc.vcxproj
deleted file mode 100644
index 315b25e..0000000
--- a/src/WeChatRc/WeChatRc.vcxproj
+++ /dev/null
@@ -1,187 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 15.0
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}
- Win32Proj
- WeChatRc
- 10.0.17134.0
-
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
- true
-
-
- true
-
-
- false
-
-
-
- Use
- Level3
- MaxSpeed
- true
- true
- true
- WIN32;NDEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
- MultiThreaded
-
-
- Windows
- true
- true
- true
- WeCharRc.def
-
-
- copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)"
-
-
-
-
- Use
- Level3
- Disabled
- true
- WIN32;_DEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
-
-
-
-
- Use
- Level3
- Disabled
- true
- _DEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
-
-
-
-
- Use
- Level3
- MaxSpeed
- true
- true
- true
- NDEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
- NotUsing
-
-
- NotUsing
-
-
-
- Create
- Create
- Create
- Create
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRc/WeChatRc.vcxproj.filters b/src/WeChatRc/WeChatRc.vcxproj.filters
deleted file mode 100644
index 9567eb1..0000000
--- a/src/WeChatRc/WeChatRc.vcxproj.filters
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
-
-
- 源文件
-
-
-
-
- 资源文件
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRc/WeChatRc.vcxproj.user b/src/WeChatRc/WeChatRc.vcxproj.user
deleted file mode 100644
index be25078..0000000
--- a/src/WeChatRc/WeChatRc.vcxproj.user
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRc/dllmain.cpp b/src/WeChatRc/dllmain.cpp
deleted file mode 100644
index bc73c03..0000000
Binary files a/src/WeChatRc/dllmain.cpp and /dev/null differ
diff --git a/src/WeChatRc/resource.h b/src/WeChatRc/resource.h
deleted file mode 100644
index 2f32917..0000000
--- a/src/WeChatRc/resource.h
+++ /dev/null
@@ -1,14 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by WeChatRc.rc
-
-// ¶һĬֵ
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/src/WeChatRc/sdk.cpp b/src/WeChatRc/sdk.cpp
deleted file mode 100644
index cc091d5..0000000
Binary files a/src/WeChatRc/sdk.cpp and /dev/null differ
diff --git a/src/WeChatRc/stdafx.cpp b/src/WeChatRc/stdafx.cpp
deleted file mode 100644
index 08343af..0000000
Binary files a/src/WeChatRc/stdafx.cpp and /dev/null differ
diff --git a/src/WeChatRc/stdafx.h b/src/WeChatRc/stdafx.h
deleted file mode 100644
index 7e9fc49..0000000
Binary files a/src/WeChatRc/stdafx.h and /dev/null differ
diff --git a/src/WeChatRc/targetver.h b/src/WeChatRc/targetver.h
deleted file mode 100644
index 7f8bdf0..0000000
Binary files a/src/WeChatRc/targetver.h and /dev/null differ
diff --git a/src/WeChatRs/WeChatRs.aps b/src/WeChatRs/WeChatRs.aps
deleted file mode 100644
index b60483c..0000000
Binary files a/src/WeChatRs/WeChatRs.aps and /dev/null differ
diff --git a/src/WeChatRs/WeChatRs.def b/src/WeChatRs/WeChatRs.def
deleted file mode 100644
index 949f487..0000000
--- a/src/WeChatRs/WeChatRs.def
+++ /dev/null
@@ -1,3 +0,0 @@
-EXPORTS
- StartSDKServer
- StopSDKServer
\ No newline at end of file
diff --git a/src/WeChatRs/WeChatRs.rc b/src/WeChatRs/WeChatRs.rc
deleted file mode 100644
index 190bad4..0000000
Binary files a/src/WeChatRs/WeChatRs.rc and /dev/null differ
diff --git a/src/WeChatRs/WeChatRs.vcxproj b/src/WeChatRs/WeChatRs.vcxproj
deleted file mode 100644
index 863fdfa..0000000
--- a/src/WeChatRs/WeChatRs.vcxproj
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 15.0
- {F980CB45-B702-44D4-976E-F32FCB35D085}
- Win32Proj
- WeChatRs
- 10.0.17134.0
-
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
- true
-
-
- true
-
-
- false
-
-
-
- Use
- Level3
- MaxSpeed
- true
- true
- true
- WIN32;NDEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
- MultiThreaded
-
-
- Windows
- true
- true
- true
- WeChatRs.def
-
-
- copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)"
-
-
-
-
- Use
- Level3
- Disabled
- true
- WIN32;_DEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
-
-
-
-
- Use
- Level3
- Disabled
- true
- _DEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
-
-
-
-
- Use
- Level3
- MaxSpeed
- true
- true
- true
- NDEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- true
-
-
- Windows
- true
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
- NotUsing
-
-
-
- NotUsing
-
-
- Create
- Create
- Create
- Create
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRs/WeChatRs.vcxproj.filters b/src/WeChatRs/WeChatRs.vcxproj.filters
deleted file mode 100644
index 4fbe060..0000000
--- a/src/WeChatRs/WeChatRs.vcxproj.filters
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
- 头文件
-
-
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
- 源文件
-
-
-
-
-
- 源文件
-
-
-
-
- 源文件
-
-
-
-
- 资源文件
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRs/WeChatRs.vcxproj.user b/src/WeChatRs/WeChatRs.vcxproj.user
deleted file mode 100644
index be25078..0000000
--- a/src/WeChatRs/WeChatRs.vcxproj.user
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/src/WeChatRs/dllmain.cpp b/src/WeChatRs/dllmain.cpp
deleted file mode 100644
index bc73c03..0000000
Binary files a/src/WeChatRs/dllmain.cpp and /dev/null differ
diff --git a/src/WeChatRs/resource.h b/src/WeChatRs/resource.h
deleted file mode 100644
index b1f4a99..0000000
--- a/src/WeChatRs/resource.h
+++ /dev/null
@@ -1,14 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by WeChatRs.rc
-
-// ¶һĬֵ
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/src/WeChatRs/sdk.cpp b/src/WeChatRs/sdk.cpp
deleted file mode 100644
index 4ef8902..0000000
Binary files a/src/WeChatRs/sdk.cpp and /dev/null differ
diff --git a/src/WeChatRs/sdkdef.idl b/src/WeChatRs/sdkdef.idl
deleted file mode 100644
index 54102ce..0000000
--- a/src/WeChatRs/sdkdef.idl
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- uuid(EC3A7CE8-8F99-47ef-9705-DA5DF14F9A4C),
- version(1.0)
-]
-
-interface WechatSDK
-{
- int Initialize();
- int AntiRevokeMsg();
- int UnAntiRevokeMsg();
- int StartSaveVoiceMsg([in, string]wchar_t* path);
- int StopSaveVoiceMsg();
- int SendTextMsg([in, string]wchar_t* wxid, [in, string]wchar_t* msg);
-}
\ No newline at end of file
diff --git a/src/WeChatRs/stdafx.cpp b/src/WeChatRs/stdafx.cpp
deleted file mode 100644
index 08343af..0000000
Binary files a/src/WeChatRs/stdafx.cpp and /dev/null differ
diff --git a/src/WeChatRs/stdafx.h b/src/WeChatRs/stdafx.h
deleted file mode 100644
index 7e9fc49..0000000
Binary files a/src/WeChatRs/stdafx.h and /dev/null differ
diff --git a/src/WeChatRs/targetver.h b/src/WeChatRs/targetver.h
deleted file mode 100644
index 7f8bdf0..0000000
Binary files a/src/WeChatRs/targetver.h and /dev/null differ
diff --git a/src/WeChatSDK/WeChatSDK.vcxproj b/src/WeChatSDK/WeChatSDK.vcxproj
index 5ed0e3a..3dd3294 100644
--- a/src/WeChatSDK/WeChatSDK.vcxproj
+++ b/src/WeChatSDK/WeChatSDK.vcxproj
@@ -103,7 +103,8 @@
sdk.def
- copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)"
+ copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)"
+copy "sdk.h" "../../sdk/sdk.h"
@@ -153,17 +154,33 @@
+
+
+
+
+
+
+ NotUsing
+
+
+ NotUsing
+
+
+ NotUsing
+
+
+
Create
Create
diff --git a/src/WeChatSDK/WeChatSDK.vcxproj.filters b/src/WeChatSDK/WeChatSDK.vcxproj.filters
index b2881aa..30f3bba 100644
--- a/src/WeChatSDK/WeChatSDK.vcxproj.filters
+++ b/src/WeChatSDK/WeChatSDK.vcxproj.filters
@@ -13,6 +13,9 @@
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+ {f2c8e71e-ece9-4410-a55b-b86768c50a6b}
+
@@ -33,6 +36,21 @@
头文件
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
@@ -47,6 +65,21 @@
源文件
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ 源文件
+
diff --git a/src/WeChatSDK/inject.h b/src/WeChatSDK/inject.h
index 7ab3e62..522795d 100644
--- a/src/WeChatSDK/inject.h
+++ b/src/WeChatSDK/inject.h
@@ -9,4 +9,6 @@ int GetProcID(const WCHAR* _proc_name);
bool InjectDll(const WCHAR* path, const WCHAR* dllpath);
//pid: process id
//dllpath: dll full path
-bool InjectDll1(DWORD pid, const WCHAR* dllpath);
\ No newline at end of file
+bool InjectDll1(DWORD pid, const WCHAR* dllpath);
+//
+bool EnjectDll(DWORD pid, const WCHAR* dllname);
\ No newline at end of file
diff --git a/src/WeChatSDK/inject.lib b/src/WeChatSDK/inject.lib
index ead1134..0f823a2 100644
Binary files a/src/WeChatSDK/inject.lib and b/src/WeChatSDK/inject.lib differ
diff --git a/src/WeChatSDK/rpcutil.cpp b/src/WeChatSDK/rpcutil.cpp
new file mode 100644
index 0000000..fa8a8c2
--- /dev/null
+++ b/src/WeChatSDK/rpcutil.cpp
@@ -0,0 +1,35 @@
+#include "stdafx.h"
+#include "../common/rpcdef.h"
+#include "../common/rpc.h"
+#include "../WeChatSDKCore/sdkdef_h.h"
+#include "../WeChatSDKCore/sdkclk_h.h"
+
+// for sdkdef.idl
+
+int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding)
+{
+ WCHAR wszEndPoint[MAX_PATH] = { 0 };
+ wsprintf(wszEndPoint, L"%ws_%d", g_Endpoint, pid);
+ RPC_STATUS status = RpcConnectServer((RPC_WSTR)wszEndPoint, &WechatRs_IfHandle, StringBinding);
+ return status;
+}
+
+int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding)
+{
+ RpcDisconnectServer(&WechatRs_IfHandle, StringBinding);
+ return 0;
+}
+
+//for sdkclk.idl
+
+int StartSDKClkServer()
+{
+ WCHAR wszEndPoint[MAX_PATH] = { 0 };
+ wsprintf(wszEndPoint, L"%ws", g_ClkEndpoint);
+ return RpcStartService((RPC_WSTR)wszEndPoint, WechatSDKClk_v1_0_s_ifspec);
+}
+
+void StopSDKClkServer()
+{
+ RpcStopService();
+}
diff --git a/src/WeChatSDK/rpcutil.h b/src/WeChatSDK/rpcutil.h
new file mode 100644
index 0000000..a5d0170
--- /dev/null
+++ b/src/WeChatSDK/rpcutil.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "stdafx.h"
+
+int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding);
+int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding);
+int StartSDKClkServer();
+void StopSDKClkServer();
\ No newline at end of file
diff --git a/src/WeChatSDK/sdk.cpp b/src/WeChatSDK/sdk.cpp
index 26e6d61..508c779 100644
--- a/src/WeChatSDK/sdk.cpp
+++ b/src/WeChatSDK/sdk.cpp
@@ -6,24 +6,44 @@
#include "sdk.h"
#include "inject.h"
-#include "../common/sdkinf.h"
-#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRc.lib")
+//#include "../common/sdkinf.h"
+#include "../WeChatSDKCore/sdkdef_h.h"
+#include "rpcutil.h"
+
+//#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRc.lib")
#pragma comment(lib, "inject.lib")
+#define WECHAREXE L"WeChat.exe"
#define WECHATWINDLL L"WeChatWin.dll"
#define WECHATSDKDLL L"WeChatSDK.dll"
#define WECHATINJECTDLL L"WeChatSDKCore.dll"
//TODO: edit the file to add interface
-//int ConnectSDKServer0(DWORD pid);
-//int DisconnectSDKServer0(DWORD pid);
+bool g_IsSDKInited = false;
+
-int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding);
-int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding);
-int GetSDKInterface(PWechatSDKInterface p);
+void RpcLoop()
+{
+ OutputDebugString(L"start wechatsdk rpc");
+ StartSDKClkServer();
+ OutputDebugString(L"exit..wechatsdk.rpc");
+}
+
+int InitSDK()
+{
+ CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RpcLoop, NULL, 0, NULL);
+ return ERROR_SUCCESS;
+}
+
+void UninitSDK()
+{
+ if (g_IsSDKInited) {
+ g_IsSDKInited = false;
+ StopSDKClkServer();
+ }
+}
-WechatSDKInterface g_SDKInf = { 0 };
int WXOpenWechat()
{
@@ -35,6 +55,28 @@ int WXOpenWechat()
return pid;
}
+int WXGetWechat(const wchar_t* wxid)
+{
+ int ret = 0;
+ PROCESSENTRY32 pe32 = { sizeof(pe32) };
+
+ HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (hSnap == INVALID_HANDLE_VALUE) {
+ return 0;
+ }
+
+ if (Process32First(hSnap, &pe32)) {
+ do {
+ if (!_wcsnicmp(pe32.szExeFile, WECHAREXE, wcslen(WECHAREXE))) {
+ ret = pe32.th32ProcessID;
+ //TODO: //WXGetSelfWxid();
+ break;
+ }
+ } while (Process32Next(hSnap, &pe32));
+ }
+ return ret;
+}
+
bool WXIsWechatAlive(DWORD pid)
{
bool ret = false;
@@ -56,6 +98,8 @@ bool WXIsWechatAlive(DWORD pid)
return ret;
}
+//for sdk interface
+
int WXInitialize(DWORD pid)
{
WCHAR DllPath[MAX_PATH] = { 0 };
@@ -76,8 +120,12 @@ int WXInitialize(DWORD pid)
return -1;
}
- if (g_SDKInf.Initialize == NULL) {
- GetSDKInterface(&g_SDKInf);
+ //WSDKInitialize(); //rpcδ
+
+ if (!g_IsSDKInited) {
+ if (InitSDK() == ERROR_SUCCESS) {
+ g_IsSDKInited = true;
+ }
}
return ERROR_SUCCESS;
@@ -85,8 +133,29 @@ int WXInitialize(DWORD pid)
int WXUninitialize(DWORD pid)
{
+ UninitSDK();
//EnjectDll
- return 0;
+ RPC_WSTR StringBinding = NULL;
+ int ret = ConnectSDKServer(pid, &StringBinding);
+ if (ret == ERROR_SUCCESS) {
+ RpcTryExcept
+ {
+ ret = WSDKUninitialize();
+ }
+ RpcExcept(1)
+ {
+ //printf("RPC Exception %d/n", RpcExceptionCode());
+ return false;
+ }
+ RpcEndExcept
+
+ DisconnectSDKServer(pid, &StringBinding);
+
+ EnjectDll(pid, WECHATINJECTDLL);
+
+ return ERROR_SUCCESS;
+ }
+ return -1;
}
bool WXIsWechatSDKOk(DWORD pid)
@@ -96,7 +165,7 @@ bool WXIsWechatSDKOk(DWORD pid)
if (ret == ERROR_SUCCESS) {
RpcTryExcept
{
- ret = g_SDKInf.Initialize();
+ ret = WSDKInitialize();
}
RpcExcept(1)
{
@@ -119,7 +188,7 @@ int WXAntiRevokeMsg(DWORD pid)
// ǵ÷˵ĺ
RpcTryExcept
{
- ret = g_SDKInf.AntiRevokeMsg();
+ ret = WSDKAntiRevokeMsg();
}
RpcExcept(1)
{
@@ -140,7 +209,7 @@ int WXUnAntiRevokeMsg(DWORD pid)
// ǵ÷˵ĺ
RpcTryExcept
{
- ret = g_SDKInf.UnAntiRevokeMsg();
+ ret = WSDKUnAntiRevokeMsg();
}
RpcExcept(1)
{
@@ -161,7 +230,7 @@ int WXSaveVoiceMsg(DWORD pid, const wchar_t* path)
// ǵ÷˵ĺ
RpcTryExcept
{
- ret = g_SDKInf.StartSaveVoiceMsg((wchar_t *)path);
+ ret = WSDKStartSaveVoiceMsg((wchar_t *)path);
}
RpcExcept(1)
{
@@ -181,7 +250,7 @@ int WXUnSaveVoiceMsg(DWORD pid)
// ǵ÷˵ĺ
RpcTryExcept
{
- ret = g_SDKInf.StopSaveVoiceMsg();
+ ret = WSDKStopSaveVoiceMsg();
}
RpcExcept(1)
{
@@ -202,7 +271,7 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg)
// ǵ÷˵ĺ
RpcTryExcept
{
- ret = g_SDKInf.SendTextMsg((wchar_t*)wxid, (wchar_t*)msg);
+ ret = WSDKSendTextMsg((wchar_t*)wxid, (wchar_t*)msg);
}
RpcExcept(1)
{
@@ -213,4 +282,88 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg)
DisconnectSDKServer(pid, &StringBinding);
}
return ret;
+}
+
+int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path)
+{
+ RPC_WSTR StringBinding = NULL;
+ int ret = ConnectSDKServer(pid, &StringBinding);
+ if (ret == 0) {
+ // ǵ÷˵ĺ
+ RpcTryExcept
+ {
+ ret = WSDKSendImageMsg((wchar_t*)wxid, (wchar_t*)path);
+ }
+ RpcExcept(1)
+ {
+ printf("RPC Exception %d/n", RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ DisconnectSDKServer(pid, &StringBinding);
+ }
+ return ret;
+}
+
+int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr)
+{
+ RPC_WSTR StringBinding = NULL;
+ int ret = ConnectSDKServer(pid, &StringBinding);
+ if (ret == 0) {
+ // ǵ÷˵ĺ
+ RpcTryExcept
+ {
+ ret = WSDKRecvTextMsg((unsigned int)funptr);
+ }
+ RpcExcept(1)
+ {
+ printf("RPC Exception %d/n", RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ DisconnectSDKServer(pid, &StringBinding);
+ }
+ return ret;
+}
+
+int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr)
+{
+ RPC_WSTR StringBinding = NULL;
+ int ret = ConnectSDKServer(pid, &StringBinding);
+ if (ret == 0) {
+ // ǵ÷˵ĺ
+ RpcTryExcept
+ {
+ ret = WSDKRecvTransferMsg((unsigned int)funptr);
+ }
+ RpcExcept(1)
+ {
+ printf("RPC Exception %d/n", RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ DisconnectSDKServer(pid, &StringBinding);
+ }
+ return ret;
+}
+
+int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr)
+{
+ RPC_WSTR StringBinding = NULL;
+ int ret = ConnectSDKServer(pid, &StringBinding);
+ if (ret == 0) {
+ // ǵ÷˵ĺ
+ RpcTryExcept
+ {
+ ret = WSDKRecvPayMsg((unsigned int)funptr);
+ }
+ RpcExcept(1)
+ {
+ printf("RPC Exception %d/n", RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ DisconnectSDKServer(pid, &StringBinding);
+ }
+ return ret;
}
\ No newline at end of file
diff --git a/src/WeChatSDK/sdk.def b/src/WeChatSDK/sdk.def
index 411e340..0a2b69a 100644
--- a/src/WeChatSDK/sdk.def
+++ b/src/WeChatSDK/sdk.def
@@ -1,5 +1,6 @@
EXPORTS
WXOpenWechat
+ WXGetWechat
WXIsWechatAlive
WXInitialize
WXUninitialize
@@ -8,4 +9,8 @@ EXPORTS
WXUnAntiRevokeMsg
WXSaveVoiceMsg
WXUnSaveVoiceMsg
- WXSendTextMsg
\ No newline at end of file
+ WXSendTextMsg
+ ;WXSendImageMsg
+ WXRecvTextMsg
+ WXRecvTransferMsg
+ WXRecvPayMsg
\ No newline at end of file
diff --git a/src/WeChatSDK/sdk.h b/src/WeChatSDK/sdk.h
index 148c68e..933055d 100644
--- a/src/WeChatSDK/sdk.h
+++ b/src/WeChatSDK/sdk.h
@@ -6,12 +6,22 @@ int WXInitialize(DWORD pid);
int WXUninitialize(DWORD pid);
bool WXIsWechatSDKOk(DWORD pid);
+int WXGetWechat(const wchar_t* wxid);//Ѿ
+
int WXAntiRevokeMsg(DWORD pid);
int WXUnAntiRevokeMsg(DWORD pid);
int WXSaveVoiceMsg(DWORD pid, const wchar_t* path);
int WXUnSaveVoiceMsg(DWORD pid);
int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg);
+int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path);
+
+typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg);
+int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr);
+
+typedef int(*PFNRECVMONEYMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* tid, wchar_t* msg);
+int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
+int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr);
void WXSendGroupTextMsg();
void WXSendImageMsg();
diff --git a/src/WeChatSDK/sdkclk.cpp b/src/WeChatSDK/sdkclk.cpp
new file mode 100644
index 0000000..eb307a8
--- /dev/null
+++ b/src/WeChatSDK/sdkclk.cpp
@@ -0,0 +1,49 @@
+#include "stdafx.h"
+#include "sdk.h"
+#include "../WeChatSDKCore/sdkclk_h.h"
+
+//callback
+
+int WSDKClkRecvTextMsg(
+ /* [in] */ unsigned int funptr,
+ /* [in] */ int pid,
+ /* [string][in] */ wchar_t *wxid,
+ /* [string][in] */ wchar_t *msg)
+{
+ OutputDebugStringA("sdkclk: WSDKClkRecvTextMsg");
+ if (funptr)
+ {
+ ((PFNRECVTEXTMSG_CALLBACK)funptr)(pid, wxid, msg);
+ }
+ return 0;
+}
+
+int WSDKClkRecvTransferMsg(
+ /* [in] */ unsigned int funptr,
+ /* [in] */ int pid,
+ /* [string][in] */ wchar_t *wxid,
+ /* [string][in] */ wchar_t* tid,
+ /* [string][in] */ wchar_t *msg)
+{
+ OutputDebugStringA("sdkclk: WSDKClkRecvTransferMsg");
+ if (funptr)
+ {
+ ((PFNRECVMONEYMSG_CALLBACK)funptr)(pid, wxid, tid, msg);
+ }
+ return 0;
+}
+
+int WSDKClkRecvPayMsg(
+ /* [in] */ unsigned int funptr,
+ /* [in] */ int pid,
+ /* [string][in] */ wchar_t *wxid,
+ /* [string][in] */ wchar_t* tid,
+ /* [string][in] */ wchar_t *msg)
+{
+ OutputDebugStringA("sdkclk: WSDKClkRecvPayMsg");
+ if (funptr)
+ {
+ ((PFNRECVMONEYMSG_CALLBACK)funptr)(pid, wxid, tid, msg);
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/src/WeChatSDKCore/WeChatResource.vcxproj b/src/WeChatSDKCore/WeChatResource.vcxproj
index 458f769..22b8ee3 100644
--- a/src/WeChatSDKCore/WeChatResource.vcxproj
+++ b/src/WeChatSDKCore/WeChatResource.vcxproj
@@ -118,11 +118,12 @@
Level3
Disabled
true
- true
+ false
true
WIN32;NDEBUG;WECHATRESOURCE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
MultiThreaded
+ false
Windows
@@ -155,12 +156,18 @@
+
+
+
+
+
+
@@ -169,6 +176,9 @@
+
+ NotUsing
+
NotUsing
@@ -176,7 +186,18 @@
+
+
+ NotUsing
+
+
+
+ NotUsing
+
+
+ NotUsing
+
Create
@@ -184,6 +205,7 @@
Create
Create
+
@@ -198,6 +220,12 @@
+
+
+
+
+
+
diff --git a/src/WeChatSDKCore/WeChatResource.vcxproj.filters b/src/WeChatSDKCore/WeChatResource.vcxproj.filters
index 80e3a8f..d6c2adf 100644
--- a/src/WeChatSDKCore/WeChatResource.vcxproj.filters
+++ b/src/WeChatSDKCore/WeChatResource.vcxproj.filters
@@ -13,6 +13,9 @@
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+ {83ef953c-a900-4334-80a8-f68db0740031}
+
@@ -51,6 +54,24 @@
头文件
+
+ rpc
+
+
+ rpc
+
+
+ 头文件
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
@@ -86,6 +107,27 @@
源文件
+
+ 源文件
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ rpc
+
+
+ 源文件
+
+
+ 源文件
+
@@ -96,5 +138,19 @@
源文件
+
+ rpc
+
+
+ rpc
+
+
+
+
+ rpc
+
+
+ rpc
+
\ No newline at end of file
diff --git a/src/WeChatSDKCore/WeChatSDKCore.sln b/src/WeChatSDKCore/WeChatSDKCore.sln
index 42040e3..ad4bb93 100644
--- a/src/WeChatSDKCore/WeChatSDKCore.sln
+++ b/src/WeChatSDKCore/WeChatSDKCore.sln
@@ -3,15 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.0
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatCore", "WeChatResource.vcxproj", "{CC8544D5-1A6E-4515-B737-4DA205371032}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDKCore", "WeChatResource.vcxproj", "{CC8544D5-1A6E-4515-B737-4DA205371032}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDK", "..\WeChatSDK\WeChatSDK.vcxproj", "{3863B180-E079-4735-ABF7-13552EE0C3F1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDKTest", "..\WeChatSDKTest\WeChatSDKTest.vcxproj", "{00EC6E77-8926-4860-A73F-3E5DBBE6221B}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatRc", "..\WeChatRc\WeChatRc.vcxproj", "{FF7BD19B-CD33-4EEB-98A3-0E25743D3333}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatRs", "..\WeChatRs\WeChatRs.vcxproj", "{F980CB45-B702-44D4-976E-F32FCB35D085}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inject", "..\inject\inject.vcxproj", "{F1DD9E37-B005-40EA-9A61-C952F08A35E9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -45,22 +43,14 @@ Global
{00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x64.Build.0 = Release|x64
{00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x86.ActiveCfg = Release|Win32
{00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x86.Build.0 = Release|Win32
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x64.ActiveCfg = Debug|x64
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x64.Build.0 = Debug|x64
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x86.ActiveCfg = Debug|Win32
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x86.Build.0 = Debug|Win32
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x64.ActiveCfg = Release|x64
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x64.Build.0 = Release|x64
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x86.ActiveCfg = Release|Win32
- {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x86.Build.0 = Release|Win32
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x64.ActiveCfg = Debug|x64
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x64.Build.0 = Debug|x64
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x86.ActiveCfg = Debug|Win32
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x86.Build.0 = Debug|Win32
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x64.ActiveCfg = Release|x64
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x64.Build.0 = Release|x64
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x86.ActiveCfg = Release|Win32
- {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x86.Build.0 = Release|Win32
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x64.ActiveCfg = Debug|x64
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x64.Build.0 = Debug|x64
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x86.ActiveCfg = Debug|Win32
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x86.Build.0 = Debug|Win32
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x64.ActiveCfg = Release|x64
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x64.Build.0 = Release|x64
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x86.ActiveCfg = Release|Win32
+ {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/WeChatSDKCore/common.cpp b/src/WeChatSDKCore/common.cpp
index 75c6ed2..a998b9c 100644
--- a/src/WeChatSDKCore/common.cpp
+++ b/src/WeChatSDKCore/common.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "common.h"
#include "util.h"
+#include "mhook.h"
bool IsSupportedWxVersion(
const SuppWxCfg* cfg,
@@ -45,4 +46,26 @@ bool IsSupportedWxVersion(
}
return false;
+}
+
+int HookTemplate(HMODULE hMod, const SuppWxCfg* OffArray, int len, PVOID* orig, PVOID fake)
+{
+ DWORD offset = 0;
+ if (IsSupportedWxVersion(
+ OffArray,
+ len,
+ &offset))
+ {
+ *orig = (PVOID)((DWORD)hMod + offset);
+ if (!Mhook_SetHook((PVOID*)orig, fake)) {
+ *orig = NULL;
+ return ERROR_INVALID_ADDRESS;
+ }
+ else {
+ return ERROR_SUCCESS;
+ }
+ }
+ else {
+ return ERROR_NOT_SUPPORTED;
+ }
}
\ No newline at end of file
diff --git a/src/WeChatSDKCore/common.h b/src/WeChatSDKCore/common.h
index e2d756d..9475679 100644
--- a/src/WeChatSDKCore/common.h
+++ b/src/WeChatSDKCore/common.h
@@ -28,4 +28,6 @@ bool IsSupportedWxVersion(
BYTE* orig_code = NULL,
DWORD* orig_code_count = NULL,
BYTE* fake_code = NULL,
- DWORD* fake_code_count = NULL);
\ No newline at end of file
+ DWORD* fake_code_count = NULL);
+
+int HookTemplate(HMODULE hMod, const SuppWxCfg* OffArray, int len, PVOID* orig, PVOID fake);
\ No newline at end of file
diff --git a/src/WeChatSDKCore/recvmsg.cpp b/src/WeChatSDKCore/recvmsg.cpp
new file mode 100644
index 0000000..f51c4ee
--- /dev/null
+++ b/src/WeChatSDKCore/recvmsg.cpp
@@ -0,0 +1,301 @@
+
+#include "stdafx.h"
+#include "mhook.h"
+#include
+#include "weixin.h"
+#include "sdk.h"
+#include