最近由于我要感谢我的好友白云间大佬对社区不限速下载功能的巨大帮助(由于我搞不定)。而且她又正好在做他的PE(Pure PE(纯真 PE))
它使用的是社区大佬的PECMD蜂鸟PE制作器,但是在他修改时遇到了一些问题
我就打算为他制作一款PECMD的PE制作器。也顺便补充一下我最近太久没发帖子这个问题问题
我便开始制作起了PE制作群,我打算制作出一款跨世纪的PE制作器,为其中添加了多项首发技术:
首发PECMD16进制色彩Bug解决及产生原理、
首发PECMD免fbwf.cfg实现电脑存储单位的实际及理论的换算、
首发PECMD网速获取(无需第三方程序只需要PECMD即可)、
领先的PE在线制作、领先的PE在线升级、
领先的下载文件高精度下载进度条......
我决心以这次的PE制作器颠覆大家对PECMD的认知!
第一步 如何获取网速?
目前我尝试过的方案如下:
1.使用纯PECMD实现
原理:下载一个文件(在PEiso文件同的一个服务器下的一个小一些的文件)下载完成后,文件大小/时间(秒),获得下载速度
缺点:用了网速变慢,更新不及时
2.使用第三方工具(speedtest)实现
原理:通过PECMD的EXEC命令调用CMD再由CMD调用Speedtest后,通过CMD控制台输出信息,PECMD获取控制台信息截取需要的部分
缺点:工具不支持Win10以下的系统
3.使用CMD的Ping命令
原理:访问一个网站或IP通过访问加载时间来了解网络速度,时间越长速度越慢
缺点:不能知道详细信息
4.使用CMD的
wmic nic where netEnabled=true get name, speed
命令
原理:通过网络设备获取网络速度,只有Windows 10以上才能用
缺点:速度不精准,只有网络速度,不分上传下载。
5.使用CMD调用VBS获取网络速度
原理:使用CMD调用VBS获取网速后用PECMD获取数据
缺点:会出现间断的问题,有时获取不到,每隔一个就有一个没有数据
在我不断地寻找后终于找到了下面这个方法,可以完美解决问题:
(请留下你的评论在获取哦📝📝📝)
此处内容隐藏,回复后可见!立即回复 回复后请刷新页面!刷新
第二步 如何实现获取网速的效果?
首先使用EXEC命令调用CMD并把CMD控制台内容保存到变量
代码:
解释:
“200”为时间单位,此处单位为毫秒。这个说明等待多久后查看CMD控制台信息
“网速”为存储控制台所有内容的变量
“netstat -e -s”是CMD命令
接着使用MSTR命令实现截取部分内容
“网络下载速度-字节”和“网络上传速度-字节”为保存截取后信息的变量
“%网速%”表示控制台原内容
“68”和“98”表示起始位置,为了保证速度特别快时数据不会缺失所以空格也截取进去了
“30”和“8”表示截取的字符数量
然后使用SED命令去除多余空格
“网络下载速度-字节”和“网络上传速度-字节”表示保存处理后数据的变量
“0”表示遍历所有内容
“[]”中的“ ”表示替换的对象
“,,”中间没有字符表示把原始内容的所有“ ”替换成“”
“%网络下载速度-字节%”和“%网络上传速度-字节&”原始数据
这样功能就实现了,下面是我写的完整功能。里面还有我首发的无fbwf.cfg实现存储单位换算。
运行效果图:
谢谢分享
谢谢大佬!
大佬牛B!
太帅了!
百般通牛逼!支持一下
来个纯PECMD调取API获取网速:
//https://download.csdn.net/download/fx524913413/7774949 IFEX %&CurFile%.LOG, LOGS --2 * %&CurFile%.LOG ENVI$ &NL=0d 0a ENVI^ EnviMode=1 ENVI^ ForceLOcal=1 WIN1 _SUB WIN1,W387H254,网络速度, LABE &wMsg,L63T78W264H100,,, CALL $--ret:&&hDll ,-LoadLibrary,^Iphlpapi.dll CALL $--ret:&&GetIfTable ,-GetProcAddress,*%hDll%,GetIfTable --MESS. [%&hDll%] [%&GetIfTable%] SET &sz0=0x100000 SET$$ &sz=0x00100000 0 0 SET#$ &Buf=*0x100100 0 SET &dwLastIn=0 //上一秒钟的接收字节数 SET &dwLastOut=0 //上一秒钟的发送字节数 SET &dwBandIn=0 //下载速度 SET &dwBandOut=0 //上传速度 SET &MAX_INTERFACE_NAME_LEN=256 SET &MAXLEN_PHYSADDR=8 SET &MAXLEN_IFDESCR=256 CALC #&&MIBLEN=%&MAX_INTERFACE_NAME_LEN% * 2 + 4*5 + %&MAXLEN_PHYSADDR% + 4*16 + %&MAXLEN_IFDESCR% CALC #&&Ofb1=4 + %&MAX_INTERFACE_NAME_LEN% * 2 + 4*5 + %&MAXLEN_PHYSADDR% + 4*3 //CALC #&&Ofb2=%&Ofb1% + 4*6 SET &dwInOctets=0 SET &dwOutOctets=0 TIME T1,1000, CALL OnT1 _END _SUB OnT1 SET-long sz=%&sz0% SET-int64 Buf=0 ^CALL $--ncd --nrcd --qd --ret:&&ret #,%&GetIfTable%,*&Buf,*&sz,#1 SET &dwNumEntries=%&Buf?long:0% SET &I=0 SET &Of1=%Ofb1% LOOP #%&I%<%&dwNumEntries%, {* CALC #&I=%&I% + 1 ENVI?long &Buf=&&dwInOctetsI:%&Of1% //DWORD ENVI?long &Buf=&&dwOutOctetsI:(%&Of1%+24) //^CALC #&&dwInOctetsI=%%Buf?long:%&Of1%%% //DWORD //^CALC #&&dwOutOctetsI=%%&Buf?long:(%&Of1%+24)%% //DWORD CALC #&dwInOctets=%&dwInOctets% + %&dwInOctetsI% //dwInOctets CALC #&dwOutOctets=%&dwOutOctets% + %&dwOutOctetsI% //dwOutOctets CALC #&Of1=%&Of1% + %&MIBLEN% } CALC &dwBandIn=(%&dwInOctets% - %&dwLastIn% ) / 1024#2 //下载速度 CALC &dwBandOut=(%&dwOutOctets% - %&dwLastOut%) / 1024#2 //上传速速 SET dwLastIn=%&dwInOctets% SET dwLastOut=%&dwOutOctets% ENVI @&wMsg=收到字节: %&dwLastIn% bytes%&NL%发送字节: %&dwLastOut% bytes%&NL%下行速度: %&dwBandIn% KB%&NL%上行速度: %&dwBandOut% KB _END EXIT
527104427 来个纯PECMD调取API获取网速: //https://download.csdn.net/download/fx524913413/7774949 IFEX %&am ...
就是代码长了点,不过还是非常歪瑞古德!!!
该用户因违反论坛规则被关小黑屋,相关内容被屏蔽。
这个前言怎么读都感觉不通顺
感谢分享
大佬威武👍
我看看怎么个事...........😁
kedion 这个前言怎么读都感觉不通顺
我改改
谢谢大佬,学习了!
感谢大佬分享