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_GET_CONTACT_INFO = 0x55;
|
||||
FUNC_REVOKE_MSG = 0x56;
|
||||
FUNC_REFRESH_QRCODE = 0x57;
|
||||
FUNC_DECRYPT_IMAGE = 0x60;
|
||||
FUNC_EXEC_OCR = 0x61;
|
||||
FUNC_ADD_ROOM_MEMBERS = 0x70;
|
||||
|
@ -409,10 +409,17 @@ OcrResult_t GetOcrResult(string path)
|
||||
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 refreshLoginQrcodeCall2 = g_WeChatWinDllAddr + g_WxCalls.rlq.call2;
|
||||
DWORD loginUrlAddr = g_WeChatWinDllAddr + g_WxCalls.rlq.url;
|
||||
|
||||
// 刷新二维码
|
||||
__asm {
|
||||
pushad;
|
||||
pushfd;
|
||||
@ -422,16 +429,8 @@ void RefreshLoginQrcode() {
|
||||
popfd;
|
||||
popad;
|
||||
}
|
||||
}
|
||||
|
||||
string GetLoginUrl() {
|
||||
// 判断是否登录, 已登录直接返回空字符
|
||||
int isLogin = (int)GET_DWORD(g_WeChatWinDllAddr + g_WxCalls.login);
|
||||
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;
|
||||
// 获取二维码链接
|
||||
string url = "http://weixin.qq.com/x/" + string(reinterpret_cast<char *>(*(DWORD *)loginUrlAddr));
|
||||
return url;
|
||||
}
|
||||
|
@ -9,3 +9,4 @@ int RefreshPyq(uint64_t id);
|
||||
int DownloadAttach(uint64_t id, std::string thumb, std::string extra);
|
||||
int RevokeMsg(uint64_t id);
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
case Functions_FUNC_REFRESH_QRCODE: {
|
||||
ret = func_refresh_qrcode(out, out_len);
|
||||
break;
|
||||
}
|
||||
case Functions_FUNC_DECRYPT_IMAGE: {
|
||||
ret = func_decrypt_image(req.msg.dec, out, out_len);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user