标题: [求助]怎么用命令行得到当前正在运行的QQ号码
[打印本页]
作者: clian76
时间: 2008-11-2 15:35
标题: [求助]怎么用命令行得到当前正在运行的QQ号码
如题。也可以用VBS等,但最好不要用第三方程序。
转移自DOS疑难解答 & 问题讨论 (解答室)
明知故犯,加重处罚!
——管理员
谢谢10楼的代码!
[
Last edited by clian76 on 2008-11-5 at 19:42 ]
作者: HAT
时间: 2008-11-2 16:50
楼主用的是DOS版的QQ么?为何跑到DOS版块来求助?
作者: clian76
时间: 2008-11-2 17:02
哦,批处理室发了无人问津,才跑到这来,希望有人能想出办法.,
作者: yishanju
时间: 2008-11-2 23:05
判断QQ安装目录下,以QQ号命名的目录里的文件更新时间
[
Last edited by yishanju on 2008-11-5 at 09:01 ]
作者: tireless
时间: 2008-11-3 00:32
1. 查找 qq 是否正在运行 (tasklist),如果正在运行,继续下面的步骤。
2. 查找 qq 的路径 (reg query)。
3. 查找 qq 目录下的所有 qq 号文件夹。
4. 强行聊天。依次执行 start tencent://message/?uin=qq号。如果是和自己聊天,会出现个“不能和自己会话”的对话框,并且进程 Timwp.exe 不会退出,直到关闭那个对话框。
[
Last edited by tireless on 2008-12-4 at 19:46 ]
作者: clian76
时间: 2008-11-3 00:40
我把找出正在运行的QQ号,并且把这个QQ号输出TXT文件里
作者: clian76
时间: 2008-11-3 01:29
Quote: |
Originally posted by yishanju at 2008-11-2 11:05 PM:
判断QQ安装目录下,以QQ号命名的目录里的更新时间 |
|
用这种办法基本解决。
作者: clian76
时间: 2008-11-3 01:30
最近好像每天都在被扣分,。。。。
作者: HAT
时间: 2008-11-3 01:35
标题: Re 8楼
4楼的思路不错,方法也很容易实现。
如果你愿意把自己的代码贴出来跟大家分享,我给你加分^_^
[
Last edited by HAT on 2008-11-3 at 01:36 ]
作者: HAT
时间: 2008-11-5 02:55
@echo off
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 "^[0-9]*$"') do (
echo 本机正在运行的QQ中最后登陆的一个是:%%a
goto :end
)
:NoQQ
echo 本机没有QQ在运行
:end
pause
[
Last edited by HAT on 2008-11-5 at 10:22 ]
作者: tireless
时间: 2008-11-5 08:37
标题: Re 10 楼
测试不成功。貌似 qq 号文件夹的“修改时间”并不会更改(我的就是这样)。但是,qq 号文件夹里面的文件的“修改时间”会频繁更改。
作者: yishanju
时间: 2008-11-5 09:00
Quote: |
Originally posted by tireless at 2008-11-5 08:37:
测试不成功。貌似 qq 号文件夹的“修改时间”并不会更改(我的就是这样)。但是,qq 号文件夹里面的文件的“修改时间”会频繁更改。 |
|
我的本意说的就是检查以QQ号为名的文件夹下的文件的修改时间。
作者: yishanju
时间: 2008-11-5 09:05
判断QQ安装目录,我觉得读注册表不太可靠,应该读QQ进程路径好点
作者: HAT
时间: 2008-11-5 09:45
标题: Re 11楼
我的测试环境:WinXP SP3 + QQ2008正式版
测试通过
如果这个条件不可靠,我再试试判断其它文件。
作者: yishanju
时间: 2008-11-5 10:08
Quote: |
Originally posted by HAT at 2008-11-3 01:35:
4楼的思路不错,方法也很容易实现。
如果你愿意把自己的代码贴出来跟大家分享,我给你加分^_^
[ Last edited by HAT on 2008-11-3 at 01:36 ] |
|
^_^ 偶向来只会提供方法和思路,具体代码是不会有时间去写的
作者: yishanju
时间: 2008-11-5 10:21
开着QQ试了10楼代码
本机没有QQ在运行
作者: HAT
时间: 2008-11-5 10:22
标题: Re 15楼
11楼说你这个方法靠不住
作者: HAT
时间: 2008-11-5 10:23
标题: Re 16楼
10楼的代码贴错了,多了一个字符,已更新,可重新测试。
作者: yishanju
时间: 2008-11-5 10:23
呃,可是代码说的是没有QQ在运行。-_-
作者: tireless
时间: 2008-11-5 10:25
Quote: |
Originally posted by yishanju at 2008-11-5 10:08 AM:
^_^ 偶向来只会提供方法和思路,具体代码是不会有时间去写的 |
|
不是的,那个是回复给 8 楼的。
——————————————————————————————
Quote: |
『第 13 楼』:
判断QQ安装目录,我觉得读注册表不太可靠,应该读QQ进程路径好点 |
|
我觉得很可靠。进程里如何读取 qq 路径?
[
Last edited by tireless on 2008-11-5 at 10:28 ]
作者: HAT
时间: 2008-11-5 10:25
标题: Re 19楼
呃,原因见18楼
作者: HAT
时间: 2008-11-5 10:27
标题: Re 20楼
有些绿色版的qq不会写注册表
可以用wmic获取进程信息
作者: tireless
时间: 2008-11-5 10:30
Quote: |
Originally posted by HAT at 2008-11-5 10:27 AM:
有些绿色版的qq不会写注册表 |
|
我测试的情况是,绿色版的 QQ 同样会把 QQ 路径写入注册表。我有两个目录下有绿色版的 QQ,当打开另一个目录的 QQ 登陆框,注册表里的 QQ 路径会立即更改。
作者: yishanju
时间: 2008-11-5 10:33
得到QQ的路径应该不是难事了,这个帖子核心的问题"怎么用命令行得到当前正在运行的QQ号码"
如果多开了几个QQ是不是都能把在运行的QQ号显示出来
作者: HAT
时间: 2008-11-5 10:45
遇到一个问题
dir /s /b /a-d /o-d "C:\Program Files\Tencent\QQ*qqstatcount.dat"
这个命令没有返回预期的结果,郁闷。如果要用 for + %%~ti 的方法来判断哪个文件最新,就要考虑系统日期格式可能存在的差异,又不想为了这点问题去修改注册表中的日期格式。咋办呢?恩,wmic可以避开日期格式的差异,但又得考虑有些系统不能使用wmic。左右为难啊。
先休息去了,晚上还要值夜班,到时再来看大家有没有更好的方案。如果实在不行,我就用wmic来判断最新文件了。
作者: yishanju
时间: 2008-11-5 10:46
支持WMIC
作者: tireless
时间: 2008-11-5 11:16
不支持 WMIC,因为慢。
作者: radem
时间: 2008-11-5 12:27
1.确认QQ进程
2.对比最新修改的文件存在于哪个QQ号码文件夹,得出正在运行QQ号
但同时运行多个号这种思路就不行了
作者: HAT
时间: 2008-11-5 18:07
标题: Re 28楼
假设只有一个qq号码在线,你如何判断最新修改的文件存在于哪个QQ号码文件夹呢?能否对比25楼观点给出自己的方法?
作者: HAT
时间: 2008-11-6 21:00
思路来源于QQ群中的一段代码,我做了稍许修改,主要是那个findstr的正则表达式。
@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