From 7c63ae904a36eadc19cfda7b5f0fa70fb8994efb Mon Sep 17 00:00:00 2001 From: Changhua Date: Mon, 17 Feb 2025 21:59:59 +0800 Subject: [PATCH] feat(account): cache self wxid --- WeChatFerry/spy/account_manager.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/WeChatFerry/spy/account_manager.cpp b/WeChatFerry/spy/account_manager.cpp index c0d3dc0..de4a6f6 100644 --- a/WeChatFerry/spy/account_manager.cpp +++ b/WeChatFerry/spy/account_manager.cpp @@ -17,6 +17,12 @@ namespace OsAcc = Offsets::Account; using get_account_service_t = QWORD (*)(); using get_current_data_path_t = QWORD (*)(QWORD); +// 缓存 wxid 避免重复查询 +static std::optional cachedWxid; + +// 清除缓存的 wxid +static void clear_cached_wxid() { cachedWxid.reset(); } + static uint64_t get_account_service() { static auto GetService = reinterpret_cast(g_WeChatWinDllAddr + OsAcc::SERVICE); @@ -31,16 +37,21 @@ static std::string get_string_value(uint64_t base_addr, uint64_t offset) bool is_logged_in() { + clear_cached_wxid(); uint64_t service_addr = get_account_service(); return service_addr && util::get_qword(service_addr + OsAcc::LOGIN) != 0; } std::string get_self_wxid() { + if (cachedWxid) { + return *cachedWxid; + } uint64_t service_addr = get_account_service(); if (!service_addr) return ""; - return get_string_value(service_addr, OsAcc::WXID); + cachedWxid = get_string_value(service_addr, OsAcc::WXID); + return *cachedWxid; } UserInfo_t get_user_info()