Impl refresh login qrcode. Close #113.
This commit is contained in:
parent
a70582372a
commit
31c2058db1
@ -30,6 +30,7 @@ enum Functions {
|
|||||||
FUNC_DOWNLOAD_ATTACH = 0x54;
|
FUNC_DOWNLOAD_ATTACH = 0x54;
|
||||||
FUNC_GET_CONTACT_INFO = 0x55;
|
FUNC_GET_CONTACT_INFO = 0x55;
|
||||||
FUNC_REVOKE_MSG = 0x56;
|
FUNC_REVOKE_MSG = 0x56;
|
||||||
|
FUNC_REFRESH_QRCODE = 0x57;
|
||||||
FUNC_DECRYPT_IMAGE = 0x60;
|
FUNC_DECRYPT_IMAGE = 0x60;
|
||||||
FUNC_EXEC_OCR = 0x61;
|
FUNC_EXEC_OCR = 0x61;
|
||||||
FUNC_ADD_ROOM_MEMBERS = 0x70;
|
FUNC_ADD_ROOM_MEMBERS = 0x70;
|
||||||
|
@ -409,10 +409,17 @@ OcrResult_t GetOcrResult(string path)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RefreshLoginQrcode() {
|
string GetLoginUrl()
|
||||||
|
{
|
||||||
|
if (GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login) == 1) {
|
||||||
|
return ""; // 已登录直接返回空字符
|
||||||
|
}
|
||||||
|
|
||||||
DWORD refreshLoginQrcodeCall1 = g_WeChatWinDllAddr + g_WxCalls.rlq.call1;
|
DWORD refreshLoginQrcodeCall1 = g_WeChatWinDllAddr + g_WxCalls.rlq.call1;
|
||||||
DWORD refreshLoginQrcodeCall2 = g_WeChatWinDllAddr + g_WxCalls.rlq.call2;
|
DWORD refreshLoginQrcodeCall2 = g_WeChatWinDllAddr + g_WxCalls.rlq.call2;
|
||||||
|
DWORD loginUrlAddr = g_WeChatWinDllAddr + g_WxCalls.rlq.url;
|
||||||
|
|
||||||
|
// 刷新二维码
|
||||||
__asm {
|
__asm {
|
||||||
pushad;
|
pushad;
|
||||||
pushfd;
|
pushfd;
|
||||||
@ -422,16 +429,8 @@ void RefreshLoginQrcode() {
|
|||||||
popfd;
|
popfd;
|
||||||
popad;
|
popad;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
string GetLoginUrl() {
|
// 获取二维码链接
|
||||||
// 判断是否登录, 已登录直接返回空字符
|
string url = "http://weixin.qq.com/x/" + string(reinterpret_cast<char *>(*(DWORD *)loginUrlAddr));
|
||||||
int isLogin = (int)GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login);
|
return url;
|
||||||
if (isLogin) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD loginUrlAddr = g_WeChatWinDllAddr + g_WxCalls.rlq.url;
|
|
||||||
string qrcodeLoginUrl = "http://weixin.qq.com/x/" + string(reinterpret_cast<char*>(*(DWORD*)loginUrlAddr));
|
|
||||||
return qrcodeLoginUrl;
|
|
||||||
}
|
}
|
||||||
|
@ -9,3 +9,4 @@ int RefreshPyq(uint64_t id);
|
|||||||
int DownloadAttach(uint64_t id, std::string thumb, std::string extra);
|
int DownloadAttach(uint64_t id, std::string thumb, std::string extra);
|
||||||
int RevokeMsg(uint64_t id);
|
int RevokeMsg(uint64_t id);
|
||||||
OcrResult_t GetOcrResult(std::string path);
|
OcrResult_t GetOcrResult(std::string path);
|
||||||
|
string GetLoginUrl();
|
||||||
|
@ -689,6 +689,24 @@ bool func_revoke_msg(uint64_t id, uint8_t *out, size_t *len)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool func_refresh_qrcode(uint8_t *out, size_t *len)
|
||||||
|
{
|
||||||
|
Response rsp = Response_init_default;
|
||||||
|
rsp.func = Functions_FUNC_REFRESH_QRCODE;
|
||||||
|
rsp.which_msg = Response_str_tag;
|
||||||
|
|
||||||
|
rsp.msg.str = (char *)GetLoginUrl().c_str();
|
||||||
|
|
||||||
|
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
|
||||||
|
if (!pb_encode(&stream, Response_fields, &rsp)) {
|
||||||
|
LOG_ERROR("Encoding failed: {}", PB_GET_ERROR(&stream));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*len = stream.bytes_written;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool func_decrypt_image(DecPath dec, uint8_t *out, size_t *len)
|
bool func_decrypt_image(DecPath dec, uint8_t *out, size_t *len)
|
||||||
{
|
{
|
||||||
Response rsp = Response_init_default;
|
Response rsp = Response_init_default;
|
||||||
@ -926,6 +944,10 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len
|
|||||||
ret = func_revoke_msg(req.msg.ui64, out, out_len);
|
ret = func_revoke_msg(req.msg.ui64, out, out_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case Functions_FUNC_REFRESH_QRCODE: {
|
||||||
|
ret = func_refresh_qrcode(out, out_len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Functions_FUNC_DECRYPT_IMAGE: {
|
case Functions_FUNC_DECRYPT_IMAGE: {
|
||||||
ret = func_decrypt_image(req.msg.dec, out, out_len);
|
ret = func_decrypt_image(req.msg.dec, out, out_len);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user