批处理之家's Archiver

Batcher 发表于 2009-4-16 22:11

批处理获取QQ路径、自动登录QQ小结及讨论(20160105)

[color=Red]自动获取QQ路径的几种方法:读注册表、全盘搜索、获取进程信息等:[/color][code]@echo off
REM 使用ftype获取QQ路径
for /f "tokens=1* delims==" %%a in ('ftype Tencent') do (
    set FilePath=%%~dpbQQ.exe
)
echo %FilePath%
pause[/code][code]@echo off
REM 使用WMIC获取进程信息中的QQ路径(要求QQ处于运行状态)
for /f "tokens=2 delims==" %%a in ('wmic process where "name='qq.exe'" get executablepath /value') do (
    set FilePath=%%a
)
echo %FilePath%
pause[/code][code]@echo off
REM 使用WMIC全盘搜索获取QQ路径
for /f "skip=1 delims=" %%a in ('wmic datafile where "filename='qq' and extension='exe'" get name') do (
    set FilePath=%%a
)
echo %FilePath%
pause[/code][code]@echo off
REM 使用reg query命令读注册表获取QQ路径
for /f "tokens=2*" %%a in ('reg query HKEY_LOCAL_MACHINE\Software\Tencent\QQ /v Install^|findstr "Install"') do (
    set FilePath=%%b
)
echo %FilePath%
pause[/code][code]@echo off
REM 使用reg export命令到处注册表项再搜索获取QQ路径以避免reg query可能存在的吃中文字符的问题
reg export "HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ" "%temp%\qq.txt">nul
for /f "tokens=2 delims==" %%a in ('type "%temp%\qq.txt"^|findstr /i "Install"') do (
    REM 可以用 %%~fa 直接把字符串中的\\变成\
    set FilePath=%%~a
)
set FilePath=%FilePath:\\=\%
echo %FilePath%
pause[/code][code]@echo off
REM 调用VBS读注册表获取QQ路径
>"%temp%\my.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\my.vbs" echo WScript.Echo WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ\Install")
for /f "delims=" %%a in ('cscript /nologo "%temp%\my.vbs"') do (
    set FilePath=%%a
)
echo %FilePath%
pause[/code][code]@echo off
REM 全盘搜索获取QQ路径
set fName=qq.exe
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    if exist %%a:\nul (
        pushd %%a:\
        for /r %%b in (%fName%?) do (
            if /i "%%~nxb" equ "%fName%" (
                set FilePath=%%b
                goto :show
            )
        )
        popd
    )
)
:show
echo %FilePath%
pause[/code][color=Red]从2009开始QQ不再支持命令行方式登录,请尝试发送按键的方式。[/color]

VBS发送按键自动登录QQ
[url]http://bbs.bathome.net/thread-7893-1-1.html[/url]

AutoIt版QQ登录器
[url]http://bbs.bathome.net/thread-2789-1-1.html[/url]

===================================================================================

原理及使用方法:[code]start "" "C:\Program Files\Tencent\QQ\qq.exe" /start QQUIN:843875648 PWDHASH:4Z1c1a8DeNoF9j+JHHRnrw== /stat:40[/code][quote]10:上线登陆
40:隐身登陆
41:上线登陆
QQUIN和PWDHASH必须使用大写字母

原理:QQ在传输密码的时候,先做一次MD5加密,再做一次BASE64变换,这样可以得到正常的文本信息以便网络传输。找一个MD5在线查询的网站(比如[url]http://www.xmd5.org/[/url]),输入QQ密码的明文,转换得到MD5加密的结果,再找一个BASE64在线查询的网站(比如[url]http://www.waishi.net/ip/tools/base64.htm[/url]),输入刚才得到的MD5加密的结果,转换得到HASH编码即可。

使用VBS的SendKeys方法自动登录,因无法保证获取正确的交单,存在风险,因此不予考虑。[/quote]
经测试,目前无法用这个方法登陆最新的QQ2009正式版,可能是新版的QQ未开启这个命令行接口吧,只能继续期待以后的版本了。

Batcher 发表于 2009-4-16 22:30

[color=Blue]QQ密码转PwdHash[/color]
需要第三方命令行工具MD5.exe和Base64.exe
下载地址:[url]http://bbs.bathome.net/thread-3981-1-1.html[/url][code]@echo %dbg% off   &&   setlocal   &&   chcp 437|graftabl 936>nul   &&   set /p var=字符串:
for /f %%. in ('md5 -d%var%') do set "var=%%."

:toSplit
   if [%a%]==[32] (goto :toBase64) else (call call set "str=%str% %%var:~%a%,2%%" && set /a a+=2)
   goto :toSplit

:toBase64
   echo exit|%ComSpec%/kprompt e 100 %str% $_rcx$_10$_n tmp.tmp$_w$_q$_|debug>nul
   for /f %%. in ('type tmp.tmp^|base64') do ( set "base64=%%." )
   echo.&echo PwdHash码: %base64%   &&   del tmp.tmp >nul 2>nul[/code][color=Blue]批处理版Base64编码运算,直接将代码拷过来改下,测试成功。只用到MD5.exe[/color][code]@echo off
setlocal enabledelayedexpansion
set B64CODE=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
set/p str=请输入密码:
for /f %%i in ('md5 -d%str%') do set "strhex=%%i"

:encloop
if not defined strhex goto :encbreak
set chr1=0x!strhex:~0,2!
set chr2=0x!strhex:~2,2!
set chr3=0x!strhex:~4,2!
set strhex=%strhex:~6%
for %%i in (chr1 chr2 chr3) do if "!%%i!"=="0x" set %%i=0
set/a enc1=%chr1%">>"2
set/a enc2=((%chr1%"&"3)"<<"4)"|"(%chr2%">>"4)
set/a enc3=((%chr2%"&"15)"<<"2)"|"(%chr3%">>"6)
set/a enc4=%chr3%"&"63
if %chr3% equ 0 if %chr2% equ 0 (set enc4=64& set enc3=64) else (set enc4=64)
set encstr=!encstr!!B64CODE:~%enc1%,1!!B64CODE:~%enc2%,1!!B64CODE:~%enc3%,1!!B64CODE:~%enc4%,1!
goto :encloop
:encbreak
echo QQPwdHash:[%encstr%][/code]MD5.vbs本地下载:[attach]1161[/attach]

MD5.hta本地下载:[attach]1163[/attach]

PWDHASH.vbs本地下载:[url]http://www.bathome.net/viewthread.php?tid=1774#pid9805[/url]

PWDHASH.htm(javascript)本地下载:[attach]1164[/attach]

原文地址:
[url]http://www.cn-dos.net/forum/viewthread.php?tid=27000[/url]
[url]http://www.cn-dos.net/forum/viewthread.php?tid=36823[/url]
[url]http://www.cn-dos.net/forum/viewthread.php?tid=29795&page=2[/url]

Batcher 发表于 2009-4-16 22:30

批处理获取本机正在运行的QQ的号码
原文地址:[url]http://www.cn-dos.net/forum/viewthread.php?tid=44109&page=2#pid308613[/url][code]@echo off
setlocal enabledelayedexpansion
rem 请根据QQ实际路径进行修改或者自行添加自动获取QQ路径的功能模块
rem 自动获取QQ路径的几种方法:读注册表、全盘搜索、获取进程信息等
set QQPath=C:\Program Files\Tencent\QQ\
tasklist /nh /fi "imagename eq QQ.exe" 2>nul|findstr /i "QQ.exe">nul||goto :NoQQ
for /f %%a in ('dir /b /ad /o-d "%QQPath%"^|findstr "^[1-9][0-9]*$"') do (
  for /f "delims=" %%h in ('dir /s /b "%QQPath%%%a\qqstatcount.dat"') do (
    set LastModify=%%~th
    rem 如果某个在线的QQ长期不活动,可能无法获得其号码。
    if "!LastModify:~0,13!"=="!date:~0,10! !time:~0,2!" (
      echo 本机正在运行的QQ号:%%a [!LastModify!]
    )
  )
)
goto :end
:NoQQ
echo 本机没有QQ在运行
:end
pause[/code]批处理自动获取最快速的QQ服务器
原文地址:[url]http://www.cn-dos.net/forum/viewthread.php?tid=40395[/url][code]@echo off
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz.tencent.com') do echo %%c >"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz1.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz2.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz3.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz4.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz5.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz6.tencent.com') do echo %%c >>"QQlist.txt"
for /f "skip=3 tokens=1-3" %%a in ('ping -n 1 -l 1 sz7.tencent.com') do echo %%c >>"QQlist.txt"

set MinL=99
set MinT=9999ms
set Best=""
for /f "usebackq" %%a in ("QQlist.txt") do (
  call :time %%a
)
echo 最佳服务器:%Best%
echo 最佳服务器的响应时间:%MinT%
goto :eof

:time
for /f "skip=11 tokens=4 delims==" %%a in ('ping %1') do (
  if "%%a" equ "  0ms" (
    set /a Best=%1
  ) else (
    call :best %%a %1
  )
  goto :eof
)

:best
for /f "skip=1 delims=:" %%a in ('^(echo %1^&echo.^)^|findstr /o ".*"') do set nowlen=%%a
if "%nowlen%" lss "%MinL%" (
  set /a MinL=%nowlen%
  set MinT=%1
  set Best=%2
) else if "%nowlen%" equ "%MinL%" (
  if "%1" lss "%MinT%" (
    set MinT=%1
    set Best=%2
  )
)
goto :eof[/code][code]@echo off&setlocal enabledelayedexpansion
echo 请稍候......
for /f "delims=" %%a in ('more +16 "%~0"') do (
     set tx=%%a&set var=
     for /f "tokens=1-4 delims=[]=" %%i in ('ping %%a^|findstr /i "%%a Average"') do call:LP "%%j" "%%l")
     for /f "tokens=1,2 delims=-=0" %%i in ('set -') do echo 最快服务器:%%j IP地址:!%%j! 响应时间%%i&goto end
:end
pause&exit
:LP
if not defined var set var=%~1
   if not %2=="" (
   set str=%~2&set str=!str: =!
   set str=00000000!str!&set str=!str:~-10!
   set -!str!=%TX%&set %TX%=!var!
)
goto :eof
sz.tencent.com
sz1.tencent.com
sz2.tencent.com
sz3.tencent.com
sz4.tencent.com
sz5.tencent.com
sz6.tencent.com
sz7.tencent.com[/code]

Batcher 发表于 2009-4-16 22:31

本论坛批处理登录QQ相关讨论

多QQ自动登陆(PWDHASH)
[url]http://bbs.bathome.net/viewthread.php?tid=750[/url]

CMD批处理做Base64编码运算理论原型
[url]http://bbs.bathome.net/viewthread.php?tid=587[/url]

16进制数用base64编码批处理版
[url]http://bbs.bathome.net/viewthread.php?tid=3421[/url]

tireless 发表于 2009-4-16 22:44

· 可以用 %%~fa 把字符串中的“\\”变成“\”。

· if exist %%a:\[color=red]nul[/color],这个 nul 有什么作用?

· 我觉得用 for %%a in ([color=red]qq.exe?[/color]) do if /i "%%~nxa"=="qq.exe" 代替 [color=red]*.exe[/color] 好一点。

Batcher 发表于 2009-4-16 23:48

回复 5楼 的帖子

1、已更新到顶楼
2、跳过光驱盘符
3、已更新到顶楼

tireless 发表于 2009-4-17 09:54

[quote]原帖由 [i]Batcher[/i] 于 2009-4-16 23:48 发表 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=26851&ptid=4193][img]http://www.bathome.net/images/common/back.gif[/img][/url]
2、跳过光驱盘符[/quote]
我猜也是这个作用,但我这里测试并没有这个作用 ——
① 当光驱中没有光盘时,[b]盘符:[/b] 和 [b]盘符:\nul[/b] 都不存在。
② 当光驱中有光盘时,[b]盘符:[/b] 和 [b]盘符:\nul[/b] 都存在。

小勇12 发表于 2009-4-20 21:35

学习  学习!!!

l394700317 发表于 2009-5-13 23:19

学习了……好贴呀……

hawke_911 发表于 2009-5-17 23:20

都是大牛!!学习中......

laotou1000 发表于 2009-10-10 14:58

[code]@echo off&setlocal enabledelayedexpansion
echo 请稍候......
for /f "delims=" %%a in ('more +16 "%~0"') do (
     set tx=%%a&set var=
     for /f "tokens=1-4 delims=[]=" %%i in ('ping %%a^|findstr /i "%%a Average"') do call:LP "%%j" "%%l")
     for /f "tokens=1,2 delims=-=0" %%i in ('set -') do echo 最快服务器:%%j IP地址:!%%j! 响应时间%%i&goto end
:end
pause&exit
:LP
if not defined var set var=%~1
   if not %2=="" (
   set str=%~2&set str=!str: =!
   set str=00000000!str!&set str=!str:~-10!
   set -!str!=%TX%&set %TX%=!var!
)
goto :eof
sz.tencent.com
sz1.tencent.com
sz2.tencent.com
sz3.tencent.com
sz4.tencent.com
sz5.tencent.com
sz6.tencent.com
sz7.tencent.com[/code]谁能够帮我讲解一下[b]LP中的每行代码[/b]的意思?不懂这段的意思。

[b]如果我想要都显示所有服务器的ping响应值[/b],该如何修改???

dengx 发表于 2009-10-10 18:18

那天晚上测试了一晚都失败, 后来才知道, 原来2009是不支持的,

有人测试过2009其它版本吗,  2009以下的版本都支持吗,

Batcher 发表于 2009-10-10 18:37

回复 12楼 的帖子

我测试过官方2009的所有版本,都不支持。2009以下的版本太多了,很难一一测试,至少2007、2008是可以的。

supiti 发表于 2009-11-9 12:51

很高兴看到这个,虽然回复的时侯看到2009不能用  0 0

Hello123World 发表于 2011-2-3 13:57

能完善个2010qq登陆器吗

hbwazxf 发表于 2011-3-8 10:41

这样都行。。楼主太强大了。。

CNP840718519 发表于 2011-4-22 14:28

真是让我受益匪浅啊!

tangqingfu 发表于 2011-4-25 03:48

大牛!!学习中......

ygqiang 发表于 2011-11-22 15:54

qq2011版本,好像楼上的方法,都不支持自动登录了。

秋风·飞扬 发表于 2012-5-6 12:42

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=26841&ptid=4193]1#[/url] [i]Batcher[/i] [/b]


    有些电脑 wmic datafile where................搜索的到的结果是 name
                                                                                           path
                                                                                           <空>
                                                                                           <空>
最好用if not difined QQPath set QQPath=%%a
skip已经跳过了name 只取第一行就行了

434939575 发表于 2022-3-10 10:17

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=26844&ptid=4193]3#[/url] [i]Batcher[/i] [/b]


    大佬获取当前qq好像不行啊,能指导下不,菜鸟。 set QQPath=C:\Program Files""(x86)\Tencent\QQ\Bin\

Batcher 发表于 2022-3-10 14:22

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=252493&ptid=4193]21#[/url] [i]434939575[/i] [/b]


不知道你测试的哪个代码不行。

仅就你的这一行代码而言,很好奇你看的哪个教程,加引号的方式怪怪的。
我建议改成如下的格式:
set "QQPath=C:\Program Files (x86)\Tencent\QQ\Bin"

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.