标题: 迅雷下载后关机
[打印本页]
作者: gool123456
时间: 2010-4-24 21:01
标题: 迅雷下载后关机
多谢各位的建议,判断的准确度已经进一步了。
这个P处理用处不大,在这只做参考。。
代码是以迅雷5写的,如果你不是用迅雷5的,请把名字改成你的下载器名。已经
测试过其他下载器同样可以,只要把下载器的名字替换掉以下的Thunder5.exe
即可。
把以下代码保存为“迅雷关机监控.bat”:
@echo off&setlocal EnableDelayedExpansion
::迅雷关机监控 code by gool123456 @ 2010
::============================
mode con cols=50 lines=10
title 迅雷关机监控 code by gool123456
set /p dir_=把需要监控的文件夹拖入(当前文件夹直接回车):
if "%dir_%"=="" set "dir_=%cd%"
set "dir_=%dir_:"=%"
cd.>"c:\temp.txt"
dir "%dir_%" /a-d /b>>"c:\temp.txt"
for /f "delims=:" %%a in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge=%%a")
:begin
echo 下载未进行.等待开始...
ping 127.1 -n 3 >nul&cls
:jj
for /f "delims=:" %%b in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge1=%%b")
if !ge1! GTR !ge! goto :xiazai
if !ge1! equ !ge! goto :begin
:xiazai
ping 127.1 -n 3 >nul&cls
<nul set/p= 当前时间 : %time% &set/p=已耗时:%tm%秒<nul
set /a link=0
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq Thunder5.exe" /nH 2^>nul^|findstr /i "Thunder5.exe"') do (
set id=
set /a id=%%i
if "!id!"=="" goto :sa
for /f "tokens=4" %%y in ('netstat -anop tcp^|findstr /e /c:"!id!"') do (
if "%%y"=="" goto :eof
if "%%y"=="ESTABLISHED" (set /a link=!link!+1)
)
)
if !link! GEQ 4 (echo.&echo.&echo 迅雷下载中.....) else (echo.&echo.&echo 尝试连接.继续等待...)
:sa
set new=
set /a tm+=3
if not "!link!"=="0" (echo.&echo 当前共!link!个连接 & goto :jj) else (
for /f "delims=" %%h in ('dir "%dir_%\*.td" "%dir_%\*.td.cfg" /a-d /b 2^>nul') do (
if "%%h"=="" (goto :sd)
findstr /x /c:"%%h" c:\temp.txt >nul||set /a new+=1
)
set /a txt=%ge1%-%ge%
if !txt! equ !new! (goto :jj)
)
:sd
shutdown /f /s /c "^-^下载完毕!正在执行关机 "
:un
cls&set /p undown=如果你还未进行下载,请输入n来取消关机,否则不输入:
if /I "%undown:~0,1%"=="n" (shutdown -a &echo 你取消关机,请按任意键退出..&pause>nul) else (goto :un)
[
Last edited by gool123456 on 2010-5-6 at 21:49 ]
作者: gool123456
时间: 2010-4-24 21:06
= = 发上去的文件忘了改成论坛名了 呵呵。
作者: exzzz
时间: 2010-4-24 22:39
这个批处理是相当的无聊。。。
你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。
作者: rs369007
时间: 2010-4-24 23:16
大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经建立完毕,可以开始通信
你的判断的应该先排除迅雷与迅雷服务器的连接,
netstat 显示的tcp状态似乎没有能判断这个端口是否是正在传送数据,建立起tcp连接后程序可以通过某端口“随时”发送数据,状态还是ESTABLISHED,所以不能说tcp状态为ESTABLISHED,就说迅雷在下东西了。
[
Last edited by rs369007 on 2010-4-24 at 23:26 ]
作者: gool123456
时间: 2010-4-25 00:11
Quote: |
Originally posted by exzzz at 2010-4-24 22:39:
这个批处理是相当的无聊。。。
你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。 |
|
这个批处理也是有个朋友想通过迅雷下载完毕后,通过批处理或者不用第3方软件当迅雷下完指定任务后可以自动关机。
我在这个功能上加上了一些小功能,其实真正目的是为了下载后能通过它来关机。
而不是真正做个下载器。这也没意思。
你怕上传影响网速,还不如直接KILL了。
[
Last edited by gool123456 on 2010-4-25 at 14:01 ]
作者: slore
时间: 2010-4-25 15:11
本身不是有这个功能麽?
作者: gool123456
时间: 2010-4-25 21:43
Quote: |
Originally posted by slore at 2010-4-25 15:11:
本身不是有这个功能麽? |
|
是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。
[
Last edited by gool123456 on 2010-4-25 at 21:44 ]
作者: exzzz
时间: 2010-4-25 23:20
Quote: |
Originally posted by gool123456 at 2010-4-25 09:43 PM:
是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。
[ Last edited by gool123456 on 2010-4-25 at 21:44 ] |
|
如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。
此外,我所说的,监控迅雷已下载完成的任务并转移到其他目录,并不是kill就行。
你还得考虑到迅雷有这2个问题:1、下载后并不会自动退出迅雷。2、某个任务下载完成后,还有其他的任务需要下载,不可以kill迅雷,我需要他下载,不要他上传。
[
Last edited by exzzz on 2010-4-25 at 23:22 ]
作者: lena
时间: 2010-4-26 05:14
迅雷不是有下载完毕自动关机吗?lZ这不是多此一举哇?
作者: gool123456
时间: 2010-4-26 18:19
Quote: |
Originally posted by exzzz at 2010-4-25 23:20:
如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。
此外,我所说的,监控迅雷已下载完成的任 ... |
|
如果是限制迅雷上传的,我在网上搜了下方法有很多。就采用了百科其中一种方法写了一句,可以加上
cd /d "%systemroot%\system32"&&del /q "cid_store.dat"&md "cid_store.dat" & (for %%p in (c: d: e: f: g: h: i: j: k: l:) do (if exist %%p (for /f "delims=" %%f in ('dir /s /a-d /b "%%p\Thunder5.exe"^|findstr /i /c:"\Program\Thunder5.exe"') do (del /q "%%~dpfcid_store.dat" & md "%%~dpfcid_store.dat"))))
[
Last edited by gool123456 on 2010-4-26 at 18:44 ]
作者: gool123456
时间: 2010-4-26 18:21
Quote: |
Originally posted by rs369007 at 2010-4-24 23:16:
大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经 ... |
|
排除服务器连接似乎很难实现。。按严格来代码中的连接是不准确的,因为我不是计算下载的连接,是所有正常连接。
那个“echo迅雷在下载中..”似乎有点在忽悠别人。。。
判断迅雷是否在下载,目前我还没找到窍门。但如果是FTP下载,其实是可以计算文件大小来判断下载速度的。
作者: gool123456
时间: 2010-4-26 18:52
写来玩的~
作者: rs369007
时间: 2010-4-26 18:59
Quote: |
Originally posted by gool123456 at 2010-4-26 18:21:
其实是可以计算文件大小来判断下载.... |
|
我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件完整的大小。
如果监控链接状态,假设能正常监控数据传输状态,但是传输过程中完全有可能会出现链接被意外终止的情况,这必须被考虑(比如网线接口松了、交换机故障等),超过一定时间链接会被终止。所以建议 监控链接状态与检查文件的完整性。
[
Last edited by rs369007 on 2010-4-26 at 19:15 ]
作者: rs369007
时间: 2010-4-26 19:37
监控链接刚查了下,在tcp状态下,发起socket主动shutdown的会进入TIME_WAIT状态,如果能先记录一下迅雷刚启动时与所有外部ip的连接(记录下ip和状态吧),间隔<4分钟检查比对一次看看有不有新出现的和其他ip的连接出现TIME_WAIT的。
以前我也写过网络程序用c,如果迅雷主动调用shutdown、或closesocket,应该可以判断迅雷这次和这个“资源服务器”下载对话已经结束了。
作者: gool123456
时间: 2010-4-26 20:30
Quote: |
Originally posted by rs369007 at 2010-4-26 18:59:
我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件 ... |
|
嗯 ,是很好的建议。
今天测试过了,确实发现了迅雷有时不在正常连接状态下,依然可以下载. 不知道是不是UDP连接在作怪,还是流量有延缓。。(前提是我限制了下载速度为2K)。我对这方面不是很了解.
[
Last edited by gool123456 on 2010-4-26 at 20:54 ]