WEB开发网
开发学院软件开发VC 不重起Windows直接更改IP地址 阅读

不重起Windows直接更改IP地址

 2006-07-21 11:10:54 来源:WEB开发网   
核心提示: 代码如下:BOOL RegSetIP(LPCTSTR lpszAdapterName, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate){HKEY hKey;string strKeyName = "SYSTEM\\C

代码如下:

BOOL RegSetIP(LPCTSTR lpszAdapterName, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
  HKEY hKey;
  string strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
  strKeyName += lpszAdapterName;
  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
        strKeyName.c_str(),
        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;  // REG_MULTI_SZ数据需要在后面再加个0
  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);
  return TRUE;
}

三、调用DhcpNotifyConfigChange通知配置的改变

未公开函数DhcpNotifyConfigChange位于 dhcpcsvc.dll中,原型如下:

BOOL DhcpNotifyConfigChange(
  LPWSTR lpwszServerName, // 本地机器为NULL
  LPWSTR lpwszAdapterName, // 适配器名称
  BOOL bNewIpAddress, // TRUE表示更改IP
  DWORD dwIpIndex, // 指明第几个IP地址,如果只有该接口只有一个IP地址则为0
  DWORD dwIpAddress, // IP地址
  DWORD dwSubNetMask, // 子网掩码
  int nDhcpAction ); // 对DHCP的操作 0:不修改, 1:启用 DHCP,2:禁用 DHCP

具体调用代码如下:

BOOL NotifyIPChange(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask)
{
  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 bResult;
}

(全文完)

上一页  1 2 3 

Tags:Windows 直接 更改

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接