Login dark

author: love02xp
title: VC Ip、子网掩码、默认网关、首选DNS服务器
date: 2015-12-01 14:15:54
category: [编程代码]
tags: [学习]


#####[阅读原文](http://blog.csdn.net/lltaoyy/article/details/5866754)



Ip、子网掩码、默认网关、首选DNS服务器相关信息在注册表之中,改变注册表的值,然后通知所以应用程序即可。

<!--more-->

代码如下: 
BOOL   SetIP(LPCTSTR   lpszAdapterName,   int   nIndex,   LPCTSTR   pIPAddress,   LPCTSTR   pNetMask,   LPCTSTR   pNetGate) 
{ 
HKEY   hKey; 
CString   strKeyName   =   "SYSTEM//CurrentControlSet//Services//Tcpip//Parameters//Interfaces// "; 
strKeyName   +=   lpszAdapterName; 
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
strKeyName, 
0, 
KEY_WRITE, 
&hKey)   !=   ERROR_SUCCESS) 
return   FALSE; 

char   mszIPAddress[100]; 
char   mszNetMask[100]; 
char   mszNetGate[100]; 

strncpy(mszIPAddress,   pIPAddress,   98); 
strncpy(mszNetMask,   pNetMask,   98); 
strncpy(mszNetGate,   pNetGate,   98); 

int   nIP,   nMask,   nGate; 

nIP   =   strlen(mszIPAddress); 
nMask   =   strlen(mszNetMask); 
nGate   =   strlen(mszNetGate); 

*(mszIPAddress   +   nIP   +   1)   =   0x00; 
nIP   +=   2; 

*(mszNetMask   +   nMask   +   1)   =   0x00; 
nMask   +=   2; 

*(mszNetGate   +   nGate   +   1)   =   0x00; 
nGate   +=   2; 

RegSetValueEx(hKey,   "IPAddress ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszIPAddress,   nIP); 
RegSetValueEx(hKey,   "SubnetMask ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszNetMask,   nMask); 
RegSetValueEx(hKey,   "DefaultGateway ",   0,   REG_MULTI_SZ,   (unsigned   char*)mszNetGate,   nGate); 

RegCloseKey(hKey); 

//通知IP地址改变 
BOOL bResult   =   FALSE; 
HINSTANCE hDhcpDll; 
DHCPNOTIFYPROC pDhcpNotifyProc; 
WCHAR   wcAdapterName[256]; 

MultiByteToWideChar(CP_ACP,   0,   lpszAdapterName,   -1,   wcAdapterName,256); 

if((hDhcpDll   =   LoadLibrary( "dhcpcsvc "))   ==   NULL) 
return   FALSE; 

if((pDhcpNotifyProc   =   (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll,   "DhcpNotifyConfigChange "))   !=   NULL) 
if((pDhcpNotifyProc)(NULL,   wcAdapterName,   TRUE,   nIndex,   inet_addr(pIPAddress),   inet_addr(pNetMask),   0)   ==   ERROR_SUCCESS) 
bResult   =   TRUE; 

FreeLibrary(hDhcpDll); 

return   TRUE; 
}