比如说你想要获得本机目前登录的微信的微信号应该怎么做?相信看过我之前博客文章的同学肯定想说,这还不简单?先获取当前系统中的微信进程,然后再计算内存中的模块基址,然后就能拿到了!
但是这么做似乎有点太麻烦了,且如果后续微信版本更新,模块基址有了变化,就又需要去重新计算。那有没有一劳永逸的方法呢?当然有!通过我的摸索,发现了一个新的思路,那就是根据文件进行判断。
微信默认的文件储存目录在:C:\Users\Administrator\Documents\WeChat Files
。
可以说你只要自己不去改动,那你微信的所有缓存文件就都在这里啦。找到这个目录,可以发现里面有wxid_
开头的文件夹,你登录几个微信,就有几个wxid_
。这个wxid_
开头的文件夹名称,就是你微信的wxId。它就是微信的独有序列号,类似于你的身份证,每个微信的wxId都是唯一的。
那么怎么确认哪个wxId是你现在登录的微信呢?其实也很简单,我们打开这些wxid_
开头的文件夹,会发现里面都有一个Msg文件夹。再查看Msg文件夹下面的文件,这时候我们退出微信,然后再登录微信,刷新一下文件夹。会发现里面有很多.db-shm
结尾的文件。也就是说微信登录的时候会初始化这些文件,会和这些数据库做交互。
此时,.db-shm
结尾的文件的修改时间,就是你微信的登录时间。我们只要遍历文件夹下最新的修改直接即可。
然后对比每一个wxid_
开头的文件夹下面的Msg文件夹下面的.db-shm
结尾的文件的修改时间,取最新的那个时间,其对应的文件夹名称就是你目前登录微信的wxId。
怎么样?这么解释是不是就很简单?后面就是具体的代码实现了,随便你用什么语言去编写。那么为了方便,我直接用bat写了个脚本。有的时候微信长时间不退出,可能也会有各种原因影响判断,所以我加了个10分钟的时间限制。为了更精准的获取,登录超过10分钟,就让使用者退出重新登录一下。
代码就放在下面了:
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
echo -------------------------------
echo Tools By ChaiZhou Studio.
echo e-mail:zhangfeng@chaizhou.com
echo -------------------------------
set "wechat_dir=C:\Users\Administrator\Documents\WeChat Files"
set "latest_wxid="
set "latest_time=0"
for /d %%i in ("%wechat_dir%\wxid_*") do (
if exist "%%i\Msg" (
for %%f in ("%%i\Msg\*.db-shm") do (
rem 获取文件的修改时间,格式为 YYYYMMDDHHMM
for /f "tokens=1-6 delims=/: " %%a in ("%%~tf") do (
set "file_time=%%a%%b%%c%%d%%e%%f" rem 包含分钟
if !file_time! GTR !latest_time! (
set "latest_time=!file_time!"
set "latest_wxid=%%~nxi"
)
)
)
)
)
if defined latest_wxid (
rem 格式化最新时间为 YYYY-MM-DD HH:MM
set "year=!latest_time:~0,4!"
set "month=!latest_time:~4,2!"
set "day=!latest_time:~6,2!"
set "hour=!latest_time:~8,2!"
set "minute=!latest_time:~10,2!"
rem 获取当前时间并格式化为 YYYYMMDDHHMM
for /f "delims=" %%a in ('powershell -command "Get-Date -Format 'yyyyMMddHHmm'"') do set "current_time=%%a"
rem 计算时间差,单位为分钟
call :time_to_minutes !latest_time! latest_minutes
call :time_to_minutes !current_time! current_minutes
set /a "time_diff=current_minutes-latest_minutes"
if !time_diff! LEQ 10 (
echo 登录 wxId 是:!latest_wxid!
echo 登录时间为:!year!-!month!-!day! !hour!:!minute!
) else (
echo 登录过期,请尝试重新登录微信.
)
) else (
echo 未找到登录记录,请尝试重新登录微信.
)
rem 使用 set /p 命令替换 pause,显示自定义提示
set /p exitkey="Enter 键退出!"
endlocal
exit /b
:time_to_minutes
setlocal
set "datetime=%~1"
set /a "year=1!datetime:~0,4! - 1970"
set /a "month=1!datetime:~4,2! - 1"
set /a "day=1!datetime:~6,2!"
set /a "hour=1!datetime:~8,2!"
set /a "minute=1!datetime:~10,2!"
set /a "total_minutes=year*525600 + month*43800 + day*1440 + hour*60 + minute"
endlocal & set "%~2=%total_minutes%"
exit /b
原创文章,转载请注明来源。