在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → c++ IP地址修改源码(更换ip地址)

c++ IP地址修改源码(更换ip地址)

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.14M
  • 下载次数:76
  • 浏览次数:2927
  • 发布时间:2017-04-25
  • 实例类别:常规C/C++编程
  • 发 布 人:gzqfast
  • 文件格式:.zip
  • 所需积分:3
 相关标签: IP 源码 地址 修改

实例介绍

【实例简介】

【实例截图】

【核心代码】

// IP_changerDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "IP_changer.h"
#include "IP_changerDlg.h"
#include "afxdialogex.h"
#include <string.h>

#include <winsock2.h>
#include <setupapi.h>


#define UnknownDevice TEXT("<Unknown Device>")

#pragma comment(lib, "ws2_32.lib")
#pragma comment (lib,"setupapi")
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using namespace std;
#define MAXNUM    20
#define MAXLEN    10000

//全局数据和函数声明区

ADAPTER_INFO AdapterInfoVector[MAXNUM];
int CurrentNum=0;
HDEVINFO hDevInfo = 0;
static int flag=0;

bool StateChange(DWORD NewState,DWORD SelectedItem,HDEVINFO hDevInfo);
bool stringcmp(char *base,char *des);
void GetFileName(int index,CString& fileName);
void AdatperInfoToIPConfInfo(const ADAPTER_INFO adatperinfo,IPConfigInfo& ipconf);


// CIP_changerDlg 对话框




CIP_changerDlg::CIP_changerDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CIP_changerDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_AdapterNum=0;
	m_InitIndex=0;
	
}

void CIP_changerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_COMBO1, m_adapter);
}

BEGIN_MESSAGE_MAP(CIP_changerDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK, &CIP_changerDlg::OnBnClickedOk)
	ON_CBN_SELCHANGE(IDC_COMBO1, &CIP_changerDlg::OnCbnSelchangeCombo1)
END_MESSAGE_MAP()


// CIP_changerDlg 消息处理程序

BOOL CIP_changerDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	//初始化网卡信息,添加到复选框
	GetAdapterInfo();
	for(int i=0;i<m_AdapterNum;i  )
	{
		
		m_adapter.InsertString(i,AdapterInfoVector[i].strDriverDesc);
	}
	m_adapter.SetCurSel(0);
	m_adapter.SetDroppedWidth(290);

	//显示当前复选框中的Adapter的IP信息
	DisplayAdapterInfo(AdapterInfoVector[0]);

	//如果配置文件不存在,则创建配置文件
	CString fileName,FileContent;
	for(int i=0;i<m_AdapterNum;i  )
	{
		GetFileName(i,fileName);
		CreateConfigFile(fileName,AdapterInfoVector[i]);
	}

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CIP_changerDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon   1) / 2;
		int y = (rect.Height() - cyIcon   1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CIP_changerDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

bool CIP_changerDlg::RegSetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate,LPCTSTR pNameServer)
{
	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]={0};
	char mszNetMask[100]={0};
	char mszNetGate[100]={0};
	char mszNameServer[100]={0};

	char buf[100];

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

	int nIP, nMask, nGate,nServer;

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

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

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

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

	*(mszNameServer   nServer   1) = 0x00;
	nServer  = 2;
	
	if(RegSetValueEx(hKey, TEXT("IPAddress"), 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP))
		return(false);
	if(RegSetValueEx(hKey, TEXT("SubnetMask"), 0, REG_MULTI_SZ, (unsigned char*)mszNetMask, nMask))
		return(false);
	RegSetValueEx(hKey, TEXT("DefaultGateway"), 0, REG_MULTI_SZ, (unsigned char*)mszNetGate, nGate);
	RegSetValueEx(hKey, TEXT("NameServer"), 0, REG_SZ, (unsigned char*)mszNameServer, nServer);

	RegCloseKey(hKey);
	return(true);

}

bool CIP_changerDlg::GetAdapterInfo()
{
	HKEY hKey,hSubKey,hNdiKey,hNdiIntKey;
	//打开注册表
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}",\
		0,KEY_READ,&hKey)!=ERROR_SUCCESS)
		return FALSE;

	DWORD dwIndex = 0;
	DWORD dwBufSize = 256;
	DWORD dwDataType;
	char szSubKey[256]={0};
	unsigned char szData[256]={0};
	int flag=0;
	int temp=0;

	//先把适配器信息结构体数组AdapterInfoVector清空
	for(int i=0;i<MAXNUM;i  )
	{
		AdapterInfoVector[i].strDriverDesc.Empty();
		AdapterInfoVector[i].strIP.Empty();
		AdapterInfoVector[i].strName.Empty();
		AdapterInfoVector[i].strNameServer.Empty();
		AdapterInfoVector[i].strNetGate.Empty();
		AdapterInfoVector[i].strNetMask.Empty();
	}
	
	
	m_AdapterNum=0;
	int i_num=0;
	
	//把所有适配器当前配置信息存入AdapterInfoVector中
	while(RegEnumKeyEx(hKey,dwIndex  ,szSubKey,&dwBufSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)
	{
		if(RegOpenKeyEx(hKey,szSubKey,0,KEY_READ,&hSubKey)==ERROR_SUCCESS)
		{
			int find=0;
			if(RegOpenKeyEx(hSubKey,"Ndi",0,KEY_READ,&hNdiKey)==ERROR_SUCCESS)
			{
				dwBufSize=256;
				if(RegQueryValueEx(hNdiKey,"Service",0,&dwDataType,szData,&dwBufSize)==ERROR_SUCCESS)
				{
					//判断虚拟网卡
					if(strcmp((char*)szData,"VMnetAdapter")==0)
						find=1;
					else if(RegOpenKeyEx(hSubKey,"Ndi\\Interfaces",0,KEY_READ,&hNdiIntKey)==ERROR_SUCCESS)
					{
						dwBufSize=256;
						if(RegQueryValueEx(hNdiIntKey,"LowerRange",0,&dwDataType,szData,&dwBufSize)==ERROR_SUCCESS)
						{
							//判断是不是以太网卡
							if(stringcmp("ethernet",(char*)szData)==0)
							{
								flag=1;
								find=1;
							}//判断是不是无线网卡
							else if(strcmp("ethernet",(char*)szData)==TRUE)
								find=1;
						}
						RegCloseKey(hNdiIntKey);
					}
					RegCloseKey(hNdiKey);
				}
				if(!find)//只写入网卡信息
				{
					dwBufSize=256;
					if(RegQueryValueEx(hSubKey,"DriverDesc",0,&dwDataType,szData,&dwBufSize)==ERROR_SUCCESS)
					{
						ADAPTER_INFO pAI;
						
						pAI.strDriverDesc.Format("%s",szData);
						dwBufSize = 256;
						if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
						{
							pAI.strName.Format(_T("%s"),szData);
							RegGetIp(pAI, (LPCTSTR)szData);
						}
						
						AdapterInfoVector[m_AdapterNum  ]=pAI;// 加入到容器中
						if(flag==1)
						{
							m_InitIndex=m_AdapterNum-1;
							flag=0;
						}
							
					}
				}
				RegCloseKey(hSubKey);
			}
		}
		dwBufSize = 256;
	}
	RegCloseKey(hKey);

	return TRUE;

}

void CIP_changerDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	CString IPAddrStr,SubMaskStr,DefGateWayStr,DnsStr;

	GetDlgItem(IDC_IPADDRESS_IP)->GetWindowTextA(IPAddrStr);
	GetDlgItem(IDC_IPADDRESS_SUBMASK)->GetWindowTextA(SubMaskStr);
	DefGateWayStr.Empty();//为空
	DnsStr.Empty();//为空

//	GetDlgItem(IDC_STCIP_GATEWAY)->GetWindowText(DefGateWayStr);
//	GetDlgItem(IDC_STCIP_DNS)->GetWindowText(DnsStr);
//	AfxMessageBox(IPAddrStr SubMaskStr);

	//把当前IP的信息写入注册表中
//	if(RegSetIP(AdapterInfoVector[m_adapter.GetCurSel()].strName,0,IPAddrStr,SubMaskStr,DefGateWayStr,DnsStr))
	if(!RegSetIP(AdapterInfoVector[m_adapter.GetCurSel()].strName,0,IPAddrStr,SubMaskStr,DefGateWayStr,DnsStr))
	{
		MessageBox(_T("IP配置成功写入注册表失败"));
	}
	else//若写入,则更新数据,用于更新配置文件
	{
		AdapterInfoVector[m_adapter.GetCurSel()].strIP=IPAddrStr;
		AdapterInfoVector[m_adapter.GetCurSel()].strNetMask=SubMaskStr;
		AdapterInfoVector[m_adapter.GetCurSel()].strNetGate=DefGateWayStr;
		AdapterInfoVector[m_adapter.GetCurSel()].strNameServer=DnsStr;

	}

	//重启网卡
	int ret1=ChangeAdapterStatus(AdapterInfoVector[m_adapter.GetCurSel()].strDriverDesc,DICS_DISABLE);
	int ret2=ChangeAdapterStatus(AdapterInfoVector[m_adapter.GetCurSel()].strDriverDesc,DICS_ENABLE);
	if(ret1==TRUE&&ret2==TRUE)
		;
//		MessageBox(_T("IP更改操作成功"));
	else
	{
		MessageBox(_T("IP更改操作失败"));
		return ;
	}


	//如果配置文件不存在,则创建配置文件
	CString fileName,FileContent;
	for(int i=0;i<m_AdapterNum;i  )
	{
		GetFileName(i,fileName);
		CreateConfigFile(fileName,AdapterInfoVector[i]);
	}


	

}

//从注册表中获得lpszAdapterName的IP配置信息
/////////////////////////////////////////////////////////////////////////////
//bool CIP_changerDlg::RegGetIp(ADAPTER_INFO& pAI, LPCTSTR lpszAdapterName, int nIndex)
bool CIP_changerDlg::RegGetIp(ADAPTER_INFO& pAI, LPCTSTR lpszAdapterName)
{
	HKEY hKey;
	CString strKeyName = _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\");
	strKeyName  = lpszAdapterName;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
				strKeyName,
				0,
				KEY_READ,
				&hKey) != ERROR_SUCCESS)
		return FALSE;

	unsigned char szData[256];
	DWORD dwDataType, dwBufSize;

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("IPAddress"), 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
		pAI.strIP.Format(_T("%s"),szData);

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("SubnetMask"), 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
		pAI.strNetMask.Format(_T("%s"),szData);

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("DefaultGateway"), 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
		pAI.strNetGate.Format(_T("%s"),szData);

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("NameServer"), 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
		pAI.strNameServer.Format(_T("%s"),szData);
	
	RegCloseKey(hKey);
	return TRUE;

}

bool  CIP_changerDlg::ChangeAdapterStatus(LPCTSTR AdapterDeviceDesc, int Flag)//Flag =DICS_DISABLE-->禁用网络
{                                                                          //Flag =DICS_ENABLE--->恢复网络
	if (INVALID_HANDLE_VALUE == (hDevInfo = 
        SetupDiGetClassDevs(NULL,NULL,0,
        DIGCF_PRESENT|DIGCF_ALLCLASSES)))
    {
         AfxMessageBox(_T("GetClassDevs"));
    }

    DWORD i; 
    SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
	unsigned char *guid[4]={0};
    char DeviceName[200]={0};
	wchar_t str[100]={0};
	
	int size=100;
	DWORD DataT;
	unsigned char *buffer=NULL;
	DWORD sz=0;

    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i  )
    {
		//DeviceInfoData.ClassGuid="{4D36E972-E325-11CE-BFC1-08002BE10318}";
		StringFromGUID2(DeviceInfoData.ClassGuid,str,size);
		
		char temp[100]={0};
		char Rtl[]="{4D36E972-E325-11CE-BFC1-08002BE10318}";
		for(int j=0;str[j]!='\0';j  )
		{
			temp[j]=(char)str[j];
		}

		if(strcmp(temp,Rtl)==0)
		{
			LPTSTR buffer=NULL ;
			DWORD buffersize=0 ;

			while(!SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,\
			SPDRP_DEVICEDESC,&DataT,	(PBYTE)buffer,buffersize,&buffersize))
			{
				if(GetLastError()==ERROR_INVALID_DATA)
				{
					break ;
				}
				else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
				{
					if(buffer)
						LocalFree(buffer);
					buffer=(LPTSTR)LocalAlloc(LPTR,buffersize);
				}
				else 
				{
					SetupDiDestroyDeviceInfoList(hDevInfo);
					return FALSE ;
				}
			}
			if(GetLastError()==ERROR_INVALID_DATA)
				continue ;

			if(strcmp(buffer,AdapterDeviceDesc)==0)
			{
				if (StateChange(Flag,i,hDevInfo))
				{
					break;
				}
				else
				{
					CString temp=_T("对");
					temp =AdapterDeviceDesc;
					temp =_T("的操作失败!");
					AfxMessageBox(temp);
					return FALSE;
				}
			}
		}
    }
	return TRUE;
}


bool StateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO hDevInfo)
{
    LPTSTR buffer=NULL ;
    DWORD buffersize=0 ;
    SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
    HCURSOR hCursor;

    //
    // This may take a while :^(
    //
    hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));

    //
    // Get a handle to the Selected Item.
    //
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
    {
        printf("EnumDeviceInfo");
        return FALSE;
    }
	
    //{4D36E972-E325-11CE-BFC1-08002BE10318}
    // Set the PropChangeParams structure.
    //
    PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
    PropChangeParams.Scope = DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange = NewState; 

    if (!SetupDiSetClassInstallParams(hDevInfo,
        &DeviceInfoData,
        (SP_CLASSINSTALL_HEADER *)&PropChangeParams,
        sizeof(PropChangeParams)))
    {
        printf("SetClassInstallParams");
        SetCursor(hCursor);
        return FALSE;
    }

    //
    // Call the ClassInstaller and perform the change.
    //
    if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
        hDevInfo,
        &DeviceInfoData))
    {
        printf("SetClassInstallParams");
        SetCursor(hCursor);
        return TRUE;
    }
    return TRUE;
}

//////////////////////////////////////////////////////////
//如果des中有一子串和base相同,则返回true,否则返回false
//////////////////////////////////////////////////////////
bool stringcmp(char *base,char *des)
{
	int baselen=strlen(base);
	int deslen=strlen(des);
	char temp[9]={0};
	int i=0;
	int flag=0;
	
	memset(temp,0,strlen(temp));
	for(i=0;i<=(deslen-baselen);i  )
	{
		strncpy(temp,des i,baselen);
		if(strcmp(base,temp)==0)
		{
			flag=1;
			break;
		}
	}

	if(flag)
		return TRUE;
	else
		return FALSE;
}


void CIP_changerDlg::DisplayAdapterInfo(const ADAPTER_INFO adapterinfo)
{
	GetDlgItem(IDC_IPADDRESS_IP)->SetWindowText(adapterinfo.strIP);
	GetDlgItem(IDC_IPADDRESS_SUBMASK)->SetWindowText(adapterinfo.strNetMask);
//	GetDlgItem(IDC_STCAP_GATEWAY)->SetWindowText(adapterinfo.strNetGate);
//	GetDlgItem(IDC_STCAP_DNS)->SetWindowText(adapterinfo.strNameServer);
}


void GetFileName(int index,CString& fileName)
{
	fileName.Format("%s%d%s","Adapter",index,".config");
}

void CIP_changerDlg::CreateConfigFile(const CString fileName,const ADAPTER_INFO adatperinfo)
{
	
	IPConfigInfo ipconf;
	CFileFind ff;
	if(ff.FindFile(fileName))//移除文件
	{		
		ff.Close();
		CFile::Remove(fileName);
		
	}
	CFile file(fileName,CFile::modeCreate);//重新创建文件
		IPConfigInfo temp;
		file.Close(); 

	AdatperInfoToIPConfInfo(adatperinfo,ipconf);

	CFile file_w;
	CString fileContent;

	if(file_w.Open(fileName,CFile::modeNoTruncate|CFile::modeWrite)==0)
	{
		AfxMessageBox(_T("打开文件错误"));
		return;
	}
	
	fileContent =ipconf.IPAddr;
	fileContent ="/";
	fileContent =ipconf.SubMask;
	fileContent ="/";
	fileContent =ipconf.DefGateway;
	fileContent ="/";
	fileContent =ipconf.NameServer;
	fileContent ="#";
	
	file_w.SeekToEnd();
	file_w.Write(fileContent,fileContent.GetLength());
	file_w.Close();

	
}

/*
void CIP_changerDlg::CreateConfigFile(const CString fileName,const ADAPTER_INFO adatperinfo)
{
	CFileFind ff;
	if(ff.FindFile(fileName))
	{		
		ff.Close();
		CFile::Remove(fileName); 
	}
	
	CFile file(fileName,CFile::modeCreate);
	IPConfigInfo temp;
	file.Close();

	AdatperInfoToIPConfInfo(adatperinfo,temp);



	WrtieIPconfToFile(fileName,temp);
	
}
*/
void AdatperInfoToIPConfInfo(const ADAPTER_INFO adatperinfo,IPConfigInfo& ipconf)
{
		ipconf.IPAddr=adatperinfo.strIP;
		ipconf.SubMask=adatperinfo.strNetMask;
		ipconf.DefGateway=adatperinfo.strNetGate;
		ipconf.NameServer=adatperinfo.strNameServer;
}

void CIP_changerDlg::OnCbnSelchangeCombo1()//点击下拉列表时的响应函数
{
	// TODO: 在此添加控件通知处理程序代码
	CString FileContent,fileName,IPStr,temp;
	IPConfigInfo IPConf;
	int i=0,j=0,len;
	//刷新适配器显示列表
	DisplayAdapterInfo(AdapterInfoVector[m_adapter.GetCurSel()]);
	//刷新IP地址显示列表
	GetFileName(m_adapter.GetCurSel(),fileName);
	ReadFileToString(fileName,FileContent);

	GetIPAddrFromString(FileContent,IPStr);
	if(IPStr.GetLength()>1)//读取文件IP地址和子网掩码
	{
		len=IPStr.GetLength();
//		m_ipAddr.ResetContent();
		while(i<len)
		{
			temp.Empty();
			for(;IPStr.GetAt(i)!='#';i  )
				temp =IPStr.GetAt(i);
			j  ;
			i  ;
		}
		IPStr.Empty();
		IPStr=temp;//恢复对应IP

	
//		m_ipAddr.GetLBText(m_ipAddr.GetCurSel(),IPStr);
		GetIPConfigFromString(IPStr,FileContent,IPConf);
		DisplayIPConfInfo(IPConf);
	}
	else
	{	
		IPConfigInfo IPConf;
//		m_ipAddr.ResetContent();
		DisplayIPConfInfo(IPConf);
		MessageBox("该网卡没有配置IP信息");
	}

}

void  CIP_changerDlg::GetIPConfigFromString(const CString IPStr,const CString str,IPConfigInfo& IPConf)
{                                                              
	int i=0,j=0,pos=str.Find(IPStr);
	int len=str.GetLength();
	
	IPConf.IPAddr=IPStr;
	for(;str.GetAt(pos)!='/';pos  );
	pos  ;

	for(;str.GetAt(pos)!='/';pos  )
		IPConf.SubMask =str.GetAt(pos);
	pos  ;
	
	for(;str.GetAt(pos)!='/';pos  )
		IPConf.DefGateway =str.GetAt(pos);
	pos  ;

	for(;str.GetAt(pos)!='#';pos  )
		IPConf.NameServer =str.GetAt(pos);
	
}
void CIP_changerDlg::DisplayIPConfInfo(const IPConfigInfo IPconf)
{
	GetDlgItem(IDC_IPADDRESS_IP)->SetWindowText(IPconf.IPAddr);
	GetDlgItem(IDC_IPADDRESS_SUBMASK)->SetWindowText(IPconf.SubMask);


//	GetDlgItem(IDC_STCIP_GATEWAY)->SetWindowText(IPconf.DefGateway);
//	GetDlgItem(IDC_STCIP_DNS)->SetWindowText(IPconf.NameServer);
}


bool CIP_changerDlg::ReadFileToString(const CString fileName, CString &contentStr)
{
	CFile file;
	if(file.Open(fileName,CFile::modeRead)==0)
	{
		MessageBox(_T("读取文件失败"));
		return FALSE;
	}
	
	char content[MAXLEN];
	int len=file.Read(content,MAXLEN);
	content[len]='\0';
	contentStr.Format("%s",content);
	file.Close();
	if(contentStr.IsEmpty())
	{
		CString temp;
		temp =fileName;
		temp ="文件为空,请点击“添加IP项”添加配置信息";
		MessageBox(temp);
		return FALSE;
	}
	
	return TRUE;
}

/////////////////////////////////////////////////////////////////
//得到contentStr中的所有IP地址
///////////////////////////////////////////////////////////////////
void CIP_changerDlg::GetIPAddrFromString(const CString str, CString &IPStr)
{
	int i=0,j=0;
	int len=str.GetLength();
	while(j<len)
	{
		if(i==0||str.GetAt(i)=='#')
		{
			while(i<len&&str.GetAt(i)!='/')
			{
				IPStr =str.GetAt(i);
				i  ;
			}
		}
		for(;i<len&&str.GetAt(i)!='#';i  )
			;
		j=i;
	}
		

}

标签: IP 源码 地址 修改

实例下载地址

c++ IP地址修改源码(更换ip地址)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 dengyijun103 发表于: 2019-04-10 09:49 52
扣了积分还下载不了啊?

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警