
| 出版日期:2002-06-10 总期号:471 本年期号:21 |
|
超频小奇兵
姜卫东、华云 随着网络的普及应用,宽带互联已经越来越多地走入了我们的生活。目前我们使用的大部分都是ADSL线路的专线(固定IP)和虚拟拨号两种类型的接入方式。虽然ADSL已经相当快了,但人们总是希望更快,因此便有了“ADSL超频奇兵”这样的软件,通过修改PC系统注册表中原来专为“低速”接入而设置的TCP/IP默认参数以适应PPPoE(PPPover Ethernet基于以太网的PPP协议)方式的ADSL接入。不过,作为Program Fan,我们自然想知道,这样的软件是怎样编写的呢?它修改了注册表的哪些键呢?通过研究,我们发现,要提高ADSL的速度,需要修改注册表中的如下键值: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下的MaxConnectionsPer1_0Server和MaxConnectionsPerServer;HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\Class\NetTrans\0000~0009下的MaxMTU;HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\VxD\MSTCP下的以下键值:DefaultRcvWindow、DefaultTTL、PMTUDiscovery、PMTUBlackHoleDetect、Tcp1323Opts、SackOpts 以及HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\Parameters下的MaxDupAcks。 知道了以上原理,我们就可以自己编程来实现了。下面介绍在Delphi中实现的方法。 界面设计 进入Delphi 6,新建一工程,在默认窗体上添加一个标签组件和一个命令按钮(如图1):
要操作Windows注册表,首先要在单元的USES部分引用TREGISTRY,然后才能在Delphi中操作注册表。 程序源码 以下是源码部分,由于代码比较简单,一看就懂,因此省略了注释。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,registry, StdCtrls, Dialogs; {注:上面粗体部分registry为后加的} type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var myreg:Tregistry; i:integer; begin myreg:=Tregistry.Create ; myreg.RootKey :=hkey_local_machine; for i:=0 to 9 do begin myreg.OpenKey('\system\currentcontrolset\services\class\nettrans\000'+inttostr(i),false); myreg.WriteString('maxmtu','1492'); next end; myreg.OpenKey('\system\currentcontrolset\services\vxd\mstcp',false); myreg.WriteString('DefaultTTL','64'); myreg.WriteString('PMTUBlackHole Detect','0'); myreg.WriteString('PMTUDiscovery','1'); myreg.WriteString('sack0pts','1'); myreg.WriteString('Tcp13230pts','1'); myreg.WriteString('DefaultRcvWindow','255552'); myreg.OpenKey('\system\currentcontrolset\services\vxd\mstcp\parameters',false); myreg.WriteInteger('maxdupacks',0); myreg.RootKey:=hkey_current_user; myreg.OpenKey('\software\microsoft\windows\currentversion\internet settings',false); myreg.WriteInteger('MaxConnectionsPer1_0Server',32); myreg.WriteInteger('MaxConnectionsPerServer',16); myreg.CloseKey ; myreg.Free ; end; end. 上面程序没有考虑HKEY_LOCAL_MACHIN\System\CurrentControlSet\Services\Class\NetTrans\0000~0009中是否有不存在的键,如果有,可以自己建立,以下代码演示了在当前主键下建立一个名为“jwd”的子键的方法:myreg.CreateKey('jwd'); 以上程序在Windows Me,Delphi 6.0中运行通过。 |
|||||||||||||||||||||||