不重起Window s 直接更改IP 地址的三种方法 有很多网友都遇到过更改IP 地址但是要重启机器的问题,在这里,为大家介绍几种不重启Windows 直接更改IP 地址的方法。首先是调用DhcpNotifyConfigChange 的方法,后面还有修改注册表跟使用“iphlpapi”的方法。 一、未公开函数:DhcpNotifyConfigChange 设置 IP 地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,而 AddIPAddress 函数只能添加 IP 而不是更改当前的IP,我们在Windows NT/2000 界面上操作不需要重新启动就可以生效,那系统到底做了什么额外的工作才使IP 设置直接生效呢?笔者通过跟踪 explorer.exe 中 API的调用发现在netcfgx.dll中调用了 dhcpcsvc.dll 中一个未公开的API 函数DhcpNotifyConfigChange,现将不重新启动WINDOWS直接更改IP 地址的详细方法介绍如下: 1、获取适配器名称 这里指的适配器名称要区别于适配器描述,比如我的一块网卡,适配器描述是: Realtek RTL8139(A) PCI Fast Ethernet Adapter ,适 配 器名 称 为:{66156DC3-44A4-434C-B8A9-0E5DB4B3EEAD}。获取适配器名称的方法有多种: 1.1 调用IP helper API 取得适配器名称 ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO); IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize]; if(GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大 { delete pAdapterInfo; pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize]; pAdapterInfoBkp = pAdapterInfo; } if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS ) { do{ // 遍历所有适配器 if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 判断是否为以太网接口 { // pAdapterInfo->Description 是适配器描述 // pAdapterInfo->AdapterName 是适配器名称 } pAdapterInfo = pAdapterInfo->Next; }while(pAdapterInfo); } delete pAdapterInfoBkp; 1.2 读取注册表取得适配器名称 在Windows2000中可以通过遍历HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000n\ (n 是从0 开始编号的数字)所有接口,在Windows NT中可以读取HKEY_LOC...