📄 powernetconfigdlg.cpp
字号:
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 + -