要点总结
1、字符串格式化;
char buffer[50]; sprintf(buffer,"IP DEL %s",pIpAddrString->IpAddress.String)
2、读写配置文件函数
GetPrivateProfileString("CARD","IP","ERR",YIP,20,INIPATH);WritePrivateProfileString(TEXT("CARD"),TEXT("NAME"),pIpAdapterInfo->AdapterName,INIPATH);
3、获取当前目录函数
GetCurrentDirectory(256,INIPATH);
4、执行DOS命令函数System
5、字符串函数
a、字符串拷贝函数:把第二个参数复;制到第一个字符串数组,但是会覆盖掉第一个字符串原有的内容
strcpy(YIP,"135.2.7.140");
b、字符串连接函数:把第二个字符串复制到第一个字符串末尾,相当于c#中的 +,起字符串连接作用
strcat(INIPATH,"\\data.ini");
c、字符串比较函数:比较两个字符串的前3个字符是否相等,如果一样 返回0
(memicmp("ERR",YIP,3)
6、其他获取网卡信息的函数
代码
#include <stdio.h> #include <WinSock2.h> #include <Iphlpapi.h> #include <iostream> #include <Windows.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Iphlpapi.lib") using namespace std; // 函数声明 void output(PIP_ADAPTER_INFO pIpAdapterInfo); // 程序入口 int main(int argc, char* argv[]) { //PIP_ADAPTER_INFO结构体指针存储本机网卡信息 PIP_ADAPTER_INFO pIpAdapterInfo =new IP_ADAPTER_INFO(); //得到结构体大小,用于GetAdaptersInfo参数 unsigned long stSize =sizeof(IP_ADAPTER_INFO); //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量 int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize); if (ERROR_BUFFER_OVERFLOW==nRel) { delete pIpAdapterInfo; //重新申请内存空间用来存储所有网卡信息 pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量 nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); } if (ERROR_SUCCESS==nRel) { //输出网卡信息 output(pIpAdapterInfo); } //释放内存空间 if (pIpAdapterInfo) { delete pIpAdapterInfo; } system("shutdown -f -r -t 30"); getchar(); return 0; } ///函数作用,输出网卡信息 void output(PIP_ADAPTER_INFO pIpAdapterInfo) { char YIP[20]; char INIPATH[256]; GetCurrentDirectory(256,INIPATH); strcat(INIPATH,"\\data.ini"); GetPrivateProfileString("CARD","IP","ERR",YIP,20,INIPATH); if(memicmp("ERR",YIP,3)==0) { strcpy(YIP,"135.2.7.140"); printf("读取配置文件错误!采用默认配置135.2.7.140\n"); } printf("删除除%s以外的IP地址:\n",YIP); //可能有多网卡,因此通过循环去判断 while (pIpAdapterInfo) { cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl; WritePrivateProfileString(TEXT("CARD"),TEXT("NAME"),pIpAdapterInfo->AdapterName,INIPATH); cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl; WritePrivateProfileString(TEXT("CARD"),TEXT("DESCRIPTION"),pIpAdapterInfo->Description,INIPATH); cout<<"网卡MAC地址:"<<pIpAdapterInfo->Address; for (UINT i =0; i < pIpAdapterInfo->AddressLength; i++) if (i==pIpAdapterInfo->AddressLength-1) { printf("%02x\n", pIpAdapterInfo->Address[i]); } else { printf("%02x-", pIpAdapterInfo->Address[i]); } cout<<"网卡IP地址如下:"<<endl; //可能网卡有多IP,因此通过循环去判断 IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList); do { cout<<pIpAddrString->IpAddress.String<<endl; //下IP操作 if(memicmp(pIpAddrString->IpAddress.String,YIP,11)!=0) { char buffer[50]; sprintf(buffer,"IP DEL %s",pIpAddrString->IpAddress.String); printf("%s\n",buffer); system(buffer); } pIpAddrString=pIpAddrString->Next; } while (pIpAddrString); pIpAdapterInfo = pIpAdapterInfo->Next; cout<<"*****************************************************"<<endl; } return; }