读取群成员列表时,如果获取群成员数量呢?可以根据获取的群列表再进行统计数量,但这种方法显然效率低下,不是最好的办法。在获取群成员列表的CALL后返回EAX。其中EAX+0xB0就是群成员的数量,我们获取这个值直接返回给调用程序即可。
/**************************************************
@函数名称:ShowChatRoomUserCount
@函数说明:显示群数量
@作 者:kantlee
@时 间:2020-04-09
@参 数:wchar_t* chatroomwxid
@返 回 值:int
**************************************************/
int ShowChatRoomUserCount(wchar_t* chatroomwxid)
{
//1.先获取群成员的微信ID
struct wxStr
{
wchar_t * pStr;
int strLen;
int strMaxLen;
int fill = 0;
int fill2 = 0;
};
//准备缓冲区
DWORD dwWxidArr = 0; //保存微信ID数据的地址
char buff[0x164] = { 0 };
char userListBuff[0x174] = { 0 };
//构造数据
wxStr pWxid = { 0 };
pWxid.pStr = chatroomwxid;
pWxid.strLen = wcslen(chatroomwxid);
pWxid.strMaxLen = wcslen(chatroomwxid) * 2;
char * asmWxid = (char *)&pWxid.pStr;
//调用call
DWORD dwCall1 = (DWORD)GetModuleHandle(L"WeChatWin.dll") + WxGetRoomUserWxidCall1;
DWORD dwCall2 = (DWORD)GetModuleHandle(L"WeChatWin.dll") + WxGetRoomUserWxidCall2;
DWORD dwCall3 = (DWORD)GetModuleHandle(L"WeChatWin.dll") + WxGetRoomUserWxidCall3;
DWORD dwCall4 = (DWORD)GetModuleHandle(L"WeChatWin.dll") + WxGetRoomUserWxidCall4;
//获取群成员
__asm {
lea ecx, buff[16]
call dwCall1
lea eax, buff[16]
push eax
mov ebx, asmWxid
push ebx
call dwCall2
mov ecx, eax
call dwCall3
lea eax, buff
push eax
lea ecx, buff[16]
call dwCall4
mov dwWxidArr, eax
}
DWORD testTmp = dwWxidArr + 0xB0;
int Len = *((int *)testTmp);
return Len;
}
控制端通过SendMessage来调用 获取数量。