程序设置网卡IP地址?(4分)

Q

qdyoung

Unregistered / Unconfirmed
GUEST, unregistred user!
Windows 95/98,一个网卡,可能还有拨号网络适配器,用硬盘Clone
的方式安装网络,然后需要分别设置IP地址,由应用软件的配置程序
实现,目前采用的搜索并修改注册表的方式实现。
我问的是除了直接修改注册表,还有没有其它途径。当然指的用
代码实现。
对不起,我现在只有4分,已倾囊而出。
 
Hehe, 另外的途径可以是:
1. 编程修改注册表呀!

2. 利用Word 中的VBA的宏记录在Control Panel中填写IP地址的
操作步骤, 然后改成程序自动控制填写相应的地址

 
1. 我说我用的就是编程修改注册表的方法
2. 机器没有安装Word,也没有VBA,
而况,怎么建立带参数的宏,怎么在Delphi中调用,
小弟一概无知。
3. 我的意思是有没有什么API,因为以后版本Windows,注册表可能变化,
而且在NT和95好像也不一样。95下是:
System/CurrentControlSet/Services/Class/NetTrans/????/IPAddress
4. 来吧,不要放弃:低分-高难题!!!
 
4分答案: 没有 API 32 位函数, 只能用注册表
 
虽然是"保持物价",但也不能"抑制经济发展"哪,应该是
"物有所值" *_^
 
FIniFile : TRegistry;
FIniFile := TRegistry.Create();
FIniFile.OpenKey('System/CurrentControlSet/Services/Class/NetTrans/????/IPAddres', false);
FIniFile.writestring(....); 看看TRegistry帮助。
 
注册表就是95和NT有区别,你可以在程序里判断一下,95还是NT然后
再改!
 
呵呵, 这可真不是什么高难题!
不过如果只有4分, 还不如设成0分, 贡献一把, :)
我已经在一道题目里答过了(给出如何获得IP地址和子网掩码,改为设置应该不难):

>如果我不知道罔卡型号NE2000可能不正确(我用的不是NT),
>有没有什么其它方法?
所谓本地网络号本来就是和Network Adapter Bind在一起的,
>有没有什么其它方法
没有标准的方法. 因为这不是Win API的功能, TCP/IP资料看了
也没用, 因为网络编程接口之类的东西都是对高层应用设计的,
象这样底层的问题(网卡以及协议配置)是由系统级的程序实现
的, 不同的系统, 实现起来有很大不同.

在NT上, 先获得网络设备驱动程序的名称:
sNetCardRegKey := '/SOFTWARE/Microsoft/Windows NT/CurrentVersion/NetworkCards/1'; 1 或者其他能在这个地方枚举到的子键
regRootKey.RootKey := HKEY_LOCAL_MACHINE;
regRootKey.OpenKeyReadOnly(SNetCardRegKey);
sNetCardDriverName := regRootKey.ReadString('ServiceName');

然后:
sServiceRegKey := '/SYSTEM/CurrentControlSet/Services/';
sTCPIPRegKey := sServiceRegKey + sNetCardDriverName + '/Parameters/Tcpip';
在'IPAddress'中获得这个设备的所有IP地址
regRootKey.ReadBinaryData('IPAddress', cIPAddressArray, 255);
在'SubNetMask'中获得IP地址对应的子网掩码
regRootKey.ReadBinaryData('SubNetMask', cNetMaskArray, 255);

在Win95/98中:
获得设备名称的办法:
sNetCardRegKey := '/Enum/Network/MSTCP/0001/'; 0001 或者其他能在这个地方枚举到的子键
sServiceRegKey := '/SYSTEM/CurrentControlSet/Services/Class/';

regRootKey.RootKey := HKEY_LOCAL_MACHINE;
regRootKey.OpenKeyReadOnly(SNetCardRegKey);
sNetCardDriverName := regRootKey.ReadString('Driver');

然后:
sTCPIPRegKey := sServiceRegKey + sNetCardDriverName;
regRootKey.OpenKeyReadOnly(sTCPIPRegKey);

最后获得IP地址和子网掩码:
sIPAddress := regRootKey.ReadString('IPAddress');
sNetMask := regRootKey.ReadString('IPMask');
Win95不支持一个设备对应多个地址
 
我在问题中已经说明:"目前采用的搜索并修改注册表的方式实现",也就是
以上各位大虾所说的方法,已经在98下实现,在NT下没试。感谢pegasus
提供的NT下的资料。

之所以提出这个问题是因为我看到NetCPL.cpl中并没有直接访问注册表(用
PC Tools之类DOS工具)而是调用NetDI.dll,好像就是在其中真正访问注册表。
NetDI.dll输出不少函数,如NDIRegSetValue,当然只知道名称。
 
修改注册表
 
use winAPI
 
use winAPI
 
Michael_Qu:你知道怎么用API实现?如果真的能实现,我会叫斑竹给这个问题
加分。
 
改完IP地址后,能不能立即生效,改网关就可以.
 
我也只知道用系统注册表的方法, 而且, 我想知道如何改变了IP后不用重新
启动系统就可以生效.
 
分数太少了.......
只有如此了
 

Similar threads

顶部