我已经开始创建感兴趣的Autohotkey脚本GUI。 我制作了各种各样的诊断工具,该工具的一个功能是使用 netstat 命令为用户提供Kbps和Mbps下载速度的持续实时更新。
我决定使用netstat,因为基于单个机器设置,适配器/连接接口可能会发生变化,导致该工具无法在所有计算机上运行。
唯一的问题是当使用 Netstat 时,更新会有延迟,导致进度条数据在“0”和实际速度之间跳回和第四。 (由于netstat数据更新的延迟,它会自行重置)
我的问题是,是否有办法使用Netstat命令保持数据的持续性和准确性,或者是否有更有效的方法来获得所需的结果?
以下是代码的一部分:
#SingleInstance, Force
nstFile:="C:\bytes.txt"
Process Priority,,High
OnExit, exit
Gui, Show, h450 w500, Diagnostics
Gui, Font,
Gui, Add, Text, x200 y240, Live Network Activity:
Gui, Add, Progress, x131 y260 h100 w15 Vertical clime vbytesbar backgroundgray Range0-25
Gui, Add, Text, x105 y385 h15 vbytes, Loading...
Gui, Add, Text, x80 y370, Download Speed
Gui, Add, GroupBox, x320 y231 w115 h190 cblack
Gui, Font, s6
Gui, Add, Text, x92 y353, 0 Mbps -
Gui, Add, Text, x92 y334, 5 Mbps -
Gui, Add, Text, x90 y314, 10 Mbps -
Gui, Add, Text, x90 y295, 15 Mbps -
Gui, Add, Text, x90 y276, 20 Mbps -
Gui, Add, Text, x90 y255, 25 Mbps -
setTimer, updateBytes, 1000
updateBytes:
runWait %comspec% /c Netstat -e >"%nstFile%",,hide
fileReadLine,bytesLine,% nstFile,5
regExMatch(bytesLine,"Bytes\s+\K\d+",bytesData)
bandwidth:=bytesData-prevBytesData
prevBytesData:=bytesData
guiControl,text,bytes,% bandwidth//1000 " Kbps"
guiControl 1: , bytesbar,% bandwidth//1000000
Return
guiclose:
guiescape:
exit:
{
ifexist, C:\bytes.txt
FileDelete, C:\bytes.txt
}
{
exitapp
}
return
感谢您的时间和帮助。
答案 0 :(得分:0)
使用A_TickCount保存您读取数据的时间点,并始终将其与上次进行比较。此外,您似乎正在寻找以每秒千比特为单位的下载速度(用于您的提供商的广告)并且每秒的千字节数(用于显示大多数计算机应用程序中的下载速度)。 1 Kilobyte = 8 Kilobit,所以只需将它乘以8.它应该看起来像这样:
Round(((currentSize/1024-lastSize/1024)/((currentSizeTick-lastSizeTick)/1000))*8)
以下是更新后的代码:
#SingleInstance, Force
nstFile:="C:\bytes.txt"
Process Priority,,High
OnExit, exit
Gui, Show, h450 w500, Diagnostics
Gui, Font,
Gui, Add, Text, x200 y240, Live Network Activity:
Gui, Add, Progress, x131 y260 h100 w15 Vertical clime vbytesbar backgroundgray Range0-25000
Gui, Add, Text, x105 y385 h15 vbytes, Loading...
Gui, Add, Text, x80 y370, Download Speed
Gui, Add, GroupBox, x320 y231 w115 h190 cblack
Gui, Font, s6
Gui, Add, Text, x92 y353, 0 Mbps -
Gui, Add, Text, x92 y334, 5 Mbps -
Gui, Add, Text, x90 y314, 10 Mbps -
Gui, Add, Text, x90 y295, 15 Mbps -
Gui, Add, Text, x90 y276, 20 Mbps -
Gui, Add, Text, x90 y255, 25 Mbps -
setTimer, updateBytes, 1000
updateBytes:
runWait %comspec% /c Netstat -e >"%nstFile%",,hide
fileReadLine,bytesLine,% nstFile,5
regExMatch(bytesLine,"Bytes\s+\K\d+",currentSize)
currentSizeTick := A_TickCount
speedKBs := Round((currentSize/1024-lastSize/1024)/((currentSizeTick-lastSizeTick)/1000))
speedKBits := Round(((currentSize/1024-lastSize/1024)/((currentSizeTick-lastSizeTick)/1000))*8)
lastSizeTick := currentSizeTick
lastSize := currentSize
guiControl,text,bytes,% speedKBits " Kbps"
guiControl 1: , bytesbar,% speedKBits
Return
guiclose:
guiescape:
exit:
{
ifexist, C:\bytes.txt
FileDelete, C:\bytes.txt
}
{
exitapp
}
return
我还将进度条的范围更改为Range0-25000,因此我们可以省去分割部分。
请注意,您需要在大多数计算机上以管理员身份运行此脚本。