⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powernetconfigdlg.cpp

📁 在Win2000系统下修改主机名、IP、网关、子网掩码和代理服务器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	SetIEInfo(m_strProxy,m_strPort);

	//调出网络和拨号连接
	PROCESS_INFORMATION process_info;
	STARTUPINFO startup_info={sizeof(startup_info)};
	CreateProcess(NULL,"control.exe ncpa.cpl",NULL,NULL,FALSE,CREATE_NO_WINDOW,
		NULL,NULL,&startup_info,&process_info);

	
}

/**********************************************************************
函数名:GetConfigData
用途:  从对话框中获取相应的数据
参数:  
返回值:
**********************************************************************/
void CPowerNetConfigDlg::GetConfigData()
{
	UpdateData(TRUE);
	//去掉前面和后面的空格
    m_strName.TrimLeft();
	m_strName.TrimRight();
	m_strPort.TrimLeft();
	m_strPort.TrimRight();

	//得到IP、网关、子网掩码和代理服务器信息
	BYTE b1,b2,b3,b4;
	m_ctrlIP.GetAddress(b1,b2,b3,b4);
    m_strIP.Format("%d.%d.%d.%d",b1,b2,b3,b4);

	m_ctrlSubNetMask.GetAddress(b1,b2,b3,b4);
    m_strSubNetMask.Format("%d.%d.%d.%d",b1,b2,b3,b4);

	m_ctrlGateway.GetAddress(b1,b2,b3,b4);
    m_strGateway.Format("%d.%d.%d.%d",b1,b2,b3,b4);

	m_ctrlProxy.GetAddress(b1,b2,b3,b4);
    m_strProxy.Format("%d.%d.%d.%d",b1,b2,b3,b4);

}
/**********************************************************************
函数名:ReadData
用途:  读取网络配置信息
参数:  
返回值:
**********************************************************************/
void CPowerNetConfigDlg::ReadData()
{
	m_list.RemoveAll();
	CString fullPath;
	fullPath=GetExePath((LPCTSTR)__argv[0]);
	SetCurrentDirectory(fullPath);
	fullPath+=_T("\\data.sav");
	CStdioFile file;
	if (file.Open(fullPath,CFile::modeRead))
	{
		CString temp;
		int nTotal;
		file.ReadString(temp);
		nTotal=atoi((LPCTSTR)temp);
		for (int i=0;i<nTotal;i++)
		{
			TCPIPInfo info;
			info.Read(&file);
			m_list.AddHead(info);
		}
      	file.Close();
	}
	else return ;
}

/**********************************************************************
函数名:SaveData
用途:  存储网络配置信息
参数:  
返回值:
**********************************************************************/
void CPowerNetConfigDlg::SaveData()
{
	CString fullPath;
	fullPath = GetExePath(__argv[0]);
	SetCurrentDirectory(fullPath);
	fullPath+=_T("\\data.sav");
	CStdioFile file;
	if (file.Open(fullPath,CFile::modeCreate|CFile::modeWrite))
	{
		CString temp;
		temp.Format("%d\n",m_list.GetCount());
		file.WriteString(temp);
	    POSITION pos;
		pos=m_list.GetHeadPosition();
		while(pos)
		{
			TCPIPInfo info;
			info=m_list.GetNext(pos);
			info.Write(&file);
		}
		file.Close();
	}
	else return ;
}

/**********************************************************************
函数名:GetExePath
用途:  获得一个exe文件所在的文件夹
参数:  strFullPath[in],exe文件的全路径
返回值:exe文件所在的文件夹
**********************************************************************/
CString CPowerNetConfigDlg::GetExePath(CString strFullPath)
{
	int nIndex = strFullPath.ReverseFind('\\');
	strFullPath = strFullPath.Left(nIndex);
	return strFullPath;
}

/**********************************************************************
函数名:SetTCPIPInfo
用途:  用于设置IP地址、子网掩码、缺省网关
参数:  strIPAddress[in],IP地址,形式为192.168.0.26
		strSubNetMask[in],子网掩码,形式为255.255.255.0
		strDefaultGateWay[in],缺省网关,形式为192.168.0.1
返回值:调用成功返回TRUE,否则返回FALSE
**********************************************************************/
BOOL CPowerNetConfigDlg::SetTCPIPInfo(CString strIPAddress,
									 CString strSubNetMask,CString strDefaultGateWay)
{
	char *tIP=NULL;
    char *tMask=NULL;
    char *tGateway=NULL;
	int len[3];

    strIPAddress = strIPAddress+'\0'+'\0';
	len[0] = strIPAddress.GetLength();
	tIP=(char*)malloc(len[0]);
	if (!tIP)
		return FALSE;
	memcpy(tIP,strIPAddress,len[0]);
 
	strSubNetMask = strSubNetMask+'\0'+'\0';
	len[1]=strSubNetMask.GetLength();
	tMask=(char*)malloc(len[1]);
	if (!tMask)
		return FALSE;
	memcpy(tMask,strSubNetMask,len[1]);

    strDefaultGateWay = strDefaultGateWay+'\0'+'\0';
	len[2] = strDefaultGateWay.GetLength();
	tGateway=(char*)malloc(len[2]);
	if (!tGateway)
		return FALSE;
	memcpy(tGateway,m_strGateway,len[2]);

	CString str[6];
	str[0]="SYSTEM\\CurrentControlSet\\Services\\";
	str[0]+=GetServiceName();
	str[0]+="\\Parameters\\Tcpip";
    str[1]="SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
	str[1]+=GetServiceName();
    str[2]="SYSTEM\\ControlSet001\\Services\\";
	str[2]+=GetServiceName();
	str[2]+="\\Parameters\\Tcpip";
	str[3]="SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces\\";
	str[3]+=GetServiceName();
    str[4]="SYSTEM\\ControlSet002\\Services\\";
	str[4]+=GetServiceName();
	str[4]+="\\Parameters\\Tcpip";
    str[5]="SYSTEM\\ControlSet002\\Services\\Tcpip\\Parameters\\Interfaces\\";
	str[5]+=GetServiceName();

	for (int i=0;i<6;i++)
	{
		HKEY hKey;
		long ret = RegCreateKey(HKEY_LOCAL_MACHINE,str[i],&hKey);
		if (ret!=ERROR_SUCCESS)
		{
			RegCloseKey(hKey);
			return FALSE;
		}

		ret = RegSetValueEx(hKey,"IPAddress",0,REG_MULTI_SZ,(CONST BYTE*)tIP,len[0]);
		if (ret!=ERROR_SUCCESS)
		{
			RegCloseKey(hKey);
			return FALSE;
		}
		ret = RegSetValueEx(hKey,"SubnetMask",0,REG_MULTI_SZ,(CONST BYTE*)tMask,len[1]);
		if (ret!=ERROR_SUCCESS)
		{
			RegCloseKey(hKey);
			return FALSE;
		}
		ret = RegSetValueEx(hKey,"DefaultGateway",0,REG_MULTI_SZ,(CONST BYTE*)tGateway,len[2]);
		if (ret!=ERROR_SUCCESS)
		{
			RegCloseKey(hKey);
			return FALSE;
		}

		RegCloseKey(hKey);
	}

	free(tIP);
	free(tMask);
	free(tGateway);
	
    //发送广播消息,通知现在已打开得窗口更新
	::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);

	return TRUE;
}

/**********************************************************************
函数名:SetIEInfo
用途:  为IE设置代理服务器
参数:  strProxy[in],代理服务器,形式为192.168.0.1
		strPort[in],端口号,形式为8000
返回值:
**********************************************************************/
void CPowerNetConfigDlg::SetIEInfo(CString strProxy,CString strPort)
{
	CString str,temp;
	temp=strProxy;
	temp+="  :";
	temp+=strPort;
	str="Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
	CRegKey RegKey;
	long ret=RegKey.Create(HKEY_CURRENT_USER,str);
	ret=RegKey.SetValue(temp,"ProxyServer");
	if (ret!=ERROR_SUCCESS)
	{
		RegKey.Close();
		return ;
	}

    RegKey.Close();
    
	//发送广播消息,通知现在已打开得窗口更新
	::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);

	return ;
}

/**********************************************************************
函数名:GetServiceName
用途:  读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
		NetworkCards\netcard#(netcard# 通常为"1",但是如果安装了多块网卡
		名称就会有所不同)子键下的"ServiceName"的值
参数:  
返回值:上述"ServiceName"的值
**********************************************************************/
CString CPowerNetConfigDlg::GetServiceName()
{
	CString str;
	DWORD dw = 256;
	char buff[256];
	memset(buff,0,dw);
	CRegKey RegKey;
	long ret=RegKey.Open(HKEY_LOCAL_MACHINE,
		"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\1");
	ret=RegKey.QueryValue(buff,"ServiceName",&dw);
	if (ret!=ERROR_SUCCESS)
		str.Empty();
    RegKey.Close();
	
	str = buff;
	
	return str;   
}

void CPowerNetConfigDlg::OnSelchangeList() 
{
	CComboBox* pList=(CComboBox*)GetDlgItem(IDC_LIST);
	CString str;
	pList->GetWindowText(str);
	POSITION pos,oldPos;
	pos=m_list.GetHeadPosition();
	TCPIPInfo info;
	while(pos)
	{
		oldPos=pos;
		info=m_list.GetNext(pos);
		if (info.m_strName.CompareNoCase(str)==0)
			break;
	}
	info=m_list.GetAt(oldPos);
	m_strName=info.m_strName;
	m_strPort=info.m_strPort;
	GetDlgItem(IDC_IP)->SetWindowText(info.m_strIP);
	GetDlgItem(IDC_SUBNETMASK)->SetWindowText(info.m_strSubNetMask);
	GetDlgItem(IDC_GATEWAY)->SetWindowText(info.m_strDefaultGateWay);
	GetDlgItem(IDC_PROXY)->SetWindowText(info.m_strProxy);
    
	UpdateData(FALSE);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -