企业微信转发的上限正常是9个

但通过手动卡bug可以突破9个

同样的办法在个人微信上就不行
好奇背后的原因,分析了一下
个人微信和企业微信的界面都是Duilib
Duilib是基于消息做响应
鼠标的消息:
1 2 3 4 | #define WM_LBUTTONDOWN 0x0201 // 鼠标左键按下#define WM_LBUTTONUP 0x0202 // 鼠标左键抬起#define WM_RBUTTONDOWN 0x0204 // 鼠标右键按下#define WM_RBUTTONUP 0x0205 // 鼠标右键抬起 |
Duilib的响应:
1 2 3 4 5 6 7 8 9 10 11 12 13 | case WM_LBUTTONDOWN: CControlUI* pControl = FindControl(pt); m_pEventClick = pControl; event.Type = UIEVENT_BUTTONDOWN;case WM_LBUTTONUP: if( m_pEventClick == NULL ) break; event.Type = UIEVENT_BUTTONUP; m_pEventClick = NULL;case WM_RBUTTONDOWN: m_pEventClick = pControl; event.Type = UIEVENT_RBUTTONDOWN; |
四个鼠标消息中
原生的Duilib没有响应WM_RBUTTONUP // 鼠标右键抬起
个人微信的Duilib也没有响应WM_RBUTTONUP
但企业微信的Duilib有响应WM_RBUTTONUP
1 2 3 4 | // if (uMsg == WM_RBUTTONUP)v115 = uMsg - 0x205;if ( !v115 ) m_pEventClick = NULL; |
这就埋下了一个bug
正常点击复选框,会发出事件:UIEVENT_BUTTONUP
1 2 3 4 5 6 7 8 9 10 | 1、鼠标左键按下case WM_LBUTTONDOWN: CControlUI* pControl = FindControl(pt); m_pEventClick = pControl; // m_pEventClick赋值2、鼠标左键抬起case WM_LBUTTONUP: if( m_pEventClick == NULL ) break; // m_pEventClick有值,不跳过 event.Type = UIEVENT_BUTTONUP; // 发出事件:UIEVENT_BUTTONUP m_pEventClick = NULL; // m_pEventClick置空 |
特殊点击复选框,发不出事件:UIEVENT_BUTTONUP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 1、鼠标左键按下case WM_LBUTTONDOWN: CControlUI* pControl = FindControl(pt); m_pEventClick = pControl; // m_pEventClick赋值2、鼠标右键按下case WM_RBUTTONDOWN: CControlUI* pControl = FindControl(pt); m_pEventClick = pControl; // m_pEventClick赋值3、鼠标右键抬起case WM_RBUTTONUP: m_pEventClick = NULL; // m_pEventClick置空4、鼠标左抬起if( m_pEventClick == NULL ) break; // m_pEventClick为空,跳过 //没有发出事件:UIEVENT_BUTTONUP |
复选框卡在按下未抬起的状态
左边已经选择,但右边没有选择

再单击一下复选框,就卡出bug
左边没有选择,但右边已经选择

新版本漏洞修补情况
上面说的方法已经失效
用另外一种特殊操作
选择还是可以超过9个
但发送提示不能超过9个
