Wework内存接口New


【SDK调用文档】

<pre><code>/* 企业微信连接回调函数 */ @clientID: 企业微信客户端唯一ID,通过这个ID区分不同的客户端 typedef void (__stdcall *WXCmdConnectCallback) (unsigned int clientID); /* 企业微信数据回调函数 */ @clientID: 企业微信客户端唯一ID @jsonData: 企业微信返回的 Json数据 @dataSize: 企业微信返回的 Json数据长度 typedef void (__stdcall *WXCmdReceiveCallback) (unsigned int clientID, const char *jsonData, size_t dataSize); /* 企业微信退出回调函数 */ @clientID:企业微信客户端唯一ID typedef void (__stdcall *WXCmdQuitCallback) (unsigned int clientID); /* 1.初始化Socket接口,只需要执行一次 */ @WXCmdConnectCallback: 企业微信连接回调函数指针 @WXCmdReceiveCallback: 企业微信数据回调函数指针 @WXCmdQuitCallback: 企业微信退出回调函数指针 WXCmdError __stdcall WXCmdInitSocket(WXCmdConnectCallback, WXCmdReceiveCallback, WXCmdQuitCallback); /* 2.1 初始化企微客户端安装路径,只需要执行一次。可以不使用此函数,此时会使用企微默认安装路径 */ @weworkInstallPath: 企微客户端在磁盘上的完整路径, 可以传空字符串 WXCmdError __stdcall WXCmdInitWeworkInstallPath(const char *weworkInstallPath); /* 2.2 初始化注入端Dll接口,只需要执行一次 */ @dllPath: 注入端dll在磁盘上的完整路径,必传 WXCmdError __stdcall WXCmdInitDllPath(const char *dllPath); /* 3.运行控制端服务,只需要执行一次 */ WXCmdError __stdcall WXCmdRun(); /* 4 打开一个企业微信客户端,可以多次调用,每调用一次就能打开一个客户端。 接受一个参数paramlist,需要按照格式传入参数, 包括[设置登录ID]、[是否关闭子进程节约内存资源]、[是否携带一个客户参数用于扫码和登录成功时返回] */ @paramlist: 格式为: key1=value1&amp;amp;key2=value2&amp;amp;key3=value3 ,可以设置一个或多个参数 其中key可以取以下几个值: 1. appid 授权验证appid,必须设置该值; 2. sdkkey 授权验证sdkkey, 必须设置该值; 3. login_user_id 设置登录ID,此时该接口相当于4.2; 例如 login_user_id=1688801548589452 4. customer_param 设置客户参数, 在扫码和登录成功、以及获取自己信息时,会原样返回这个参数; 5. close_sub_process 设置关闭子进程, 例如 close_sub_process=1。关闭子进程可以节约很多内存资源,但是此时无法使用企微自带的web服务,包括微盘、内部小程序应用的使用; 如果要同时设置多个参数使用&amp;amp;连接这几个参数 WXCmdError __stdcall WXCmdOpenWechatWithParam(const char* paramlist); @示例: WXCmdOpenWechatWithParam(&amp;quot;close_sub_process=0&amp;amp;customer_param=hhhhh&amp;amp;login_user_id=1688850383085170&amp;amp;appid=a8427d96387b2b42e1d8a54a19be81c4&amp;amp;sdkkey=78c2c900-2ebe-d9e6-ec6b-fc4ea1b220ca&amp;quot;); /* 5.注入已经打开的企业微信进程。尽量用4这个接口 */ @wechatPid: 企业微信进程Pid WXCmdError __stdcall WXCmdInjectWechatProcess(unsigned int wechatPid); /* 6.给某个企业微信客户端发送数据 */ @clientID: 企业微信客户端ID @jsonData: jsonData数据 WXCmdError __stdcall WXCmdSend(unsigned int clientID, const char *jsonData); /* 7.程序退出时调用此接口 */ WXCmdError __stdcall WXCmdStop();</code></pre> <p><strong>Python调用Demo</strong></p> <pre><code>#-*- coding: utf-8 -*- # 企业微信基础操作 # ERIC SUN 2020-9-24 from ctypes import * import os,json,time C_ID = 0 wxloaderInstance = 0 def c_string(data): return c_char_p(data.encode(&amp;#039;utf-8&amp;#039;)) # 回调函数 @WINFUNCTYPE(None,c_ulong) def connect_callback(client_id): print(u&amp;#039;新的客户端连接: &amp;#039;) global C_ID C_ID = client_id print(client_id) @WINFUNCTYPE(None, c_ulong, c_char_p, c_ulong) def recv_callback(client_id, data, length): jsonData = json.loads(data); if jsonData[&amp;#039;type&amp;#039;] == 500: return print(&amp;#039;[on_recv] client_id: {0}, message:{1}&amp;#039;.format(client_id, json.loads(data))) if jsonData[&amp;#039;type&amp;#039;] == 15001: jd = {} wxloaderInstance.sendMessage(C_ID, 2000, jd) @WINFUNCTYPE(None, c_ulong) def close_callback(client_id): C_ID = 0 print(u&amp;#039;已断开&amp;#039;) print(client_id) class WeCom: # 加载器 WXLOADER = None dll_path = &amp;#039;&amp;#039; def __init__(self, dll_path): self.dll_path = dll_path # 控制库地址 loader_path = os.path.join(self.dll_path, &amp;#039;WXCommand_wxwork.dll&amp;#039;) loader_path = os.path.realpath(loader_path) # 注入库地址 inject_path = os.path.join(self.dll_path, &amp;#039;VXWorkElf_v3.1.1.3002_release.dll&amp;#039;) inject_path = os.path.realpath(inject_path) self.WXLOADER = WinDLL(loader_path) self.WXLOADER.WXCmdInitDllPath(c_string(inject_path)) out = create_string_buffer(20) self.WXLOADER.WXCmdGetLocalWechatVersion(out, 20) print(u&amp;#039;版本号:&amp;#039; + out.value.decode(&amp;#039;utf-8&amp;#039;)) # 初始化socket连接 self.WXLOADER.WXCmdInitSocket(connect_callback, recv_callback, close_callback) # 运行 self.WXLOADER.WXCmdRun() # self.WXLOADER.WXCmdStop() # 打开一个企业微信,此时会自动注入 VXWorkElf_v3.1.1.3002_release.dll 到企业微信 def openWechatClient(self): print(u&amp;#039;open wechat:&amp;#039;) self.WXLOADER.WXCmdOpenWechat() # 发送消息 def sendMessage(self, client_id, message_type, params): print(u&amp;#039;send message:&amp;#039;) send_data = {&amp;#039;type&amp;#039;: message_type, &amp;#039;data&amp;#039;: params} return self.WXLOADER.WXCmdSend(client_id, c_string(json.dumps(send_data, ensure_ascii=False))) #return self.WXLOADER.WXCmdSend(client_id, c_string(json.dumps(send_data))) #return self.WXLOADER.WXCmdSend(client_id, json.dumps(send_data, ensure_ascii=False, encoding=&amp;#039;utf-8&amp;#039;)) if __name__ == &amp;quot;__main__&amp;quot;: wxloaderInstance = WeCom(&amp;#039;F:\\逆向\\Dll测试_成品\\vxwork_3.1.1.3002_release\\Dll&amp;#039;) print(&amp;#039;命令:\n&amp;#039; &amp;#039;1: 打开企业微信\n&amp;#039; &amp;#039;2000: 获取自己的信息\n&amp;#039; &amp;#039;2001: 获取好友的信息\n&amp;#039; &amp;#039;2500: 获取内部联系人列表\n&amp;#039; &amp;#039;2501: 获取外部联系人列表\n&amp;#039; &amp;#039;2502: 获取群聊列表\n&amp;#039; &amp;#039;3000: 搜索手机号好友\n&amp;#039; &amp;#039;5000: 发送文本消息(utf-8)\n&amp;#039; &amp;#039;5003: 发送图片消息\n&amp;#039; &amp;#039;5008: 发送小程序\n&amp;#039; ) while True: str = input(&amp;quot;请输入命令:&amp;quot;) if str == &amp;#039;&amp;#039;: continue cmd = int(str) data = {} if cmd == 1: wxloaderInstance.openWechatClient() continue elif cmd == 2503: roomID = input(&amp;#039;请输入群聊ID:&amp;#039;) data = { &amp;#039;room_chat_id&amp;#039;: roomID } elif cmd == 3000: mobile = input(&amp;#039;请输入手机号:&amp;#039;) data = { &amp;#039;mobile&amp;#039;: mobile } elif cmd == 5000: chatID = input(&amp;#039;请输入会话ID: &amp;#039;) content = input(&amp;#039;请输入文本内容: &amp;#039;) data = { &amp;#039;conversation_id&amp;#039;: chatID, &amp;#039;content&amp;#039;: content } elif cmd == 5001: content = input(&amp;#039;请输入文本内容: &amp;#039;) data = { &amp;#039;conversation_id&amp;#039;: &amp;quot;R:10696051717463132&amp;quot;, &amp;#039;content&amp;#039;: [ { &amp;#039;subtype&amp;#039;: 1, &amp;#039;text&amp;#039;: &amp;#039;7881301953921102&amp;#039; }, { &amp;#039;subtype&amp;#039;: 0, &amp;#039;text&amp;#039;: &amp;#039;精灵&amp;#039; } ] } elif cmd == 5003: chatID = input(&amp;#039;请输入会话ID: &amp;#039;) path = input(&amp;#039;请输入图片路径: &amp;#039;) data = { &amp;#039;conversation_id&amp;#039;: chatID, &amp;#039;path&amp;#039;: path } elif cmd == 5008: chatID = input(&amp;#039;请输入会话ID: &amp;#039;) username = input(&amp;#039;请输入小程序username(以@app结尾的字符串): &amp;#039;) appid = input(&amp;#039;请输入appid(以wx开头的字符串): &amp;#039;) pagepath = input(&amp;#039;请输入pagepath: &amp;#039;) title = input(&amp;#039;请输入标题: &amp;#039;) des = input(&amp;#039;请输入描述: &amp;#039;) thumburl = input(&amp;#039;请输入图标(网络图片url): &amp;#039;) icon = input(&amp;#039;请输入小程序展示图路径(本地图片): &amp;#039;) data = { &amp;#039;conversation_id&amp;#039;: chatID, &amp;#039;username&amp;#039;: username, &amp;#039;appid&amp;#039;: appid, &amp;#039;pagepath&amp;#039;: pagepath, &amp;#039;title&amp;#039;: title, &amp;#039;des&amp;#039;: des, &amp;#039;thumburl&amp;#039;: thumburl, &amp;#039;icon&amp;#039;: icon, &amp;#039;displaytype&amp;#039;: 2 } wxloaderInstance.sendMessage(C_ID, cmd, data)</code></pre>

页面列表

ITEM_HTML