本来电脑是指定IP的,我现在想通过程序,让电脑变成自动获取IP有人知道怎么做?如果是改注册表的方法,最好能告诉需要更改哪些项?网络连接怎样重启?达到自动获取Ip地址的效果

解决方案 »

  1.   

    首先,本机的IP地址保存了注册表中.如下
    在注册表的这里:   
     [HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\CLASS\NETTRANS\0001]   
     "DRIVERDESC"="TCP/IP"   
     "INFSECTION"="MSTCP.NDI"   
     "IPADDRESS"="192.168.0.199"   
     "IPMASK"="255.255.255.0"   
     "DEVICEVXDS"="VTDI.386,VIP.386,VTCP.386,VDHCP.386,VNBT.386"   
     "INSTALLVNBT"="0"   
     "INFPATH"="NETTRANS.INF"   
     "PROVIDERNAME"="MICROSOFT"   
     "DRIVERDATE"="   5-   5-1999"   
     "DEVLOADER"="*NDIS"   
     "DEFAULTGATEWAY"="192.168.0.1"   设为自动获取后就这样了:   
     [HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\CLASS\NETTRANS\0001]   
     "DRIVERDESC"="TCP/IP"   
     "INFSECTION"="MSTCP.NDI"   
     "IPADDRESS"="0.0.0.0"   
     "IPMASK"="0.0.0.0"   
     "DEVICEVXDS"="VTDI.386,VIP.386,VTCP.386,VDHCP.386,VNBT.386"   
     "INSTALLVNBT"="0"   
     "INFPATH"="NETTRANS.INF"   
     "PROVIDERNAME"="MICROSOFT"   
     "DRIVERDATE"="   5-   5-1999"   
     "DEVLOADER"="*NDIS"   
     "DEFAULTGATEWAY"="192.168.0.1"   修改IP地址:     
       
     你所需要修改的注册表主键为   HKEY_LOCAL_MACHINE,所以请确定你的程序有足够权限。     
     查找子键   SOFTWARE\MICROSOFT\WINDOWS   NT\CURRENTVERSION\NETWORKCARDS\NETCARD#,NETCARD#   通常为"1",但是如果安装了多块网卡名称就会有所不同。     
     得到键"SERVICENAME"的值。     
     通过刚才得到的"SERVICENAME"打开相应的键SYSTEM\CURRENTCONTROLSET\SERVICES\"SERVICENAME"\PARAMETERS\TCPIP。     
     设置键"IPADDRESS"的值以达到改变IP地址的目的,同时需要设置"SUBNETMASK"键值以改变子网掩码。     
     设置"DEFAULTGATEWAY"键值改变默认网关地址。     
     重新启动     
     修改主机名称:     
       
     你所需要修改的注册表主键为   HKEY_LOCAL_MACHINE     
     打开子键   SYSTEM\CURRENTCONTROLSET\SERVICES\TCPIP\PARAMETERS     
     更改键"HOSTNAME"的值     
     打开子键   SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME     
     更改键"COMPUTERNAME"的值     
     重新启动     使用IPHLPAPI里面的ADDNETWORDADDRESS和DELETENETWORDADDRESS函数.当然也可以.当然还可以使用脚本
    SYSTEM("NETSH   INTERFACE   IP   SET   ADDRESS   NAME="本地连接"   SOURCE=STATIC   ADDR=X.X.X.X   MASK=255.255.255.0   GATEWAY="X.X.X.X"   GWMETRIC=1   ")   
     SYSTEM("ETSH   INTERFACE   IP   SET   DNS   NAME="本地连接"   STATIC   X.X.X.X   REGISTER=PRIMARY") 
      

  2.   

    注册表貌似无法  让dns自动获取
    而且xp有的系统[HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES下
    就没有CLASS这一项的
    而且不是所有的windows操作系统都可用
    我想   有没有人知道  未公开的api之类的
    或者实现的比较好的方案
      

  3.   

    HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\CLASS\NETTRANS
    我查看了还几台电脑,都有上面的这个表项啊。
      

  4.   

    我现在用的这个操作系统  xp Pro 里  就没有这项
    要是有  我何必有此疑问呢
      

  5.   

    我现在在试 你通过注册表查找适配器 然后找到再用的网卡名字
    在注册表里找到对应的名字  直接修改注册表里 这个网卡的数据
    看看 能不能成功通过改EnableDHCP项达到目的。这个方法貌似
    只能自动获取地址,无法自动获取DNS
      

  6.   


    DWORD AddIPAddress(
      __in   IPAddr Address,
      __in   IPMask IpMask,
      __in   DWORD IfIndex,
      __out  PULONG NTEContext,
      __out  PULONG NTEInstance
    );//这个可以设置本机IP和子网掩码
    DWORD DeleteIPAddress(
      __in  ULONG NTEContext
    );//删除了IP列表就是自动获取了
      

  7.   

    还有个简单的,VC操作WMI对象,WQL语句 
    select * from Win32_NetworkAdapterConfiguration where index=0
    获得的对象有DHCPEnabled、EnableStatic、EnableDHCP等方法
      

  8.   

    还可以第3种方法,使用系统自带的工具,netsh.exe
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257748
      

  9.   

    11  12 13楼的  可否给出点例子代码
    11楼的方法我正在验证  不过我不知道  如果没设置本机IP和子网掩码 没有IP列表 怎么直接删除
    说白了  就是DWORD DeleteIPAddress(__in  ULONG NTEContext);//删除了IP列表就是自动获取了
    这个参数怎么获取12楼的  给个代码片段吧  是否需要第三方库 13楼的给的那个地址我连接不上去。。
      

  10.   

    12#只需要VC调用COM接口执行WMI就行了,你MSDN里面搜索下,大致差不多这样子IEnumWbemClassObject* pEnumerator = NULL;
        hres = pSvc->ExecQuery(
            bstr_t("WQL"), 
            bstr_t("select * from Win32_NetworkAdapterConfiguration where index=0"),
            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
            NULL,
            &pEnumerator);13#的网页我可以打开,你也可以 看 netsh /?的帮助
      

  11.   

    如果能控制windows的服务,可以试一下,这个服务:DHCP,设置为已启动状态,然后再修改注册表
      

  12.   

    构造几个DHCP消息包,然后进行广播。。
      

  13.   

    查iphlp.h头文件,必对你有帮助