Skip to content

Commit

Permalink
1) public WeChatSDK1.3.0 2) add recv msg 3) add anti revoke msg tip 4…
Browse files Browse the repository at this point in the history
…) add C#
  • Loading branch information
anhkgg committed Mar 8, 2019
1 parent 954f5b9 commit 55ef4a3
Show file tree
Hide file tree
Showing 87 changed files with 2,669 additions and 827 deletions.
26 changes: 19 additions & 7 deletions docs/sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,32 @@

`WeChatSDK.dll`内部通过`RPC`通信和注入到微信进程的`WeChatSDKCore.dll`进行功能调用,支持多开微信功能的调用,微信间互不影响。

在新版本(`1.3.0`)中,`WeChatRs``WeChatRc`是虚拟模块,代码何如到`WeChatSDKCore``WeChatSDK`中,并且实现了RPC双向通信,用于支持`WeChatSDK`设置回调。

This comment has been minimized.

Copy link
@zhangnew

zhangnew Mar 8, 2019

代码<合入>到WeChatSDKCoreWeChatSDK


## 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示例,普通用户多开工具
```

编译顺序(vs2017 x86):

```
WeChatRs -> WeChatRc -> WeChatSDK -> WeChatSDKCore
WeChatSDKCore -> WeChatSDK
```

## WeChatSDK接口
Expand All @@ -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表示成功。
Expand All @@ -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(); //暂不支持
Expand All @@ -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

Expand Down
56 changes: 54 additions & 2 deletions docs/sdkmore.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

## Python

发布`Python`版本的接口,具体使用见`src/WeChatSDKPy/sdk.py`
发布`Python`版本的接口,具体使用见`sdk/WeChatSDK.py`

```
//需管理员运行python
Expand All @@ -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`相关文章。

Expand Down Expand Up @@ -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;
}
}
}
```
6 changes: 6 additions & 0 deletions docs/update.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
9 changes: 7 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -35,6 +36,10 @@

欢迎PR或提供意见建议。

**感谢**

1. [https://github.com/martona/mhook](https://github.com/martona/mhook)

### 声明

**<label style="color:red">本项目仅供技术研究,请勿用于任何商业用途,请勿用于非法用途,如有任何人凭此做何非法事情,均于作者无关,特此声明。</label>**
Expand Down
3 changes: 3 additions & 0 deletions sdk/SuperWeChat(语音备份).bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@echo off

SuperWeChat.exe c:\wxmsg
Binary file modified sdk/SuperWeChat.exe
Binary file not shown.
Binary file modified sdk/SuperWeChat.zip
Binary file not shown.
File renamed without changes.
57 changes: 57 additions & 0 deletions sdk/TestSDK.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
Binary file removed sdk/WeChatRc.dll
Binary file not shown.
Binary file removed sdk/WeChatRs.dll
Binary file not shown.
56 changes: 56 additions & 0 deletions sdk/WeChatSDK.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
Binary file modified sdk/WeChatSDK.dll
Binary file not shown.
File renamed without changes.
File renamed without changes.
Binary file modified sdk/WeChatSDKCore.dll
Binary file not shown.
10 changes: 10 additions & 0 deletions sdk/sdk.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
4 changes: 0 additions & 4 deletions src/WeChatRc/WeCharRc.def

This file was deleted.

Binary file removed src/WeChatRc/WeChatRc.aps
Binary file not shown.
Binary file removed src/WeChatRc/WeChatRc.rc
Binary file not shown.
Loading

0 comments on commit 55ef4a3

Please sign in to comment.